use std::{collections::BTreeMap, fmt::Display, str::FromStr};
use serde::{Deserialize, Deserializer, de};
pub(crate) fn de_int_key<'de, D, K, V>(deserializer: D) -> Result<BTreeMap<K, V>, D::Error>
where
D: Deserializer<'de>,
K: Eq + Ord + FromStr,
K::Err: Display,
V: Deserialize<'de>,
{
let string_map = <BTreeMap<String, V>>::deserialize(deserializer)?;
let mut map = BTreeMap::default();
for (s, v) in string_map {
let k = K::from_str(&s).map_err(de::Error::custom)?;
map.insert(k, v);
}
Ok(map)
}