Skip to main content

Encoder

Struct Encoder 

Source
pub struct Encoder { /* private fields */ }
Expand description

Encodes Rust structures into Basic Encoding Rules data.

Every value is written straight into one output buffer. A value whose contents length is not known in advance reserves one length octet, which is completed once the contents are written; when the long form is needed, the contents are shifted along to make room. The components of a SET and the elements of a SET OF are encoded in sequence and reordered in place.

Implementations§

Source§

impl Encoder

Source

pub fn new(config: EncoderOptions) -> Self

Creates a new instance from the given config.

Source

pub fn codec(&self) -> Codec

Returns the currently selected codec.

Source

pub fn new_set(config: EncoderOptions) -> Self

Creates a new instance from the given config, and uses SET encoding logic, ensuring that all messages are encoded in order by tag.

Source

pub fn new_with_buffer(config: EncoderOptions, buffer: Vec<u8>) -> Self

Creates a new instance from the given config and a user-supplied Vec<u8> buffer. This allows reuse of an existing buffer instead of allocating a new encoding buffer each time an Encoder is created. The buffer will be cleared before use.

Source

pub fn output(self) -> Vec<u8> ⓘ

Consumes the encoder and returns the output of the encoding.

Source

pub fn datetime_to_canonical_generalized_time_bytes( value: &DateTime<FixedOffset>, ) -> Vec<u8> ⓘ

Canonical byte presentation for CER/DER as defined in X.690 section 11.7. Also used for BER on this crate.

Source

pub fn datetime_to_canonical_utc_time_bytes(value: &DateTime<Utc>) -> Vec<u8> ⓘ

Canonical byte presentation for CER/DER UTCTime as defined in X.690 section 11.8. Also used for BER on this crate.

Source

pub fn naivedate_to_date_bytes(value: &NaiveDate) -> Vec<u8> ⓘ

Canonical byte presentation for CER/DER DATE as defined in X.690 section 8.26.2 Also used for BER on this crate.

Trait Implementations§

Source§

impl Encoder<'_> for Encoder

Source§

fn encode_extension_addition_group<const RC: usize, const EC: usize, E>( &mut self, value: Option<&E>, _: Identifier, ) -> Result<Self::Ok, Self::Error>
where E: Encode + Constructed<RC, EC>,

Encode a extension addition group value.

Source§

type Ok = ()

The associated success type returned on success.
Source§

type Error = EncodeError

The associated error type returned on failure.
Source§

type AnyEncoder<'this, const R: usize, const E: usize> = Encoder

Helper type for encoding recursive Encoder instances with different RCL or ECL values.
Source§

fn codec(&self) -> Codec

Returns codec variant of Codec that current encoder is encoding.
Source§

