Skip to main content

Encode

Trait Encode 

Source
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§

Source

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).

Source

fn encode(&self, writer: &mut impl Writer) -> Result<()>

Encode this TLV object as ASN.1 DER using the provided Writer.

§Errors

In the event an encoding error occurred.

Provided Methods§

Source

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.

Source

fn encode_to_vec(&self, buf: &mut Vec<u8>) -> Result<Length>

Available on crate feature alloc only.

Encode this TLV object as ASN.1 DER, appending it to the provided byte vector.

§Errors

In the event an encoding error occurred.

Source

fn to_der(&self) -> Result<Vec<u8>>

Available on crate feature alloc only.

Encode this TLV object as ASN.1 DER, returning a byte vector.

§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 &Option<T>
where T: Encode,

Source§

fn encoded_len(&self) -> Result<Length, Error>

Source§

fn encode(&self, writer: &mut impl Writer) -> Result<(), Error>

Source§

impl<T> Encode for Option<T>
where T: Encode,

Source§

fn encoded_len(&self) -> Result<Length, Error>

Source§

fn encode(&self, writer: &mut impl Writer) -> Result<(), Error>

Source§

impl<T> Encode for PhantomData<T>
where T: ?Sized,

Dummy implementation for PhantomData which allows deriving implementations on structs with phantom fields.

Source§

fn encoded_len(&self) -> Result<Length>

Source§

fn encode(&self, _writer: &mut impl Writer) -> Result<()>

Implementors§

Source§

impl Encode for Tag

Source§

impl Encode for Document

Available on crate feature alloc only.
Source§

impl Encode for Header

Source§

impl Encode for Length

Source§

impl<T> Encode for EncodeRef<'_, T>
where T: Encode,

Source§

impl<T> Encode for T
where T: EncodeValue + Tagged + ?Sized,