cli-app-template 0.2.3

Starter template for CLI applications
use std::fmt;

use owo_colors::{OwoColorize, Stream::Stdout};

macro_rules! trait_methods {
    ($( $color:ident ),* $(,)?) => {
        $(
            fn $color(&self) -> String;
         )*
    };
}

#[allow(dead_code)]
pub trait Colorize {
    trait_methods!(
        black,
        red,
        green,
        yellow,
        blue,
        magenta,
        cyan,
        white,
        bright_black,
        bright_red,
        bright_green,
        bright_yellow,
        bright_blue,
        bright_magenta,
        bright_cyan,
        bright_white,
    );
}

macro_rules! display_methods {
    ($( $color:ident ),* $(,)?) => {
        $(
            fn $color(&self) -> String {
                self.if_supports_color(Stdout, OwoColorize::$color).to_string()
            }
         )*
    };
}

impl<D: fmt::Display> Colorize for D {
    display_methods!(
        black,
        red,
        green,
        yellow,
        blue,
        magenta,
        cyan,
        white,
        bright_black,
        bright_red,
        bright_green,
        bright_yellow,
        bright_blue,
        bright_magenta,
        bright_cyan,
        bright_white,
    );
}