#[allow(clippy::trivially_copy_pass_by_ref)]
pub(crate) fn is_false(b: &bool) -> bool {
!*b
}
#[allow(clippy::trivially_copy_pass_by_ref)]
pub(crate) fn is_zero(n: &usize) -> bool {
*n == 0
}
pub mod display_from_str {
use std::fmt::Display;
use std::str::FromStr;
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
where
T: Display,
S: Serializer,
{
serializer.collect_str(value)
}
pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
where
T: FromStr,
T::Err: Display,
D: Deserializer<'de>,
{
let raw = String::deserialize(deserializer)?;
raw.parse().map_err(serde::de::Error::custom)
}
}
pub(crate) mod fun_arity_keyed_map {
use std::collections::BTreeMap;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use crate::model::snapshot::FunArity;
pub(crate) fn serialize<V, S>(
map: &BTreeMap<FunArity, V>,
serializer: S,
) -> Result<S::Ok, S::Error>
where
V: Serialize,
S: Serializer,
{
let stringified: BTreeMap<String, &V> =
map.iter().map(|(k, v)| (k.to_string(), v)).collect();
stringified.serialize(serializer)
}
pub(crate) fn deserialize<'de, V, D>(deserializer: D) -> Result<BTreeMap<FunArity, V>, D::Error>
where
V: Deserialize<'de>,
D: Deserializer<'de>,
{
let stringified: BTreeMap<String, V> = BTreeMap::deserialize(deserializer)?;
stringified
.into_iter()
.map(|(k, v)| {
k.parse::<FunArity>()
.map(|fa| (fa, v))
.map_err(serde::de::Error::custom)
})
.collect()
}
}