cargo-tally 1.0.22

Cargo subcommand for drawing graphs of the number of dependencies on a crate over time
Documentation
use std::fmt;
use std::io::Write;
use termcolor::{Color, ColorSpec, StandardStream, WriteColor};

pub trait Log {
    fn trace(&mut self) -> LogStream;
    fn warning(&mut self) -> LogStream;
    fn error(&mut self) -> LogStream;
    fn red(&mut self) -> LogStream;
}

impl Log for StandardStream {
    fn trace(&mut self) -> LogStream {
        let mut color = ColorSpec::new();
        color.set_fg(Some(Color::Magenta)).set_dimmed(true);
        let _ = self.set_color(&color);
        LogStream(self)
    }

    fn warning(&mut self) -> LogStream {
        let mut color = ColorSpec::new();
        color.set_fg(Some(Color::Yellow));
        let _ = self.set_color(&color);
        LogStream(self)
    }

    fn error(&mut self) -> LogStream {
        let mut color = ColorSpec::new();
        color.set_fg(Some(Color::Red)).set_bold(true);
        let _ = self.set_color(&color);
        let _ = write!(self, "error:");
        let _ = self.reset();
        let _ = write!(self, " ");
        LogStream(self)
    }

    fn red(&mut self) -> LogStream {
        let mut color = ColorSpec::new();
        color.set_fg(Some(Color::Red));
        let _ = self.set_color(&color);
        LogStream(self)
    }
}

pub struct LogStream<'a>(&'a mut StandardStream);

impl<'a> LogStream<'a> {
    pub fn write_fmt(&mut self, args: fmt::Arguments) {
        let _ = self.0.write_fmt(args);
    }
}

impl<'a> Drop for LogStream<'a> {
    fn drop(&mut self) {
        let _ = self.0.reset();
    }
}