use crate::{
format::{Formatter, Record},
Level,
};
use cirious_codex_term::{Color, Style};
pub fn level_color(level: Level) -> Color {
match level {
Level::Error => Color::Red,
Level::Warn => Color::Yellow,
Level::Info => Color::Blue,
Level::Debug => Color::Magenta,
Level::Trace => Color::BrightBlack,
}
}
pub struct StyledTerminalFormatter;
impl Formatter for StyledTerminalFormatter {
fn format(&self, record: &Record) -> String {
let color = level_color(record.level);
let bold_code = Style::Bold.to_str();
let reset_code = Style::Reset.to_str();
let color_code = color.to_fg_str();
let styled_tag = format!("{}{}[{:?}]{}", bold_code, color_code, record.level, reset_code);
format!("{} {}", styled_tag, record.args)
}
}
#[cfg(test)]
mod tests {
use super::*;
use cirious_codex_term::Color;
#[test]
fn test_level_color_mapping() {
assert_eq!(level_color(Level::Error), Color::Red);
assert_eq!(level_color(Level::Info), Color::Blue);
}
#[test]
fn test_styled_terminal_formatter() {
let args = format_args!("Styled message");
let record = Record {
level: Level::Warn,
args,
};
let formatter = StyledTerminalFormatter;
let result = formatter.format(&record);
assert!(result.contains("Styled message"));
assert!(result.contains("Warn"));
}
}