use serde::{Deserialize, Serialize};
use serde_variant::to_variant_name;
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct Logger {
pub enable: bool,
pub channel: String,
#[serde(default)]
pub pretty_backtrace: bool,
pub level: LogLevel,
pub format: Format,
pub override_filter: Option<String>,
#[serde(default)]
pub display_ansi: bool,
#[serde(default)]
pub display_file: bool,
#[serde(default)]
pub display_line_number: bool,
#[serde(default)]
pub display_thread_ids: bool,
#[serde(default)]
pub display_thread_names: bool,
#[serde(default)]
pub display_target: bool,
pub file_path: String,
pub file_prefix: String,
}
#[derive(Debug, Default, Clone, Deserialize, Serialize)]
pub enum LogLevel {
#[serde(rename = "off")]
Off,
#[serde(rename = "trace")]
Trace,
#[serde(rename = "debug")]
Debug,
#[serde(rename = "info")]
#[default]
Info,
#[serde(rename = "warn")]
Warn,
#[serde(rename = "error")]
Error,
}
impl std::fmt::Display for LogLevel {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
to_variant_name(self).expect("only enum supported").fmt(f)
}
}
#[derive(Debug, Default, Clone, Deserialize, Serialize)]
pub enum Format {
#[serde(rename = "compact")]
#[default]
Compact,
#[serde(rename = "pretty")]
Pretty,
#[serde(rename = "json")]
Json,
}