fn encode_any( &mut self, tag: Tag, value: &Any, _identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode an unknown ASN.1 value.
Source§

fn encode_bit_string( &mut self, tag: Tag, constraints: &Constraints, value: &BitStr, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a BIT STRING value.
Source§

fn encode_bool( &mut self, tag: Tag, value: bool, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a BOOL value.
Source§

fn encode_choice<E: Encode>( &mut self, _: &Constraints, _t: Tag, encode_fn: impl FnOnce(&mut Self) -> Result<Tag, Self::Error>, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a CHOICE value.
Source§

fn encode_enumerated<E: Enumerated>( &mut self, tag: Tag, value: &E, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a ENUMERATED value.
Source§

fn encode_integer<I: IntegerType>( &mut self, tag: Tag, constraints: &Constraints, value: &I, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a INTEGER value.
Source§

fn encode_real<R: RealType>( &mut self, _: Tag, _: &Constraints, _: &R, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a REAL value.
Source§

fn encode_null( &mut self, tag: Tag, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a NULL value.
Source§

fn encode_object_identifier( &mut self, tag: Tag, oid: &[u32], _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a OBJECT IDENTIFIER value.
Source§

fn encode_octet_string( &mut self, tag: Tag, constraints: &Constraints, value: &[u8], _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a OCTET STRING value.
Source§

fn encode_visible_string( &mut self, tag: Tag, constraints: &Constraints, value: &VisibleString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a VisibleString value.
Source§

fn encode_ia5_string( &mut self, tag: Tag, constraints: &Constraints, value: &Ia5String, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a Ia5String value.
Source§

fn encode_general_string( &mut self, tag: Tag, constraints: &Constraints, value: &GeneralString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a GeneralString value.
Source§

fn encode_graphic_string( &mut self, tag: Tag, constraints: &Constraints, value: &GraphicString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a GraphicString value.
Source§

fn encode_printable_string( &mut self, tag: Tag, constraints: &Constraints, value: &PrintableString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a Ia5String value.
Source§

fn encode_numeric_string( &mut self, tag: Tag, constraints: &Constraints, value: &NumericString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a NumericString value.
Source§

fn encode_teletex_string( &mut self, tag: Tag, constraints: &Constraints, value: &TeletexString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a TeletexString value.
Source§

fn encode_bmp_string( &mut self, tag: Tag, constraints: &Constraints, value: &BmpString, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a BmpString value.
Source§

fn encode_utf8_string( &mut self, tag: Tag, constraints: &Constraints, value: &str, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a Utf8String value.
Source§

fn encode_utc_time( &mut self, tag: Tag, value: &UtcTime, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a UtcTime value.
Source§

fn encode_generalized_time( &mut self, tag: Tag, value: &GeneralizedTime, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a GeneralizedTime value.
Source§

fn encode_date( &mut self, tag: Tag, value: &Date, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a ‘Date’ value.
Source§

fn encode_some<E: Encode>( &mut self, value: &E, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_some_with_tag<E: Encode>( &mut self, tag: Tag, value: &E, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_some_with_tag_and_constraints<E: Encode>( &mut self, tag: Tag, constraints: &Constraints, value: &E, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_none<E: Encode>( &mut self, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the absent value of an optional field.
Source§

fn encode_none_with_tag( &mut self, _: Tag, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the absent value with tag of an optional field.
Source§

fn encode_sequence_of<E: Encode>( &mut self, tag: Tag, values: &[E], constraints: &Constraints, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a SEQUENCE OF value.
Source§

fn encode_set_of<E: Encode + Eq + Hash>( &mut self, tag: Tag, values: &SetOf<E>, constraints: &Constraints, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a SET OF value.
Source§

fn encode_explicit_prefix<V: Encode>( &mut self, tag: Tag, value: &V, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a explicitly tagged value.
Source§

fn encode_sequence<'b, const RC: usize, const EC: usize, C, F>( &'b mut self, tag: Tag, encoder_scope: F, _: Identifier, ) -> Result<Self::Ok, Self::Error>
where C: Constructed<RC, EC>, F: FnOnce(&mut Self::AnyEncoder<'b, 0, 0>) -> Result<(), Self::Error>,

Encode a SEQUENCE value. Read more
Source§

fn encode_set<'b, const RC: usize, const EC: usize, C, F>( &'b mut self, tag: Tag, encoder_scope: F, _: Identifier, ) -> Result<Self::Ok, Self::Error>
where C: Constructed<RC, EC>, F: FnOnce(&mut Self::AnyEncoder<'b, 0, 0>) -> Result<(), Self::Error>,

Encode a SET value. Read more
Source§

fn encode_extension_addition<E: Encode>( &mut self, tag: Tag, constraints: &Constraints, value: E, _: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode a extension addition value.
Source§

fn encode_or_default<E: Encode + Default + PartialEq>( &mut self, value: &E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the value a field or skip if it matches the default..
Source§

fn encode_with_tag_or_default<E: Encode + Default + PartialEq>( &mut self, tag: Tag, value: &E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_default<E: Encode + PartialEq>( &mut self, value: &E, default: impl FnOnce() -> E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_default_with_tag<E: Encode + PartialEq>( &mut self, tag: Tag, value: &E, default: impl FnOnce() -> E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_default_with_explicit_prefix<E: Encode + PartialEq>( &mut self, tag: Tag, value: &E, default: impl FnOnce() -> E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the preset value of an optional field using Explicit Tags
Source§

fn encode_default_with_tag_and_constraints<E: Encode + PartialEq>( &mut self, tag: Tag, constraints: &Constraints, value: &E, default: impl FnOnce() -> E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present value of an optional field.
Source§

fn encode_default_with_constraints<E: Encode + PartialEq>( &mut self, constraints: &Constraints, value: &E, default: impl FnOnce() -> E, identifier: Identifier, ) -> Result<Self::Ok, Self::Error>

Encode the present constrained value of an optional field.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.