clang_log 0.1.0

Another log implementation
Documentation
#![forbid(missing_docs)]

//! Implementation of `log`, aiming to emulate `clang`

use colored::Colorize;
use log::{Level, Log, Metadata, Record, SetLoggerError};

/// Logger struct.

pub struct Logger {
    /// Minimum level this logger will print.
    pub min_level: Level,
    /// Name of the program, set to "clang" in clang.
    pub prog_name: String,
}

impl Logger {
    /// Initilize logger with fields
    
    pub fn init(min_level: Level, prog_name: String) -> Result<(), SetLoggerError> {
        log::set_max_level(min_level.to_level_filter());

        let logger = Logger { min_level, prog_name };
        log::set_boxed_logger(Box::new(logger))
    }
}

impl Log for Logger {
    fn enabled(&self, metadata: &Metadata) -> bool {
        metadata.level() <= self.min_level
    }

    fn log(&self, record: &Record) {
        if !self.enabled(record.metadata()) {
            return;
        }

        println!("{}: {}: {}", self.prog_name, match record.level() {
            Level::Error => {
                "error".red().bold()
            }
            Level::Warn => {
                "warning".bright_purple().bold()
            }
            Level::Info => {
                "info".bright_black().bold()
                //"note".black().bold() // Clang Behavior
            }
            Level::Debug => {
                "debug".yellow().bold() // Clang doesn't have debug logs
            }
            Level::Trace => {
                "trace".white().bold() // Clang doesn't have trace logs
            }
        }, record.args().as_str().unwrap().bold());
    }

    fn flush(&self) {}
}