1 //! Implementations of serialization for structures found in liballoc
3 use std::hash::{BuildHasher, Hash};
5 use crate::{Decodable, Decoder, Encodable, Encoder};
6 use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, LinkedList, VecDeque};
10 use smallvec::{Array, SmallVec};
12 impl<S: Encoder, A: Array<Item: Encodable<S>>> Encodable<S> for SmallVec<A> {
13 fn encode(&self, s: &mut S) -> Result<(), S::Error> {
14 let slice: &[A::Item] = self;
19 impl<D: Decoder, A: Array<Item: Decodable<D>>> Decodable<D> for SmallVec<A> {
20 fn decode(d: &mut D) -> SmallVec<A> {
21 let len = d.read_usize();
22 (0..len).map(|_| Decodable::decode(d)).collect()
26 impl<S: Encoder, T: Encodable<S>> Encodable<S> for LinkedList<T> {
27 fn encode(&self, s: &mut S) -> Result<(), S::Error> {
28 s.emit_seq(self.len(), |s| {
29 for (i, e) in self.iter().enumerate() {
30 s.emit_seq_elt(i, |s| e.encode(s))?;
37 impl<D: Decoder, T: Decodable<D>> Decodable<D> for LinkedList<T> {
38 fn decode(d: &mut D) -> LinkedList<T> {
39 let len = d.read_usize();
40 (0..len).map(|_| Decodable::decode(d)).collect()
44 impl<S: Encoder, T: Encodable<S>> Encodable<S> for VecDeque<T> {
45 fn encode(&self, s: &mut S) -> Result<(), S::Error> {
46 s.emit_seq(self.len(), |s| {
47 for (i, e) in self.iter().enumerate() {
48 s.emit_seq_elt(i, |s| e.encode(s))?;
55 impl<D: Decoder, T: Decodable<D>> Decodable<D> for VecDeque<T> {
56 fn decode(d: &mut D) -> VecDeque<T> {
57 let len = d.read_usize();
58 (0..len).map(|_| Decodable::decode(d)).collect()
62 impl<S: Encoder, K, V> Encodable<S> for BTreeMap<K, V>
64 K: Encodable<S> + PartialEq + Ord,
67 fn encode(&self, e: &mut S) -> Result<(), S::Error> {
68 e.emit_map(self.len(), |e| {
69 for (i, (key, val)) in self.iter().enumerate() {
70 e.emit_map_elt_key(i, |e| key.encode(e))?;
71 e.emit_map_elt_val(|e| val.encode(e))?;
78 impl<D: Decoder, K, V> Decodable<D> for BTreeMap<K, V>
80 K: Decodable<D> + PartialEq + Ord,
83 fn decode(d: &mut D) -> BTreeMap<K, V> {
84 let len = d.read_usize();
85 let mut map = BTreeMap::new();
87 let key = Decodable::decode(d);
88 let val = Decodable::decode(d);
95 impl<S: Encoder, T> Encodable<S> for BTreeSet<T>
97 T: Encodable<S> + PartialEq + Ord,
99 fn encode(&self, s: &mut S) -> Result<(), S::Error> {
100 s.emit_seq(self.len(), |s| {
101 for (i, e) in self.iter().enumerate() {
102 s.emit_seq_elt(i, |s| e.encode(s))?;
109 impl<D: Decoder, T> Decodable<D> for BTreeSet<T>
111 T: Decodable<D> + PartialEq + Ord,
113 fn decode(d: &mut D) -> BTreeSet<T> {
114 let len = d.read_usize();
115 let mut set = BTreeSet::new();
117 set.insert(Decodable::decode(d));
123 impl<E: Encoder, K, V, S> Encodable<E> for HashMap<K, V, S>
125 K: Encodable<E> + Eq,
129 fn encode(&self, e: &mut E) -> Result<(), E::Error> {
130 e.emit_map(self.len(), |e| {
131 for (i, (key, val)) in self.iter().enumerate() {
132 e.emit_map_elt_key(i, |e| key.encode(e))?;
133 e.emit_map_elt_val(|e| val.encode(e))?;
140 impl<D: Decoder, K, V, S> Decodable<D> for HashMap<K, V, S>
142 K: Decodable<D> + Hash + Eq,
144 S: BuildHasher + Default,
146 fn decode(d: &mut D) -> HashMap<K, V, S> {
147 let len = d.read_usize();
148 let state = Default::default();
149 let mut map = HashMap::with_capacity_and_hasher(len, state);
151 let key = Decodable::decode(d);
152 let val = Decodable::decode(d);
153 map.insert(key, val);
159 impl<E: Encoder, T, S> Encodable<E> for HashSet<T, S>
161 T: Encodable<E> + Eq,
164 fn encode(&self, s: &mut E) -> Result<(), E::Error> {
165 s.emit_seq(self.len(), |s| {
166 for (i, e) in self.iter().enumerate() {
167 s.emit_seq_elt(i, |s| e.encode(s))?;
174 impl<E: Encoder, T, S> Encodable<E> for &HashSet<T, S>
176 T: Encodable<E> + Eq,
179 fn encode(&self, s: &mut E) -> Result<(), E::Error> {
184 impl<D: Decoder, T, S> Decodable<D> for HashSet<T, S>
186 T: Decodable<D> + Hash + Eq,
187 S: BuildHasher + Default,
189 fn decode(d: &mut D) -> HashSet<T, S> {
190 let len = d.read_usize();
191 let state = Default::default();
192 let mut set = HashSet::with_capacity_and_hasher(len, state);
194 set.insert(Decodable::decode(d));
200 impl<E: Encoder, K, V, S> Encodable<E> for indexmap::IndexMap<K, V, S>
202 K: Encodable<E> + Hash + Eq,
206 fn encode(&self, e: &mut E) -> Result<(), E::Error> {
207 e.emit_map(self.len(), |e| {
208 for (i, (key, val)) in self.iter().enumerate() {
209 e.emit_map_elt_key(i, |e| key.encode(e))?;
210 e.emit_map_elt_val(|e| val.encode(e))?;
217 impl<D: Decoder, K, V, S> Decodable<D> for indexmap::IndexMap<K, V, S>
219 K: Decodable<D> + Hash + Eq,
221 S: BuildHasher + Default,
223 fn decode(d: &mut D) -> indexmap::IndexMap<K, V, S> {
224 let len = d.read_usize();
225 let state = Default::default();
226 let mut map = indexmap::IndexMap::with_capacity_and_hasher(len, state);
228 let key = Decodable::decode(d);
229 let val = Decodable::decode(d);
230 map.insert(key, val);
236 impl<E: Encoder, T, S> Encodable<E> for indexmap::IndexSet<T, S>
238 T: Encodable<E> + Hash + Eq,
241 fn encode(&self, s: &mut E) -> Result<(), E::Error> {
242 s.emit_seq(self.len(), |s| {
243 for (i, e) in self.iter().enumerate() {
244 s.emit_seq_elt(i, |s| e.encode(s))?;
251 impl<D: Decoder, T, S> Decodable<D> for indexmap::IndexSet<T, S>
253 T: Decodable<D> + Hash + Eq,
254 S: BuildHasher + Default,
256 fn decode(d: &mut D) -> indexmap::IndexSet<T, S> {
257 let len = d.read_usize();
258 let state = Default::default();
259 let mut set = indexmap::IndexSet::with_capacity_and_hasher(len, state);
261 set.insert(Decodable::decode(d));
267 impl<E: Encoder, T: Encodable<E>> Encodable<E> for Rc<[T]> {
268 fn encode(&self, s: &mut E) -> Result<(), E::Error> {
269 let slice: &[T] = self;
274 impl<D: Decoder, T: Decodable<D>> Decodable<D> for Rc<[T]> {
275 fn decode(d: &mut D) -> Rc<[T]> {
276 let vec: Vec<T> = Decodable::decode(d);
281 impl<E: Encoder, T: Encodable<E>> Encodable<E> for Arc<[T]> {
282 fn encode(&self, s: &mut E) -> Result<(), E::Error> {
283 let slice: &[T] = self;
288 impl<D: Decoder, T: Decodable<D>> Decodable<D> for Arc<[T]> {
289 fn decode(d: &mut D) -> Arc<[T]> {
290 let vec: Vec<T> = Decodable::decode(d);