pub trait BERDecodable: Sized {
// Required method
fn decode_ber<'a, 'b>(reader: BERReader<'a, 'b>) -> ASN1Result<Self>;
}Expand description
Types decodable in BER.
§Examples
use yasna;
let asn : i64 = yasna::decode_der(&[2, 3, 0, 255, 255]).unwrap();
assert_eq!(asn, 65535);§Limitations
Rust types don’t correspond to ASN.1 types one-to-one. Not all kinds
of ASN.1 types can be decoded via default BERDecodable implementation.
If you want to decode ASN.1, you may implement BERDecodable for your
own types or use parse_der/
parse_ber.
§Default implementations
- The decoder for
Vec<T>is implemented as SEQUENCE OF decoder. ()as NULL decoder.- Tuples (except
()) as SEQUENCE decoder. Vec<u8>as OCTETSTRING decoder.BitVecas BITSTRING decoder.Stringas UTF8String decoder.i64,u64,i32,u32,i16,u16,BigInt,BigUintas INTEGER decoder. (u8is avoided because of confliction.)boolas BOOLEAN decoder.ObjectIdentifieras OBJECTT IDENTIFIER decoder.UTCTime/GeneralizedTimeas UTCTime/GeneralizedTime decoder.
Required Methods§
Sourcefn decode_ber<'a, 'b>(reader: BERReader<'a, 'b>) -> ASN1Result<Self>
fn decode_ber<'a, 'b>(reader: BERReader<'a, 'b>) -> ASN1Result<Self>
Reads an ASN.1 value from BERReader and converts it to Self.
§Examples
use yasna::{BERDecodable,BERReader,ASN1Result};
struct Entry {
name: String,
age: i64,
}
impl BERDecodable for Entry {
fn decode_ber(reader: BERReader) -> ASN1Result<Self> {
reader.read_sequence(|reader| {
let name = reader.next().read_visible_string()?;
let age = reader.next().read_i64()?;
return Ok(Entry {
name: name,
age: age,
});
})
}
}
fn main() {
let entry : Entry = yasna::decode_der(
&[48, 9, 26, 4, 74, 111, 104, 110, 2, 1, 32]).unwrap();
assert_eq!(entry.name, "John");
assert_eq!(entry.age, 32);
}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl BERDecodable for bool
impl BERDecodable for bool
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for i16
impl BERDecodable for i16
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for i32
impl BERDecodable for i32
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for i64
impl BERDecodable for i64
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for u16
impl BERDecodable for u16
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for u32
impl BERDecodable for u32
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for u64
impl BERDecodable for u64
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for ()
impl BERDecodable for ()
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for BitVec
Available on crate feature bit-vec only.
impl BERDecodable for BitVec
Available on crate feature
bit-vec only.fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for BigInt
Available on crate feature num-bigint only.
impl BERDecodable for BigInt
Available on crate feature
num-bigint only.fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for BigUint
Available on crate feature num-bigint only.
impl BERDecodable for BigUint
Available on crate feature
num-bigint only.fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for String
impl BERDecodable for String
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl BERDecodable for Vec<u8>
impl BERDecodable for Vec<u8>
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0> BERDecodable for (T0,)where
T0: BERDecodable,
impl<T0> BERDecodable for (T0,)where
T0: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1> BERDecodable for (T0, T1)where
T0: BERDecodable,
T1: BERDecodable,
impl<T0, T1> BERDecodable for (T0, T1)where
T0: BERDecodable,
T1: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2> BERDecodable for (T0, T1, T2)
impl<T0, T1, T2> BERDecodable for (T0, T1, T2)
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3> BERDecodable for (T0, T1, T2, T3)
impl<T0, T1, T2, T3> BERDecodable for (T0, T1, T2, T3)
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4> BERDecodable for (T0, T1, T2, T3, T4)
impl<T0, T1, T2, T3, T4> BERDecodable for (T0, T1, T2, T3, T4)
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5> BERDecodable for (T0, T1, T2, T3, T4, T5)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
impl<T0, T1, T2, T3, T4, T5> BERDecodable for (T0, T1, T2, T3, T4, T5)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5, T6> BERDecodable for (T0, T1, T2, T3, T4, T5, T6)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
impl<T0, T1, T2, T3, T4, T5, T6> BERDecodable for (T0, T1, T2, T3, T4, T5, T6)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
impl<T0, T1, T2, T3, T4, T5, T6, T7> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
T9: BERDecodable,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
T9: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
T9: BERDecodable,
T10: BERDecodable,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
T9: BERDecodable,
T10: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
T9: BERDecodable,
T10: BERDecodable,
T11: BERDecodable,
impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> BERDecodable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)where
T0: BERDecodable,
T1: BERDecodable,
T2: BERDecodable,
T3: BERDecodable,
T4: BERDecodable,
T5: BERDecodable,
T6: BERDecodable,
T7: BERDecodable,
T8: BERDecodable,
T9: BERDecodable,
T10: BERDecodable,
T11: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Source§impl<T> BERDecodable for Vec<T>where
T: BERDecodable,
impl<T> BERDecodable for Vec<T>where
T: BERDecodable,
fn decode_ber(reader: BERReader<'_, '_>) -> ASN1Result<Self>
Implementors§
impl BERDecodable for GeneralizedTime
Available on crate feature
time only.impl BERDecodable for ObjectIdentifier
impl BERDecodable for TaggedDerValue
impl BERDecodable for UTCTime
Available on crate feature
time only.