use serde::{Deserialize, Deserializer, Serialize, Serializer, de::DeserializeOwned, ser::SerializeSeq};
pub fn serialize<'a, S, I, K, V>(v: I, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
I: IntoIterator<Item = (&'a K, &'a V)> + Serialize,
I::IntoIter: ExactSizeIterator,
K: Serialize + 'a,
V: Serialize + 'a,
{
if !s.is_human_readable() {
return v.serialize(s);
}
let iter = v.into_iter();
let mut seq = s.serialize_seq(Some(iter.len()))?;
for (k, v) in iter {
seq.serialize_element(&(k, v))?;
}
seq.end()
}
pub fn deserialize<'de, D, T, K, V>(d: D) -> Result<T, D::Error>
where
D: Deserializer<'de>,
T: FromIterator<(K, V)> + Deserialize<'de>,
(K, V): DeserializeOwned,
{
if !d.is_human_readable() {
return T::deserialize(d);
}
let vec = Vec::<(K, V)>::deserialize(d)?;
Ok(T::from_iter(vec))
}