pub(crate) mod string_u64 {
use serde::de::Error as _;
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S: Serializer>(value: &u64, serializer: S) -> Result<S::Ok, S::Error> {
serializer.collect_str(value)
}
pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<u64, D::Error> {
let value = String::deserialize(deserializer)?;
value.parse().map_err(D::Error::custom)
}
}
pub(crate) mod option_string_u64 {
use serde::de::Error as _;
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S: Serializer>(value: &Option<u64>, serializer: S) -> Result<S::Ok, S::Error> {
match value {
Some(value) => serializer.collect_str(value),
None => serializer.serialize_none(),
}
}
pub fn deserialize<'de, D: Deserializer<'de>>(
deserializer: D,
) -> Result<Option<u64>, D::Error> {
let Some(value) = Option::<String>::deserialize(deserializer)? else {
return Ok(None);
};
value.parse().map(Some).map_err(D::Error::custom)
}
}