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) {
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) {
28 s.emit_usize(self.len());
29 for e in self.iter() {
35 impl<D: Decoder, T: Decodable<D>> Decodable<D> for LinkedList<T> {
36 fn decode(d: &mut D) -> LinkedList<T> {
37 let len = d.read_usize();
38 (0..len).map(|_| Decodable::decode(d)).collect()
42 impl<S: Encoder, T: Encodable<S>> Encodable<S> for VecDeque<T> {
43 fn encode(&self, s: &mut S) {
44 s.emit_usize(self.len());
45 for e in self.iter() {
51 impl<D: Decoder, T: Decodable<D>> Decodable<D> for VecDeque<T> {
52 fn decode(d: &mut D) -> VecDeque<T> {
53 let len = d.read_usize();
54 (0..len).map(|_| Decodable::decode(d)).collect()
58 impl<S: Encoder, K, V> Encodable<S> for BTreeMap<K, V>
60 K: Encodable<S> + PartialEq + Ord,
63 fn encode(&self, e: &mut S) {
64 e.emit_usize(self.len());
65 for (key, val) in self.iter() {
72 impl<D: Decoder, K, V> Decodable<D> for BTreeMap<K, V>
74 K: Decodable<D> + PartialEq + Ord,
77 fn decode(d: &mut D) -> BTreeMap<K, V> {
78 let len = d.read_usize();
79 let mut map = BTreeMap::new();
81 let key = Decodable::decode(d);
82 let val = Decodable::decode(d);
89 impl<S: Encoder, T> Encodable<S> for BTreeSet<T>
91 T: Encodable<S> + PartialEq + Ord,
93 fn encode(&self, s: &mut S) {
94 s.emit_usize(self.len());
95 for e in self.iter() {
101 impl<D: Decoder, T> Decodable<D> for BTreeSet<T>
103 T: Decodable<D> + PartialEq + Ord,
105 fn decode(d: &mut D) -> BTreeSet<T> {
106 let len = d.read_usize();
107 let mut set = BTreeSet::new();
109 set.insert(Decodable::decode(d));
115 impl<E: Encoder, K, V, S> Encodable<E> for HashMap<K, V, S>
117 K: Encodable<E> + Eq,
121 fn encode(&self, e: &mut E) {
122 e.emit_usize(self.len());
123 for (key, val) in self.iter() {
130 impl<D: Decoder, K, V, S> Decodable<D> for HashMap<K, V, S>
132 K: Decodable<D> + Hash + Eq,
134 S: BuildHasher + Default,
136 fn decode(d: &mut D) -> HashMap<K, V, S> {
137 let len = d.read_usize();
138 let state = Default::default();
139 let mut map = HashMap::with_capacity_and_hasher(len, state);
141 let key = Decodable::decode(d);
142 let val = Decodable::decode(d);
143 map.insert(key, val);
149 impl<E: Encoder, T, S> Encodable<E> for HashSet<T, S>
151 T: Encodable<E> + Eq,
154 fn encode(&self, s: &mut E) {
155 s.emit_usize(self.len());
156 for e in self.iter() {
162 impl<D: Decoder, T, S> Decodable<D> for HashSet<T, S>
164 T: Decodable<D> + Hash + Eq,
165 S: BuildHasher + Default,
167 fn decode(d: &mut D) -> HashSet<T, S> {
168 let len = d.read_usize();
169 let state = Default::default();
170 let mut set = HashSet::with_capacity_and_hasher(len, state);
172 set.insert(Decodable::decode(d));
178 impl<E: Encoder, K, V, S> Encodable<E> for indexmap::IndexMap<K, V, S>
180 K: Encodable<E> + Hash + Eq,
184 fn encode(&self, e: &mut E) {
185 e.emit_usize(self.len());
186 for (key, val) in self.iter() {
193 impl<D: Decoder, K, V, S> Decodable<D> for indexmap::IndexMap<K, V, S>
195 K: Decodable<D> + Hash + Eq,
197 S: BuildHasher + Default,
199 fn decode(d: &mut D) -> indexmap::IndexMap<K, V, S> {
200 let len = d.read_usize();
201 let state = Default::default();
202 let mut map = indexmap::IndexMap::with_capacity_and_hasher(len, state);
204 let key = Decodable::decode(d);
205 let val = Decodable::decode(d);
206 map.insert(key, val);
212 impl<E: Encoder, T, S> Encodable<E> for indexmap::IndexSet<T, S>
214 T: Encodable<E> + Hash + Eq,
217 fn encode(&self, s: &mut E) {
218 s.emit_usize(self.len());
219 for e in self.iter() {
225 impl<D: Decoder, T, S> Decodable<D> for indexmap::IndexSet<T, S>
227 T: Decodable<D> + Hash + Eq,
228 S: BuildHasher + Default,
230 fn decode(d: &mut D) -> indexmap::IndexSet<T, S> {
231 let len = d.read_usize();
232 let state = Default::default();
233 let mut set = indexmap::IndexSet::with_capacity_and_hasher(len, state);
235 set.insert(Decodable::decode(d));
241 impl<E: Encoder, T: Encodable<E>> Encodable<E> for Rc<[T]> {
242 fn encode(&self, s: &mut E) {
243 let slice: &[T] = self;
248 impl<D: Decoder, T: Decodable<D>> Decodable<D> for Rc<[T]> {
249 fn decode(d: &mut D) -> Rc<[T]> {
250 let vec: Vec<T> = Decodable::decode(d);
255 impl<E: Encoder, T: Encodable<E>> Encodable<E> for Arc<[T]> {
256 fn encode(&self, s: &mut E) {
257 let slice: &[T] = self;
262 impl<D: Decoder, T: Decodable<D>> Decodable<D> for Arc<[T]> {
263 fn decode(d: &mut D) -> Arc<[T]> {
264 let vec: Vec<T> = Decodable::decode(d);