Skip to main content

total_maps/
serde.rs

1use std::{
2    collections::{BTreeMap, HashMap},
3    hash::Hash,
4};
5
6use serde::{Deserialize, Serialize};
7
8use crate::{Commonality, TotalBTreeMap, TotalHashMap};
9
10impl<K: Serialize, V: Serialize, C> Serialize for TotalHashMap<K, V, C> {
11    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
12    where
13        S: serde::Serializer,
14    {
15        self.as_hash_map().serialize(serializer)
16    }
17}
18impl<'de, K: Deserialize<'de> + Eq + Hash, V: Deserialize<'de>, C: Commonality<V>> Deserialize<'de>
19    for TotalHashMap<K, V, C>
20{
21    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
22    where
23        D: serde::Deserializer<'de>,
24    {
25        let mut this = Self::default();
26        *this.as_hash_map_mut() = HashMap::deserialize(deserializer)?;
27        Ok(this)
28    }
29}
30
31impl<K: Serialize, V: Serialize, C> Serialize for TotalBTreeMap<K, V, C> {
32    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
33    where
34        S: serde::Serializer,
35    {
36        self.as_btree_map().serialize(serializer)
37    }
38}
39impl<'de, K: Deserialize<'de> + Ord, V: Deserialize<'de>, C: Commonality<V>> Deserialize<'de>
40    for TotalBTreeMap<K, V, C>
41{
42    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
43    where
44        D: serde::Deserializer<'de>,
45    {
46        let mut this = Self::default();
47        *this.as_btree_map_mut() = BTreeMap::deserialize(deserializer)?;
48        Ok(this)
49    }
50}