spectrum 0.0.0

A library for building structured, colorful output. Under heavy development, and doesn't work yet
Documentation
use derive_new::new;
use std::{fmt, io};

#[derive(Debug, Default, new)]
pub struct Buf {
    #[new(default)]
    vec: Vec<u8>,
}

impl Buf {
    pub fn into_string(self) -> String {
        String::from_utf8_lossy(&self.vec).to_string()
    }

    pub fn collect_string(
        callback: impl FnOnce(&mut dyn io::Write) -> fmt::Result,
    ) -> Result<String, fmt::Error> {
        let mut buf = Buf::default();
        callback(&mut buf)?;

        Ok(buf.into_string())
    }
}

impl io::Write for Buf {
    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
        self.vec.extend(buf);
        Ok(buf.len())
    }

    fn flush(&mut self) -> std::io::Result<()> {
        Ok(())
    }
}

impl fmt::Write for Buf {
    fn write_str(&mut self, s: &str) -> fmt::Result {
        self.vec.extend(s.as_bytes());
        Ok(())
    }
}