am_api/utils/
hex.rs

1//! Serde hex color deserialization
2
3use serde::{Deserialize, Deserializer, Serializer};
4
5pub(crate) mod option {
6    use super::*;
7    use serde::Serialize;
8
9    pub(crate) fn serialize<S>(color: &Option<u32>, serializer: S) -> Result<S::Ok, S::Error>
10    where
11        S: Serializer,
12    {
13        color.map(|e| format!("{:06x}", e)).serialize(serializer)
14    }
15
16    pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result<Option<u32>, D::Error>
17    where
18        D: Deserializer<'de>,
19    {
20        let s: Option<String> = Deserialize::deserialize(deserializer)?;
21
22        s.map(|e| u32::from_str_radix(&e, 16))
23            .transpose()
24            .map_err(serde::de::Error::custom)
25    }
26}