use serde::de::Deserializer; use serde::ser::Serializer; use serde::{Deserialize, Serialize}; use std::sync::{Arc, RwLock}; pub fn serialize(val: &Option>>, s: S) -> Result where S: Serializer, T: Serialize, { T::serialize(&*(val.clone().unwrap()).read().unwrap(), s) } pub fn deserialize<'de, D, T>(d: D) -> Result>>, D::Error> where D: Deserializer<'de>, T: Deserialize<'de>, { Ok(Some(Arc::new(RwLock::new(T::deserialize(d)?)))) }