use std::fmt; use std::sync::atomic::{AtomicBool, AtomicUsize, 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_atomicusize<'de, D>(d: D) -> Result where D: serde::de::Deserializer<'de>, { let value = d.deserialize_u64(U64Visitor)?; Ok(AtomicUsize::new(value as usize)) } pub fn serialize_atomicusize(x: &AtomicUsize, s: S) -> Result where S: serde::Serializer, { s.serialize_u64(x.load(Ordering::Relaxed) as u64) } 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)) }