convey 0.2.0

A Rust create for outputting information and log messages for humans and machines
Documentation
use std::io;
use std::sync::{Arc, RwLock};
use termcolor::{Buffer, ColorSpec, WriteColor};

#[derive(Clone)]
pub(crate) struct TestBuffer(pub(crate) Arc<RwLock<Buffer>>);

impl From<Buffer> for TestBuffer {
    fn from(x: Buffer) -> Self {
        TestBuffer(Arc::new(RwLock::new(x)))
    }
}

impl io::Write for TestBuffer {
    fn write(&mut self, buf: &[u8]) -> Result<usize, io::Error> {
        let target = self.0.clone();
        let mut buffer = target.write().unwrap();
        buffer.write(buf)
    }

    fn flush(&mut self) -> Result<(), io::Error> {
        let target = self.0.clone();
        let mut buffer = target.write().unwrap();
        buffer.flush()
    }
}

impl WriteColor for TestBuffer {
    fn supports_color(&self) -> bool {
        let target = self.0.clone();
        let buffer = target.read().unwrap();
        buffer.supports_color()
    }

    fn set_color(&mut self, spec: &ColorSpec) -> Result<(), io::Error> {
        let target = self.0.clone();
        let mut buffer = target.write().unwrap();
        buffer.set_color(spec)
    }

    fn reset(&mut self) -> Result<(), io::Error> {
        let target = self.0.clone();
        let mut buffer = target.write().unwrap();
        buffer.reset()
    }
}