Trait rocket::mtls::oid::asn1_rs::FromDer

source ·
pub trait FromDer<'a>: Sized {
    // Required method
    fn from_der(bytes: &'a [u8]) -> Result<(&'a [u8], Self), Err<Error>>;
}
Available on crate feature mtls only.
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§

source

fn from_der(bytes: &'a [u8]) -> Result<(&'a [u8], Self), Err<Error>>

Attempt to parse input bytes into a DER object (enforcing constraints)

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<'a> FromDer<'a> for Header<'a>

source§

impl<'a> FromDer<'a> for Any<'a>

source§

impl<'a, T> FromDer<'a> for Option<T>
where T: FromDer<'a>,

source§

impl<'a, T> FromDer<'a> for Vec<T>
where T: FromDer<'a>,

source§

impl<'a, T> FromDer<'a> for TaggedParser<'a, Explicit, T>
where T: FromDer<'a>,

source§

impl<'a, T> FromDer<'a> for TaggedParser<'a, Implicit, T>
where T: TryFrom<Any<'a>, Error = Error> + CheckDerConstraints + Tagged,

source§

impl<'a, T> FromDer<'a> for T
where T: TryFrom<Any<'a>, Error = Error> + CheckDerConstraints,