rglw_log 0.0.4

Root project for all the utilities that rustyglware offers to the community
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
pub enum LogLevel {
    /// A level lower than all log levels.
    Off,
    /// Corresponds to the `Error` log level.
    Error,
    /// Corresponds to the `Warn` log level.
    Warn,
    /// Corresponds to the `Info` log level.
    Info,
    /// Corresponds to the `Debug` log level.
    Debug,
    /// Corresponds to the `Trace` log level.
    Trace,
}

impl LogLevel {
    pub fn to_level_filter(self) -> log::LevelFilter {
        match self {
            LogLevel::Debug => log::LevelFilter::Debug,
            LogLevel::Info => log::LevelFilter::Info,
            LogLevel::Error => log::LevelFilter::Error,
            LogLevel::Trace => log::LevelFilter::Trace,
            LogLevel::Warn => log::LevelFilter::Warn,
            LogLevel::Off => log::LevelFilter::Off,
        }
    }
}

#[macro_export(local_inner_macros)]
macro_rules! colored_log {
    ($level: expr, $color: expr, $message: expr, $($parameters: tt)*) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", $color, std::format!($message, $($parameters)*));
        log::log!($level, "{}", log_message);
    };
    ($level: expr, $color: expr, $message: expr) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", $color, $message);
        log::log!($level, "{}", log_message);
    };
}

#[macro_export(local_inner_macros)]
macro_rules! info {
    ($message: expr, $($parameters: tt)*) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 34, std::format!($message, $($parameters)*));
        log::log!(log::Level::Info, "{}", log_message);
    };
    ($message: expr) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 34, $message);
        log::log!(log::Level::Info, "{}", log_message);
    };
}

#[macro_export(local_inner_macros)]
macro_rules! warn {
    ($message: expr, $($parameters: tt)*) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 33, std::format!($message, $($parameters)*));
        log::log!(log::Level::Warn, "{}", log_message);
    };
    ($message: expr) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 33, $message);
        log::log!(log::Level::Warn, "{}", log_message);
    };
}

#[macro_export(local_inner_macros)]
macro_rules! error {
    ($message: expr, $($parameters: tt)*) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 31, std::format!($message, $($parameters)*));
        log::log!(log::Level::Error, "{}", log_message);
    };
    ($message: expr) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 31, $message);
        log::log!(log::Level::Error, "{}", log_message);
    };
}

#[macro_export(local_inner_macros)]
macro_rules! debug {
    ($message: expr, $($parameters: tt)*) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 32, std::format!($message, $($parameters)*));
        log::log!(log::Level::Debug, "{}", log_message);
    };
    ($message: expr) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 32, $message);
        log::log!(log::Level::Debug, "{}", log_message);
    };
}

#[macro_export(local_inner_macros)]
macro_rules! trace {
    ($message: expr, $($parameters: tt)*) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 37, std::format!($message, $($parameters)*));
        log::log!(log::Level::Trace, "{}", log_message);
    };
    ($message: expr) => {
        let log_message = std::format!("\x1b[{};1m{}\x1b[0m", 37, $message);
        log::log!(log::Level::Trace, "{}", log_message);
    };
}

#[cfg(test)]
mod log_tests {
    #[test]
    pub fn log_info() {
        info!("Hello i'm an info log");
    }

    #[test]
    pub fn log_warning() {
        warn!("Hello i'm an warning log");
    }

    #[test]
    pub fn trace_trace() {
        trace!("Hello i'm an trace log");
    }

    #[test]
    pub fn log_error() {
        error!("Hello i'm an error log");
    }

    #[test]
    pub fn log_debug() {
        debug!("Hello i'm an debug log");
    }
}