Encode

Trait Encode 

Source
pub trait Encode {
    type Item;

    // Required methods
    fn encode(&mut self, buf: &mut [u8], eos: Eos) -> Result<usize>;
    fn start_encoding(&mut self, item: Self::Item) -> Result<()>;
    fn requiring_bytes(&self) -> ByteCount;

    // Provided method
    fn is_idle(&self) -> bool { ... }
}
Expand description

This trait allows for encoding items into a byte sequence incrementally.

Required Associated Types§

Source

type Item

The type of items to be encoded.

Required Methods§

Source

fn encode(&mut self, buf: &mut [u8], eos: Eos) -> Result<usize>

Encodes the items in the encoder and writes the encoded bytes to the given buffer.

It returns the number of bytes written to the given buffer.

If the encoded bytes are larger than the length of buf, the encoder must consume as many bytes in the buffer as possible.

The completion of the encoding can be detected by using is_idle method.

If self.is_idle() returns false but the number of written bytes in the last encode invocation is smaller than the length of buf, it means the encoder has been suspended its work in any reasons. In that case the encoder may require some instructions from clients to resume the work, but its concrete method is beyond the scope of this trait.

The encoded bytes that could not be written to the given buffer is held by the encoder until the next invocation of the encode method.

§Errors

Encoders return the following kinds of errors as necessary:

  • ErrorKind::InvalidInput:
    • An item that the encoder could not encode was passed
  • ErrorKind::UnexpectedEos:
    • The output byte stream has reached the end in the middle of an encoding process
  • ErrorKind::InconsistentState:
    • The state of the encoder bocame inconsistent
    • This means the implementation contains a bug
  • ErrorKind::Other:
    • Other errors has occurred
Source

fn start_encoding(&mut self, item: Self::Item) -> Result<()>

Tries to start encoding the given item.

If the encoder has no items to be encoded and the passed item is valid, it must accept the item.

§Errors
  • ErrorKind::EncoderFull:
    • The encoder currently cannot accept any more items
  • ErrorKind::InvalidInput:
    • An invalid item was passed
  • ErrorKind::InconsistentState:
    • The state of the encoder bocame inconsistent
    • This means the implementation contains a bug
  • ErrorKind::Other:
    • Other errors has occurred
Source

fn requiring_bytes(&self) -> ByteCount

Returns the number of bytes required to encode all the items in the encoder.

If there are no items to be encoded, the encoder must return ByteCount::Finite(0).

Provided Methods§

Source

fn is_idle(&self) -> bool

Returns true if there are no items to be encoded in the encoder, otherwise false.

The default implementation returns the result of self.requiring_bytes() == ByteCount::Finite(0).

Implementations on Foreign Types§

Source§

impl<E: ?Sized + Encode> Encode for &mut E

Source§

type Item = <E as Encode>::Item

Source§

fn encode(&mut self, buf: &mut [u8], eos: Eos) -> Result<usize>

Source§

fn start_encoding(&mut self, item: Self::Item) -> Result<()>

Source§

fn requiring_bytes(&self) -> ByteCount

Source§

fn is_idle(&self) -> bool

Source§

impl<E: ?Sized + Encode> Encode for Box<E>

Source§

type Item = <E as Encode>::Item

Source§

fn encode(&mut self, buf: &mut [u8], eos: Eos) -> Result<usize>

Source§

fn start_encoding(&mut self, item: Self::Item) -> Result<()>

Source§

fn requiring_bytes(&self) -> ByteCount

Source§

fn is_idle(&self) -> bool

Implementors§

Source§

impl Encode for F32beEncoder

Source§

impl Encode for F32leEncoder

Source§

impl Encode for F64beEncoder

Source§

impl Encode for F64leEncoder

Source§

impl Encode for I8Encoder

Source§

impl Encode for I16beEncoder

Source§

impl Encode for I16leEncoder

Source§

impl Encode for I32beEncoder

Source§

impl Encode for I32leEncoder

Source§

impl Encode for I64beEncoder

Source§

impl Encode for I64leEncoder

Source§

impl Encode for U8Encoder

Source§

impl Encode for U16beEncoder

Source§

impl Encode for U16leEncoder

Source§

impl Encode for U24beEncoder

Source§

impl Encode for U24leEncoder

Source§

impl Encode for U32beEncoder

Source§

impl Encode for U32leEncoder

Source§

impl Encode for U40beEncoder

Source§

impl Encode for U40leEncoder

Source§

impl Encode for U48beEncoder

Source§

