use std::time::Instant;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ErrorSeverity {
Info,
Warning,
Error,
Security,
}
impl ErrorSeverity {
pub fn display(&self) -> &str {
match self {
ErrorSeverity::Info => "INFO",
ErrorSeverity::Warning => "WARN",
ErrorSeverity::Error => "ERROR",
ErrorSeverity::Security => "SECURITY",
}
}
}
#[derive(Debug, Clone)]
pub struct ErrorEntry {
pub timestamp: Instant,
pub severity: ErrorSeverity,
pub message: String,
pub context: Option<String>,
}
impl ErrorEntry {
pub fn new(severity: ErrorSeverity, message: String) -> Self {
Self {
timestamp: Instant::now(),
severity,
message,
context: None,
}
}
pub fn with_context(severity: ErrorSeverity, message: String, context: String) -> Self {
Self {
timestamp: Instant::now(),
severity,
message,
context: Some(context),
}
}
pub fn display(&self) -> String {
match &self.context {
Some(ctx) => format!("[{}] {} - {}", self.severity.display(), self.message, ctx),
None => format!("[{}] {}", self.severity.display(), self.message),
}
}
}