encode 1.0.0

A simple framework for encoding binary data.
Documentation
use bytes::Bytes;
use bytes::BytesMut;

use crate::ByteEncoder;
use crate::Encodable;

impl<E: ByteEncoder> Encodable<E> for Bytes {
    type Error = E::Error;

    #[inline]
    fn encode(&self, encoder: &mut E) -> Result<(), Self::Error> {
        let slice: &[u8] = &*self;
        slice.encode(encoder)
    }
}

impl<E: ByteEncoder> Encodable<E> for BytesMut {
    type Error = E::Error;

    #[inline]
    fn encode(&self, encoder: &mut E) -> Result<(), Self::Error> {
        let slice: &[u8] = &*self;
        slice.encode(encoder)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::Encodable;

    const BUF_SIZE: usize = 64;

    #[test]
    fn assert_that_bytes_can_be_encoded() {
        let expected = b"\x01\x02\x03";
        let encodable = Bytes::from_static(&[1, 2, 3]);

        let mut buf = [0u8; BUF_SIZE];
        let mut encoder = &mut buf as &mut [u8];
        encodable.encode(&mut encoder).unwrap();
        let written = BUF_SIZE - encoder.len();
        let result = &buf[..written];

        assert_eq!(expected, result);
    }

    #[test]
    fn assert_that_bytes_mut_can_be_encoded() {
        let expected = b"\x01\x02\x03";
        let mut encodable = BytesMut::new();
        encodable.extend_from_slice(&[1, 2, 3]);

        let mut buf = [0u8; BUF_SIZE];
        let mut encoder = &mut buf as &mut [u8];
        encodable.encode(&mut encoder).unwrap();
        let written = BUF_SIZE - encoder.len();
        let result = &buf[..written];

        assert_eq!(expected, result);
    }
}