serenity_voice_model/
util.rs1pub(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<'de> Visitor<'de> 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}