aboutsummaryrefslogtreecommitdiffstats
path: root/src/config/logging.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/logging.rs')
-rw-r--r--src/config/logging.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/config/logging.rs b/src/config/logging.rs
new file mode 100644
index 0000000..c6cfe7f
--- /dev/null
+++ b/src/config/logging.rs
@@ -0,0 +1,68 @@
+use clap::ValueEnum;
+use serde::Deserialize;
+
+#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, ValueEnum, Debug, Default, Deserialize)]
+#[serde(rename_all = "lowercase")]
+pub enum LogLevel {
+ /// The "trace" level.
+ ///
+ /// Designates very low priority, often extremely verbose, information.
+ Trace = 0,
+ /// The "debug" level.
+ ///
+ /// Designates lower priority information.
+ #[default]
+ Debug = 1,
+ /// The "info" level.
+ ///
+ /// Designates useful information.
+ Info = 2,
+ /// The "warn" level.
+ ///
+ /// Designates hazardous situations.
+ Warn = 3,
+ /// The "error" level.
+ ///
+ /// Designates very serious errors.
+ Error = 4,
+}
+
+impl From<LogLevel> for tracing::Level {
+ fn from(value: LogLevel) -> Self {
+ match value {
+ LogLevel::Trace => tracing::Level::TRACE,
+ LogLevel::Debug => tracing::Level::DEBUG,
+ LogLevel::Info => tracing::Level::INFO,
+ LogLevel::Warn => tracing::Level::WARN,
+ LogLevel::Error => tracing::Level::ERROR,
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use crate::config::logging::LogLevel;
+
+ fn check(level: LogLevel, value: &str) {
+ let level = tracing::Level::from(level);
+ assert_eq!(level.to_string().to_lowercase(), value);
+ }
+
+ #[test]
+ fn loglevel() {
+ let level = LogLevel::Trace;
+ check(level, "trace");
+
+ let level = LogLevel::Debug;
+ check(level, "debug");
+
+ let level = LogLevel::Info;
+ check(level, "info");
+
+ let level = LogLevel::Warn;
+ check(level, "warn");
+
+ let level = LogLevel::Error;
+ check(level, "error");
+ }
+}