1use chrono::Local;
2use std::fmt::Display;
3
4#[derive(Debug, Clone, Copy)]
5pub enum LogLevel {
6 Debug,
7 Info,
8 Warning,
9 Error,
10}
11
12impl Display for LogLevel {
13 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14 match self {
15 LogLevel::Debug => write!(f, "debug"),
16 LogLevel::Info => write!(f, "info"),
17 LogLevel::Warning => write!(f, "warning"),
18 LogLevel::Error => write!(f, "error"),
19 }
20 }
21}
22
23pub fn log(level: LogLevel, message: &str) {
25 let timestamp = Local::now().format("%Y-%m-%d %H:%M:%S%.3f");
26 eprintln!("[{}] [{}] {}", timestamp, level, message);
27}
28
29pub fn debug(message: &str) {
31 log(LogLevel::Debug, message);
32}
33
34pub fn info(message: &str) {
36 log(LogLevel::Info, message);
37}
38
39pub fn warn(message: &str) {
41 log(LogLevel::Warning, message);
42}
43
44pub fn error(message: &str) {
46 log(LogLevel::Error, message);
47}