use std::collections::HashMap;
use serde::ser::SerializeMap;
use serde::{
Deserialize,
Deserializer,
Serializer,
};
use super::internal::StrictStringMap;
pub(crate) fn serialize<S>(
value: &HashMap<String, String>,
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut entries: Vec<_> = value.iter().collect();
entries.sort_unstable_by_key(|(left, _)| *left);
let mut map = serializer.serialize_map(Some(entries.len()))?;
for (key, value) in entries {
map.serialize_entry(key, value)?;
}
map.end()
}
pub(crate) fn deserialize<'de, D>(
deserializer: D,
) -> Result<HashMap<String, String>, D::Error>
where
D: Deserializer<'de>,
{
StrictStringMap::<String>::deserialize(deserializer)
.map(StrictStringMap::into_inner)
}