diagnostics_log_types_serde/
serde_ext.rs
1use crate::Severity;
5use serde::de::Deserializer;
6use serde::{Deserialize, Serializer};
7use std::str::FromStr;
8
9pub mod severity {
10 use super::*;
11
12 pub fn serialize<S>(severity: &Severity, serializer: S) -> Result<S::Ok, S::Error>
13 where
14 S: Serializer,
15 {
16 serializer.serialize_str(severity.as_str())
17 }
18
19 pub fn deserialize<'de, D>(deserializer: D) -> Result<Severity, D::Error>
20 where
21 D: Deserializer<'de>,
22 {
23 let s = String::deserialize(deserializer)?;
24 Severity::from_str(&s).map_err(serde::de::Error::custom)
25 }
26}
27
28pub mod optional_severity {
29 use super::*;
30
31 pub fn serialize<S>(severity: &Option<Severity>, serializer: S) -> Result<S::Ok, S::Error>
32 where
33 S: Serializer,
34 {
35 if let Some(s) = severity.as_ref() {
36 return super::severity::serialize(s, serializer);
37 }
38 serializer.serialize_none()
39 }
40
41 pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Severity>, D::Error>
42 where
43 D: Deserializer<'de>,
44 {
45 let s: Option<String> = Option::deserialize(deserializer)?;
46 match s {
47 None => Ok(None),
48 Some(s) => {
49 let severity = Severity::from_str(&s).map_err(serde::de::Error::custom)?;
50 Ok(Some(severity))
51 }
52 }
53 }
54}