use crate::{Any, Decoder, Error, Result};
use core::convert::TryFrom;
pub trait Decodable<'a>: Sized {
fn decode(decoder: &mut Decoder<'a>) -> Result<Self>;
fn from_der(bytes: &'a [u8]) -> Result<Self> {
let mut decoder = Decoder::new(bytes);
let result = Self::decode(&mut decoder)?;
decoder.finish(result)
}
}
impl<'a, T> Decodable<'a> for T
where
T: TryFrom<Any<'a>, Error = Error>,
{
fn decode(decoder: &mut Decoder<'a>) -> Result<T> {
Any::decode(decoder)
.and_then(Self::try_from)
.or_else(|e| decoder.error(e.kind()))
}
}