support_kit/logs/
log_level_config.rs

1use serde::{Deserialize, Serialize};
2
3use super::LogLevel;
4
5#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)]
6#[serde(untagged)]
7pub enum LogLevelConfig {
8    #[default]
9    Undefined,
10    Simple(LogLevel),
11    Complex {
12        min: LogLevel,
13        max: LogLevel,
14    },
15}
16
17impl LogLevelConfig {
18    /// The range of levels that should be enabled.
19    pub fn range(&self) -> std::ops::Range<LogLevel> {
20        match self {
21            Self::Simple(level) => *level..*level,
22            Self::Complex { min, max } => *min..*max,
23            Self::Undefined => LogLevel::default()..LogLevel::default(),
24        }
25    }
26
27    /// If a level is lower than the minimum level, it should be enabled.
28    pub fn min_level(&self) -> LogLevel {
29        match self {
30            Self::Simple(level) => *level,
31            Self::Complex { min, .. } => *min,
32            Self::Undefined => LogLevel::default(),
33        }
34    }
35
36    /// If a level is lower than the maximum level, it should be disabled.
37    pub fn max_level(&self) -> LogLevel {
38        match self {
39            Self::Simple(level) => *level,
40            Self::Complex { max, .. } => *max,
41            Self::Undefined => LogLevel::default(),
42        }
43    }
44}
45
46impl From<LogLevel> for LogLevelConfig {
47    fn from(level: LogLevel) -> Self {
48        Self::Simple(level)
49    }
50}
51
52impl From<(LogLevel, LogLevel)> for LogLevelConfig {
53    fn from(levels: (LogLevel, LogLevel)) -> Self {
54        Self::Complex {
55            min: levels.0,
56            max: levels.1,
57        }
58    }
59}
60
61impl From<std::ops::Range<LogLevel>> for LogLevelConfig {
62    fn from(range: std::ops::Range<LogLevel>) -> Self {
63        Self::Complex {
64            min: range.start,
65            max: range.end,
66        }
67    }
68}