pub trait Encode {
// Required methods
fn encoded_len(&self) -> Result<Length>;
fn encode(&self, writer: &mut impl Writer) -> Result<()>;
// Provided methods
fn encode_to_slice<'a>(&self, buf: &'a mut [u8]) -> Result<&'a [u8]> { ... }
fn encode_to_vec(&self, buf: &mut Vec<u8>) -> Result<Length> { ... }
fn to_der(&self) -> Result<Vec<u8>> { ... }
}Expand description
Encode trait produces a complete TLV (Tag-Length-Value) structure.
As opposed to EncodeValue, implementer is expected to write whole ASN.1 DER header, before writing value.
§Example
use der::{Any, Encode, Length, Reader, Writer};
/// Wrapper around Any, with custom foreign trait support.
///
/// For example: serde Serialize/Deserialize
pub struct AnySerde(pub Any);
impl Encode for AnySerde {
fn encoded_len(&self) -> der::Result<Length> {
self.0.encoded_len()
}
fn encode(&self, writer: &mut impl Writer) -> der::Result<()> {
self.0.encode(writer)
}
}Required Methods§
Sourcefn encoded_len(&self) -> Result<Length>
fn encoded_len(&self) -> Result<Length>
Compute the length of this TLV object in bytes when encoded as ASN.1 DER.
§Errors
Returns an error if the length could not be computed (e.g. overflow).
Provided Methods§
Sourcefn encode_to_slice<'a>(&self, buf: &'a mut [u8]) -> Result<&'a [u8]>
fn encode_to_slice<'a>(&self, buf: &'a mut [u8]) -> Result<&'a [u8]>
Encode this TLV object to the provided byte slice, returning a sub-slice containing the encoded message.
§Errors
In the event an encoding error occurred.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
Source§impl<T> Encode for PhantomData<T>where
T: ?Sized,
Dummy implementation for PhantomData which allows deriving
implementations on structs with phantom fields.
impl<T> Encode for PhantomData<T>where
T: ?Sized,
Dummy implementation for PhantomData which allows deriving
implementations on structs with phantom fields.