aboutsummaryrefslogtreecommitdiffstats
path: root/src/config/logging.rs
blob: c6cfe7f300019f73b7045d17488069dd7d7261da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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");
    }
}