use std::{ fmt, sync::atomic::{AtomicBool, AtomicU64, Ordering}, }; struct U64Visitor; impl<'a> serde::de::Visitor<'a> for U64Visitor { type Value = u64; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str("Expecting u64") } fn visit_u64(self, data: u64) -> std::result::Result where E: serde::de::Error, { Ok(data) } } pub fn deserialize_atomicu64<'de, D>(d: D) -> Result where D: serde::de::Deserializer<'de>, { let value = d.deserialize_u64(U64Visitor)?; Ok(AtomicU64::new(value)) } pub fn serialize_atomicu64(x: &AtomicU64, s: S) -> Result where S: serde::Serializer, { s.serialize_u64(x.load(Ordering::Relaxed)) } struct BoolVisitor; impl<'a> serde::de::Visitor<'a> for BoolVisitor { type Value = bool; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { formatter.write_str("Expecting bool") } fn visit_bool(self, data: bool) -> std::result::Result where E: serde::de::Error, { Ok(data) } } pub fn deserialize_atomicbool<'de, D>(d: D) -> Result where D: serde::de::Deserializer<'de>, { let value = d.deserialize_bool(BoolVisitor)?; Ok(AtomicBool::new(value)) } pub fn serialize_atomicbool(x: &AtomicBool, s: S) -> Result where S: serde::Serializer, { s.serialize_bool(x.load(Ordering::Relaxed)) }