instruct 0.1.0

A language to write general purpose 'makefile like' tasks which are powerful and reuseable
Documentation
use std::str::FromStr;

use fern::{
    self,
    colors::{Color, ColoredLevelConfig},
};
use log::{Level, LevelFilter};

pub fn setup_logger(log_level: &Option<String>) -> anyhow::Result<()> {
    let level = match log_level {
        Some(val) => LevelFilter::from_str(val).unwrap(),
        None => LevelFilter::Info,
    };

    let colors = ColoredLevelConfig::new()
        .error(Color::BrightRed)
        .warn(Color::Magenta)
        .info(Color::Blue)
        .debug(Color::BrightBlack)
        .trace(Color::BrightCyan);
    fern::Dispatch::new()
        .format(move |out, message, record| {
            if record.level() == Level::Trace {
                out.finish(format_args!(
                    "\x1B[{}m[{}] {}\x1B[{}m",
                    colors.get_color(&record.level()).to_fg_str(),
                    record.target(),
                    message,
                    Color::White.to_fg_str()
                ))
            } else {
                out.finish(format_args!(
                    "\x1B[{}m{}\x1B[{}m",
                    colors.get_color(&record.level()).to_fg_str(),
                    message,
                    Color::White.to_fg_str()
                ))
            }
        })
        .level(level)
        .chain(std::io::stdout())
        .apply()?;

    Ok(())
}