summaryrefslogtreecommitdiffstats
path: root/src/logging/level.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/logging/level.rs')
-rw-r--r--src/logging/level.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/logging/level.rs b/src/logging/level.rs
new file mode 100644
index 0000000..6134c24
--- /dev/null
+++ b/src/logging/level.rs
@@ -0,0 +1,22 @@
+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)
+}
+