use std::{
collections::BTreeMap,
hash::Hash,
};
use serde::{
de::{Deserialize, Deserializer},
ser::{Serialize, Serializer},
};
use super::Key;
pub fn serialize<'a, S: Serializer, T: Serialize, U>(
map: &BTreeMap<U, T>,
serializer: S,
) -> Result<S::Ok, S::Error> {
serializer.collect_seq(map.values())
}
pub fn deserialize<'a, D, T, U>(
deserializer: D,
) -> Result<BTreeMap<U, T>, D::Error>
where D: Deserializer<'a>,
T: Key<'a, U> + Deserialize<'a>,
U: Deserialize<'a> + Eq + Hash + Ord + Serialize {
let items = Vec::<T>::deserialize(deserializer)?;
let mut map = BTreeMap::new();
for item in items {
map.insert(item.key(), item);
}
Ok(map)
}