Skip to main content

Encoder

Trait Encoder 

Source
pub trait Encoder<E, T: ?Sized> {
    // Required methods
    fn encode<B: BufMut + ?Sized>(
        tag: u32,
        value: &T,
        buf: &mut B,
        tw: &mut TagWriter,
    );
    fn prepend_encode<B: ReverseBuf + ?Sized>(
        tag: u32,
        value: &T,
        buf: &mut B,
        tw: &mut TagRevWriter,
    );
    fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize;
}
Expand description

The core trait for encoding bilrost data.

Required Methods§

Source

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Encodes the a field with the given tag and value.

Source

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Prepends the encoding of the field with the given tag and value.

Source

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Returns the encoded length of the field, including the key.

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 Encoder<PlainBytes, Vec<Vec<u8>>> for ()

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Vec<Vec<u8>>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Vec<Vec<u8>>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &Vec<Vec<u8>>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<'a> Encoder<PlainBytes, Vec<&'a [u8]>> for ()
where (): Encoder<Unpacked<PlainBytes>, Vec<&'a [u8]>>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Vec<&'a [u8]>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Vec<&'a [u8]>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &Vec<&'a [u8]>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<'a> Encoder<PlainBytes, Vec<Cow<'a, [u8]>>> for ()
where (): Encoder<Unpacked<PlainBytes>, Vec<Cow<'a, [u8]>>>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Vec<Cow<'a, [u8]>>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Vec<Cow<'a, [u8]>>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &Vec<Cow<'a, [u8]>>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<'a, T> Encoder<GeneralGeneric<PREFER_UNPACKED>, Cow<'a, [T]>> for ()
where (): Encoder<Unpacked, Cow<'a, [T]>>, T: Clone,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Cow<'a, [T]>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Cow<'a, [T]>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &Cow<'a, [T]>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<'a, const N: usize> Encoder<PlainBytes, Vec<&'a [u8; N]>> for ()
where (): Encoder<Unpacked<PlainBytes>, Vec<&'a [u8; N]>>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Vec<&'a [u8; N]>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Vec<&'a [u8; N]>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &Vec<&'a [u8; N]>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<C, T, E> Encoder<Packed<E>, C> for ()
where C: Collection<Item = T>, (): EmptyState<(), C> + ForOverwrite<E, T> + ValueEncoder<E, T> + ValueEncoder<Packed<E>, C>,

ValueEncoder for packed repeated encodings lets this value type nest.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &C, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &C, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &C, tm: &mut impl TagMeasurer) -> usize

Source§

impl<C, T, E> Encoder<Unpacked<E>, C> for ()
where C: Collection<Item = T>, (): EmptyState<(), C> + ForOverwrite<E, T> + ValueEncoder<E, T>,

Unpacked encodes vecs as repeated fields and in relaxed decoding mode will accept both packed and un-packed encodings.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &C, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &C, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &C, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T> Encoder<Fixed, T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T> Encoder<GeneralGeneric<PREFER_UNPACKED>, BTreeSet<T>> for ()

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &BTreeSet<T>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &BTreeSet<T>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &BTreeSet<T>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<T> Encoder<GeneralGeneric<PREFER_UNPACKED>, Vec<T>> for ()
where (): Encoder<Unpacked, Vec<T>>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Vec<T>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Vec<T>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &Vec<T>, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T> Encoder<PlainBytes, T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T> Encoder<Varint, T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae> Encoder<(Ae,), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be> Encoder<(Ae, Be), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce> Encoder<(Ae, Be, Ce), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De> Encoder<(Ae, Be, Ce, De), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee> Encoder<(Ae, Be, Ce, De, Ee), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe> Encoder<(Ae, Be, Ce, De, Ee, Fe), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe, Ge> Encoder<(Ae, Be, Ce, De, Ee, Fe, Ge), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe, Ge, He> Encoder<(Ae, Be, Ce, De, Ee, Fe, Ge, He), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie> Encoder<(Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie, Je> Encoder<(Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie, Je), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie, Je, Ke> Encoder<(Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie, Je, Ke), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie, Je, Ke, Le> Encoder<(Ae, Be, Ce, De, Ee, Fe, Ge, He, Ie, Je, Ke, Le), T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, E> Encoder<Packed<E>, [T]> for ()
where (): ValueEncoder<E, T>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &[T], buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &[T], buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &[T], tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, E> Encoder<Unpacked<E>, [T]> for ()
where (): ValueEncoder<E, T>,

Unpacked encodes slices the same way as arrays. This implementation always uses the natural emptiness and item iteration of the slice, since implementing EmptyState for the unsized [T] isn’t practical.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &[T], buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &[T], buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &[T], tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, E> Encoder<E, Option<T>> for ()
where (): ValueEncoder<E, T> + ForOverwrite<E, T>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Option<T>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Option<T>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &Option<T>, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, KE, VE> Encoder<Map<KE, VE>, T> for ()
where (): EmptyState<Map<KE, VE>, T> + ValueEncoder<Map<KE, VE>, T> + EmptyState<(), T>, T: Mapping,

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, S> Encoder<GeneralGeneric<PREFER_UNPACKED>, HashSet<T, S>> for ()

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &HashSet<T, S>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &HashSet<T, S>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &HashSet<T, S>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<T, const N: usize, E> Encoder<Packed<E>, [T; N]> for ()
where (): ValueEncoder<E, T> + EmptyState<E, [T; N]>,

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &[T; N], buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &[T; N], buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &[T; N], tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, const N: usize, E> Encoder<Unpacked<E>, Option<[T; N]>> for ()
where (): ValueEncoder<E, T> + ForOverwrite<E, [T; N]>,

Unpacked encodes arrays as repeated fields if any of the values are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &Option<[T; N]>, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &Option<[T; N]>, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len( tag: u32, value: &Option<[T; N]>, tm: &mut impl TagMeasurer, ) -> usize

Source§

impl<T, const N: usize, E> Encoder<Unpacked<E>, [T; N]> for ()
where (): ValueEncoder<E, T> + EmptyState<E, [T; N]>,

Unpacked encodes arrays as repeated fields if any of the values are non-empty, and in relaxed decoding mode will accept both packed and un-packed encodings.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &[T; N], buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &[T; N], buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &[T; N], tm: &mut impl TagMeasurer) -> usize

Source§

impl<T, const P: u8> Encoder<GeneralGeneric<P>, T> for ()

Encodes plain values only when they are non-empty.

Source§

fn encode<B: BufMut + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagWriter, )

Source§

fn prepend_encode<B: ReverseBuf + ?Sized>( tag: u32, value: &T, buf: &mut B, tw: &mut TagRevWriter, )

Source§

fn encoded_len(tag: u32, value: &T, tm: &mut impl TagMeasurer) -> usize

Implementors§