use serde::{Deserialize, Deserializer, Serializer};
use crate::mass::convert::{to_float as mass_to_float, to_int as mass_as_int};
pub fn serialize_mass_to_float<S>(value: &i64, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.serialize_f64(mass_to_float(*value))
}
pub fn deserialize_mass_from_int<'de, D>(deserializer: D) -> Result<i64, D::Error>
where
D: Deserializer<'de>,
{
Ok(mass_as_int(f64::deserialize(deserializer)?))
}
pub fn serialize_mass_vec_to_float_vec<S>(value: &[i64], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
serializer.collect_seq(value.iter().map(|v| mass_to_float(*v)))
}
pub fn deserialize_mass_vec_from_int_vec<'de, D>(deserializer: D) -> Result<Vec<i64>, D::Error>
where
D: Deserializer<'de>,
{
Ok(Vec::<f64>::deserialize(deserializer)?
.into_iter()
.map(mass_as_int)
.collect())
}