ssh_encoding/pem/
decode.rs1use super::{PemLabel, reader::PemReader};
2use crate::{Decode, Error, Reader};
3
4#[diagnostic::on_unimplemented(
9 note = "Consider adding impls of `Decode` and `PemLabel` to `{Self}`"
10)]
11pub trait DecodePem: Decode + PemLabel + Sized {
12 fn decode_pem(pem: impl AsRef<[u8]>) -> Result<Self, Self::Error>;
19}
20
21impl<T: Decode + PemLabel + Sized> DecodePem for T {
22 fn decode_pem(pem: impl AsRef<[u8]>) -> Result<Self, Self::Error> {
23 let mut reader = PemReader::new(pem.as_ref())?;
24 Self::validate_pem_label(reader.type_label()).map_err(Error::from)?;
25
26 let ret = Self::decode(&mut reader)?;
27 Ok(reader.finish(ret)?)
28 }
29}