Skip to main content

serenity_voice_model/
util.rs

1pub(crate) mod json_safe_u64 {
2    use core::fmt::{Formatter, Result as FmtResult};
3
4    use serde::de::{Deserializer, Error, Visitor};
5    use serde::ser::Serializer;
6
7    struct U64Visitor;
8
9    impl Visitor<'_> for U64Visitor {
10        type Value = u64;
11
12        fn expecting(&self, formatter: &mut Formatter<'_>) -> FmtResult {
13            formatter.write_str("a u64 represented by a string or number")
14        }
15
16        fn visit_u64<E: Error>(self, value: u64) -> Result<Self::Value, E> {
17            Ok(value)
18        }
19
20        fn visit_str<E: Error>(self, value: &str) -> Result<Self::Value, E> {
21            value.parse::<u64>().map_err(E::custom)
22        }
23    }
24
25    pub fn deserialize<'de, D>(deserializer: D) -> Result<u64, D::Error>
26    where
27        D: Deserializer<'de>,
28    {
29        deserializer.deserialize_any(U64Visitor)
30    }
31
32    pub fn serialize<S>(value: &u64, serializer: S) -> Result<S::Ok, S::Error>
33    where
34        S: Serializer,
35    {
36        serializer.collect_str(value)
37    }
38}