prettylogger/
filtering.rs

1use std::fmt;
2use serde::{Serialize, Deserialize};
3
4#[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Hash, Debug, Default,
5    Serialize, Deserialize)]
6/// Defines logger verbosity levels.
7pub enum Verbosity {
8    /// Don't filter any logs.
9    All = 0,
10    #[default]
11    /// Just filter debug logs.
12    Standard = 1,
13    /// Only let warnings and errors to be displayed.
14    Quiet = 2,
15    /// I'm not gonna explain this one
16    ErrorsOnly = 3,
17}
18
19impl fmt::Display for Verbosity {
20    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
21        let level_str = match *self {
22            Verbosity::All => "All",
23            Verbosity::Standard => "Standard",
24            Verbosity::Quiet => "Quiet",
25            Verbosity::ErrorsOnly => "ErrorsOnly",
26        };
27        write!(f, "{}", level_str)
28    }
29}
30
31impl TryFrom<i32> for Verbosity {
32    type Error = &'static str;
33    fn try_from(value: i32) -> Result<Self, Self::Error> {
34        match value {
35            0 => Ok(Verbosity::All),
36            1 => Ok(Verbosity::Standard),
37            2 => Ok(Verbosity::Quiet),
38            3 => Ok(Verbosity::ErrorsOnly),
39            _ => Err("Invalid value! Please provide a value in range 0-9."),
40        }
41    }
42}
43
44impl AsRef<str> for Verbosity {
45    fn as_ref(&self) -> &str {
46        match self {
47            Verbosity::All => "All",
48            Verbosity::Standard => "Standard",
49            Verbosity::Quiet => "Quiet",
50            Verbosity::ErrorsOnly => "ErrorsOnly",
51        }
52    }
53}