     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

    use bytes::BytesMut;
    use std::io;

    /// Trait of helper objects to write out messages as bytes, for use with
    /// [`FramedWrite`].
    ///
    /// [`FramedWrite`]: crate::codec::FramedWrite
    pub trait Encoder<Item> {
        /// The type of encoding errors.
        ///
        /// [`FramedWrite`] requires `Encoder`s errors to implement `From<io::Error>`
        /// in the interest letting it return `Error`s directly.
        ///
        /// [`FramedWrite`]: crate::codec::FramedWrite
        type Error: From<io::Error>;

        /// Encodes a frame into the buffer provided.
        ///
        /// This method will encode `item` into the byte buffer provided by `dst`.
        /// The `dst` provided is an internal buffer of the [`FramedWrite`] instance and
        /// will be written out when possible.
        ///
        /// [`FramedWrite`]: crate::codec::FramedWrite
        fn encode(&mut self, item: Item, dst: &mut BytesMut) -> Result<(), Self::Error>;
    }