encode 1.0.0

A simple framework for encoding binary data.
Documentation
use core::fmt::Error;
use core::fmt::Formatter;

use crate::BaseEncoder;
use crate::StrEncoder;

impl BaseEncoder for Formatter<'_> {
    type Error = Error;
}

impl StrEncoder for Formatter<'_> {
    #[inline]
    fn put_str(&mut self, string: &str) -> Result<(), Self::Error> {
        self.write_str(string)
    }
}

#[cfg(all(test, feature = "alloc"))]
mod tests {
    use super::*;
    use crate::Encodable;
    use alloc::string::String;
    use core::fmt::Write;

    #[test]
    fn assert_that_formatter_can_be_used_as_an_encoder() {
        struct MyEncodable;

        impl<E> Encodable<E> for MyEncodable
        where
            E: StrEncoder,
        {
            type Error = E::Error;
            fn encode(&self, encoder: &mut E) -> Result<(), Self::Error> {
                "Hello world".encode(encoder)
            }
        }

        impl core::fmt::Display for MyEncodable {
            fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), core::fmt::Error> {
                self.encode(f)
            }
        }
        let mut output = String::new();
        writeln!(&mut output, "{}", MyEncodable).expect("Failed to write to output");

        assert_eq!(output, "Hello world\n");
    }
}