1use alloc::collections::BTreeMap;
2use core::ops::{Deref, DerefMut};
3use serde::{Deserialize, Deserializer, Serialize, Serializer};
4
5#[derive(Clone, Debug, PartialEq, Default, PartialOrd, Eq)]
7pub struct Map<K: Ord, V> {
8 map: BTreeMap<K, V>,
9}
10impl<K: Ord, V> Map<K, V> {
11 pub fn new() -> Map<K, V> {
13 Map { map: BTreeMap::new() }
14 }
15}
16impl<K: Ord, V> Deref for Map<K, V> {
18 type Target = BTreeMap<K, V>;
19
20 fn deref(&self) -> &Self::Target {
21 &self.map
22 }
23}
24impl<K: Ord, V> DerefMut for Map<K, V> {
25 fn deref_mut(&mut self) -> &mut Self::Target {
26 &mut self.map
27 }
28}
29
30impl<K: Ord, V> From<BTreeMap<K, V>> for Map<K, V> {
31 fn from(map: BTreeMap<K, V>) -> Self {
32 Self { map }
33 }
34}
35impl<K: Ord, V, const N: usize> From<[(K, V); N]> for Map<K, V> {
37 fn from(arr: [(K, V); N]) -> Self {
38 Self { map: BTreeMap::from(arr) }
39 }
40}
41impl<K: Ord + Serialize, V: Serialize> Serialize for Map<K, V> {
43 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
44 where
45 S: Serializer,
46 {
47 self.map.serialize(serializer) }
49}
50impl<'de, K: Ord + Deserialize<'de>, V: Deserialize<'de>> Deserialize<'de> for Map<K, V> {
52 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
53 where
54 D: Deserializer<'de>,
55 {
56 let map = BTreeMap::deserialize(deserializer)?;
57 Ok(Self { map }) }
59}