use serde::{Deserialize, Serialize};
use super::builtin_interfaces::Time;
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[repr(u8)]
#[serde(from = "u8", into = "u8")]
pub enum LogLevel {
Unknown = 0,
Debug = 10,
Info = 20,
Warn = 30,
Error = 40,
Fatal = 50,
}
impl From<u8> for LogLevel {
fn from(value: u8) -> Self {
match value {
10 => Self::Debug,
20 => Self::Info,
30 => Self::Warn,
40 => Self::Error,
50 => Self::Fatal,
_ => Self::Unknown,
}
}
}
impl From<LogLevel> for u8 {
fn from(val: LogLevel) -> Self {
val as Self
}
}
impl std::fmt::Display for LogLevel {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Self::Debug => "DEBUG",
Self::Info => "INFO",
Self::Warn => "WARN",
Self::Error => "ERROR",
Self::Fatal => "CRITICAL",
Self::Unknown => "TRACE",
}
)
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Log {
pub stamp: Time,
pub level: LogLevel,
pub name: String,
pub msg: String,
pub file: String,
pub function: String,
pub line: u32,
}