use crate::{logger::LogMessage, types::LogType};
use chrono::Utc;
use colored::{Color, Colorize};
pub trait Module {
fn print(&mut self, msg: &LogMessage) -> String;
}
pub struct Name;
impl Module for Name {
fn print(&mut self, msg: &LogMessage) -> String {
if msg.options.colors {
format!("[{}]", msg.options.name.color(Color::Blue))
} else {
format!("[{}]", msg.options.name)
}
}
}
pub struct Type;
impl Module for Type {
fn print(&mut self, msg: &LogMessage) -> String {
let s = if msg.options.colors {
match msg.msg_type {
LogType::Error => "ERROR".color(Color::Red),
LogType::Warning => "WARN".color(Color::Yellow),
LogType::Info => "INFO".color(Color::Green),
LogType::Time => "TIME".color(Color::Cyan),
}
.to_string()
} else {
match msg.msg_type {
LogType::Error => "ERROR",
LogType::Warning => "WARN",
LogType::Info => "INFO",
LogType::Time => "TIME",
}
.to_string()
};
format!("[{}]", s)
}
}
pub struct Time;
impl Module for Time {
fn print(&mut self, msg: &LogMessage) -> String {
if msg.options.colors {
format!(
"[{}]",
Utc::now().format("%T").to_string().color(Color::Magenta)
)
} else {
format!("[{}]", Utc::now().format("%T").to_string())
}
}
}