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
9impl<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
77impl<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
114impl<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}