use serde::{Deserializer, Deserialize, Serializer, de::Unexpected}; pub(crate) fn serialize(u: &Option, serializer: S) -> Result where S: Serializer, { match *u { Some(u) => serializer.serialize_str(&u.to_string()), None => serializer.serialize_none(), } } pub(crate) fn deserialize<'de, D>(deserializer: D) -> Result, D::Error> where D: Deserializer<'de> { let s: Option = Deserialize::deserialize(deserializer)?; let s = match s { Some(s) => s, None => return Ok(None), }; s .parse() .map_err(|_| serde::de::Error::invalid_value(Unexpected::Str(&s), &"string containing a u64")) .map(Some) }