use crate::types::LogLevel;
pub mod codes {
pub const BOLD: &str = "\x1b[1m";
pub const RESET: &str = "\x1b[0m";
pub const RED: &str = "\x1b[31m";
pub const YELLOW: &str = "\x1b[33m";
pub const CYAN: &str = "\x1b[36m";
pub const MAGENTA: &str = "\x1b[35m";
pub const GRAY: &str = "\x1b[90m";
}
use codes::{CYAN, GRAY, MAGENTA, RED, RESET, YELLOW};
#[inline]
pub fn level_color(level: LogLevel) -> (&'static str, &'static str) {
let start = match level {
LogLevel::Error => RED,
LogLevel::Warn => YELLOW,
LogLevel::Info => CYAN,
LogLevel::Debug => MAGENTA,
LogLevel::Trace => GRAY,
};
(start, RESET)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::types::LogLevel;
#[test]
fn level_color_returns_reset_as_second() {
for level in [
LogLevel::Error,
LogLevel::Warn,
LogLevel::Info,
LogLevel::Debug,
LogLevel::Trace,
] {
let (start, end) = level_color(level);
assert!(!start.is_empty());
assert_eq!(end, super::codes::RESET);
}
}
#[test]
fn level_color_maps_each_level_to_different_code() {
assert_eq!(level_color(LogLevel::Error).0, super::codes::RED);
assert_eq!(level_color(LogLevel::Warn).0, super::codes::YELLOW);
assert_eq!(level_color(LogLevel::Info).0, super::codes::CYAN);
assert_eq!(level_color(LogLevel::Debug).0, super::codes::MAGENTA);
assert_eq!(level_color(LogLevel::Trace).0, super::codes::GRAY);
}
}