Trait asn1_rs::FromDer [−][src]
Expand description
Base trait for DER object parsers
Library authors should usually not directly implement this trait, but should prefer implementing the
TryFrom<Any>
+ CheckDerConstraint
traits,
which offers greater flexibility and provides an equivalent FromDer
implementation for free
(in fact, it provides both FromBer
and FromDer
).
Note: if you already implemented TryFrom<Any>
to get the FromBer
implementation, then you only
have to add a CheckDerConstraint
implementation.
Examples
use asn1_rs::{Any, CheckDerConstraints, Result, Tag}; use std::convert::TryFrom; // The type to be decoded #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub struct MyType(pub u32); impl<'a> TryFrom<Any<'a>> for MyType { type Error = asn1_rs::Error; fn try_from(any: Any<'a>) -> Result<MyType> { any.tag().assert_eq(Tag::Integer)?; // for this fictive example, the type contains the number of characters let n = any.data.len() as u32; Ok(MyType(n)) } } impl CheckDerConstraints for MyType { fn check_constraints(any: &Any) -> Result<()> { any.header.assert_primitive()?; Ok(()) } } // The above code provides a `FromDer` implementation for free. // Example of parsing code: use asn1_rs::FromDer; let input = &[2, 1, 2]; // Objects can be parsed using `from_der`, which returns the remaining bytes // and the parsed object: let (rem, my_type) = MyType::from_der(input).expect("parsing failed");
Required methods
Implementations on Foreign Types
Implementors
impl<'a, T> FromDer<'a> for TaggedParser<'a, Implicit, T> where
T: TryFrom<Any<'a>, Error = Error>,
T: CheckDerConstraints,
T: Tagged,