impl Encode for U48leEncoder

Source§

impl Encode for U56beEncoder

Source§

impl Encode for U56leEncoder

Source§

impl Encode for U64beEncoder

Source§

impl Encode for U64leEncoder

Source§

impl Encode for NullEncoder

Source§

impl Encode for PaddingEncoder

Source§

impl<B: AsRef<[u8]>> Encode for BytesEncoder<B>

Source§

type Item = B

Source§

impl<C, E, F> Encode for MapErr<C, E, F>
where C: Encode, F: Fn(Error) -> E, Error: From<E>,

Source§

type Item = <C as Encode>::Item

Source§

impl<C, T, E, F> Encode for TryMapFrom<C, T, E, F>
where C: Encode, F: Fn(T) -> Result<C::Item, E>, Error: From<E>,

Source§

type Item = T

Source§

impl<E0, E1> Encode for TupleEncoder<(E0, E1)>
where E0: Encode, E1: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item)

Source§

impl<E0, E1, E2> Encode for TupleEncoder<(E0, E1, E2)>
where E0: Encode, E1: Encode, E2: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item, <E2 as Encode>::Item)

Source§

impl<E0, E1, E2, E3> Encode for TupleEncoder<(E0, E1, E2, E3)>
where E0: Encode, E1: Encode, E2: Encode, E3: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item, <E2 as Encode>::Item, <E3 as Encode>::Item)

Source§

impl<E0, E1, E2, E3, E4> Encode for TupleEncoder<(E0, E1, E2, E3, E4)>
where E0: Encode, E1: Encode, E2: Encode, E3: Encode, E4: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item, <E2 as Encode>::Item, <E3 as Encode>::Item, <E4 as Encode>::Item)

Source§

impl<E0, E1, E2, E3, E4, E5> Encode for TupleEncoder<(E0, E1, E2, E3, E4, E5)>
where E0: Encode, E1: Encode, E2: Encode, E3: Encode, E4: Encode, E5: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item, <E2 as Encode>::Item, <E3 as Encode>::Item, <E4 as Encode>::Item, <E5 as Encode>::Item)

Source§

impl<E0, E1, E2, E3, E4, E5, E6> Encode for TupleEncoder<(E0, E1, E2, E3, E4, E5, E6)>
where E0: Encode, E1: Encode, E2: Encode, E3: Encode, E4: Encode, E5: Encode, E6: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item, <E2 as Encode>::Item, <E3 as Encode>::Item, <E4 as Encode>::Item, <E5 as Encode>::Item, <E6 as Encode>::Item)

Source§

impl<E0, E1, E2, E3, E4, E5, E6, E7> Encode for TupleEncoder<(E0, E1, E2, E3, E4, E5, E6, E7)>
where E0: Encode, E1: Encode, E2: Encode, E3: Encode, E4: Encode, E5: Encode, E6: Encode, E7: Encode,

Source§

type Item = (<E0 as Encode>::Item, <E1 as Encode>::Item, <E2 as Encode>::Item, <E3 as Encode>::Item, <E4 as Encode>::Item, <E5 as Encode>::Item, <E6 as Encode>::Item, <E7 as Encode>::Item)

Source§

impl<E, I> Encode for Repeat<E, I>
where E: Encode, I: Iterator<Item = E::Item>,

Source§

type Item = I

Source§

impl<E, T, F> Encode for MapFrom<E, T, F>
where E: Encode, F: Fn(T) -> E::Item,

Source§

type Item = T

Source§

impl<E: MonolithicEncode> Encode for MonolithicEncoder<E>

Source§

impl<E: Encode> Encode for Last<E>

Source§

impl<E: Encode> Encode for Length<E>

Source§

type Item = <E as Encode>::Item

Source§

impl<E: Encode> Encode for MaxBytes<E>

Source§

type Item = <E as Encode>::Item

Source§

impl<E: Encode> Encode for Optional<E>

Source§

type Item = Option<<E as Encode>::Item>

Source§

impl<E: Encode> Encode for PreEncode<E>

Source§

type Item = <E as Encode>::Item

Source§

impl<E: Encode> Encode for Slice<E>

Source§

type Item = <E as Encode>::Item

Source§

impl<S: AsRef<str>> Encode for Utf8Encoder<S>

Source§

type Item = S

Source§

impl<T> Encode for BincodeEncoder<T>
where T: Serialize,

Source§

type Item = T

Source§

impl<T> Encode for JsonEncoder<T>
where T: Serialize,

Source§

type Item = T