use super::{reader::PemReader, PemLabel};
use crate::{Decode, Reader};
pub trait DecodePem: Decode + PemLabel + Sized {
fn decode_pem(pem: impl AsRef<[u8]>) -> Result<Self, Self::Error>;
}
impl<T: Decode + PemLabel + Sized> DecodePem for T {
fn decode_pem(pem: impl AsRef<[u8]>) -> Result<Self, Self::Error> {
let mut reader = PemReader::new(pem.as_ref()).map_err(crate::Error::from)?;
Self::validate_pem_label(reader.type_label()).map_err(crate::Error::from)?;
let ret = Self::decode(&mut reader)?;
Ok(reader.finish(ret)?)
}
}