summaryrefslogtreecommitdiffstats
path: root/src/logging/level.rs
blob: 38a0f7fcf50b988e6bf739eb5b5f6b7ab52de004 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use serde::{Deserialize, Deserializer, Serialize, Serializer};
pub use tracing::Level;

pub fn serialize<S>(value: &Option<Level>, serializer: S) -> Result<S::Ok, S::Error>
where
    S: Serializer,
{
    value
        .map(|l| l.to_string().to_lowercase())
        .serialize(serializer)
}

pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Level>, D::Error>
where
    D: Deserializer<'de>,
{
    let Some(s) = Option::<String>::deserialize(deserializer)? else {
    return Ok(None)
};
    s.parse().map_err(serde::de::Error::custom).map(Some)
}