heapless/
ser.rs

1use core::hash::{BuildHasher, Hash};
2
3use crate::{
4    binary_heap::Kind as BinaryHeapKind, BinaryHeap, Deque, IndexMap, IndexSet, LinearMap, String,
5    Vec,
6};
7use serde::ser::{Serialize, SerializeMap, SerializeSeq, Serializer};
8
9// Sequential containers
10
11impl<T, KIND, const N: usize> Serialize for BinaryHeap<T, KIND, N>
12where
13    T: Ord + Serialize,
14    KIND: BinaryHeapKind,
15{
16    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
17    where
18        S: Serializer,
19    {
20        let mut seq = serializer.serialize_seq(Some(self.len()))?;
21        for element in self {
22            seq.serialize_element(element)?;
23        }
24        seq.end()
25    }
26}
27
28impl<T, S, const N: usize> Serialize for IndexSet<T, S, N>
29where
30    T: Eq + Hash + Serialize,
31    S: BuildHasher,
32{
33    fn serialize<SER>(&self, serializer: SER) -> Result<SER::Ok, SER::Error>
34    where
35        SER: Serializer,
36    {
37        let mut seq = serializer.serialize_seq(Some(self.len()))?;
38        for element in self {
39            seq.serialize_element(element)?;
40        }
41        seq.end()
42    }
43}
44
45impl<T, const N: usize> Serialize for Vec<T, N>
46where
47    T: Serialize,
48{
49    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
50    where
51        S: Serializer,
52    {
53        let mut seq = serializer.serialize_seq(Some(self.len()))?;
54        for element in self {
55            seq.serialize_element(element)?;
56        }
57        seq.end()
58    }
59}
60
61impl<T, const N: usize> Serialize for Deque<T, N>
62where
63    T: Serialize,
64{
65    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
66    where
67        S: Serializer,
68    {
69        let mut seq = serializer.serialize_seq(Some(self.len()))?;
70        for element in self {
71            seq.serialize_element(element)?;
72        }
73        seq.end()
74    }
75}
76
77// Dictionaries
78
79impl<K, V, S, const N: usize> Serialize for IndexMap<K, V, S, N>
80where
81    K: Eq + Hash + Serialize,
82    S: BuildHasher,
83    V: Serialize,
84{
85    fn serialize<SER>(&self, serializer: SER) -> Result<SER::Ok, SER::Error>
86    where
87        SER: Serializer,
88    {
89        let mut map = serializer.serialize_map(Some(self.len()))?;
90        for (k, v) in self {
91            map.serialize_entry(k, v)?;
92        }
93        map.end()
94    }
95}
96
97impl<K, V, const N: usize> Serialize for LinearMap<K, V, N>
98where
99    K: Eq + Serialize,
100    V: Serialize,
101{
102    fn serialize<SER>(&self, serializer: SER) -> Result<SER::Ok, SER::Error>
103    where
104        SER: Serializer,
105    {
106        let mut map = serializer.serialize_map(Some(self.len()))?;
107        for (k, v) in self {
108            map.serialize_entry(k, v)?;
109        }
110        map.end()
111    }
112}
113
114// String containers
115
116impl<const N: usize> Serialize for String<N> {
117    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
118    where
119        S: Serializer,
120    {
121        serializer.serialize_str(&*self)
122    }
123}