diff options
| author | bors <bors@rust-lang.org> | 2014-11-11 22:37:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-11-11 22:37:05 +0000 |
| commit | e82f60eb471c4ee092bd4867f6946d271a620e71 (patch) | |
| tree | ac317af6db0340abb76a6a91c633c3f7cf61946c /src | |
| parent | 351f7afd06d2164b5bfe2467333c355a20fcb02d (diff) | |
| parent | 477155e638d0a2bddf951ca4a2e24f797ba304bf (diff) | |
| download | rust-e82f60eb471c4ee092bd4867f6946d271a620e71.tar.gz rust-e82f60eb471c4ee092bd4867f6946d271a620e71.zip | |
auto merge of #18813 : csherratt/rust/add-encode-decode-vecmap, r=alexcrichton
Diffstat (limited to 'src')
| -rw-r--r-- | src/libserialize/collection_impls.rs | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/src/libserialize/collection_impls.rs b/src/libserialize/collection_impls.rs index d2d1f5fa8b0..ffeb190ddf8 100644 --- a/src/libserialize/collection_impls.rs +++ b/src/libserialize/collection_impls.rs @@ -16,7 +16,7 @@ use std::hash::{Hash, Hasher}; use {Decodable, Encodable, Decoder, Encoder}; use std::collections::{DList, RingBuf, TreeMap, TreeSet, HashMap, HashSet, - TrieMap, TrieSet}; + TrieMap, TrieSet, VecMap}; use std::collections::enum_set::{EnumSet, CLike}; impl< @@ -311,3 +311,37 @@ impl<E, D: Decoder<E>> Decodable<D, E> for TrieSet { }) } } + +impl< + E, + S: Encoder<E>, + V: Encodable<S, E> +> Encodable<S, E> for VecMap<V> { + fn encode(&self, e: &mut S) -> Result<(), E> { + e.emit_map(self.len(), |e| { + for (i, (key, val)) in self.iter().enumerate() { + try!(e.emit_map_elt_key(i, |e| key.encode(e))); + try!(e.emit_map_elt_val(i, |e| val.encode(e))); + } + Ok(()) + }) + } +} + +impl< + E, + D: Decoder<E>, + V: Decodable<D, E> +> Decodable<D, E> for VecMap<V> { + fn decode(d: &mut D) -> Result<VecMap<V>, E> { + d.read_map(|d, len| { + let mut map = VecMap::new(); + for i in range(0u, len) { + let key = try!(d.read_map_elt_key(i, |d| Decodable::decode(d))); + let val = try!(d.read_map_elt_val(i, |d| Decodable::decode(d))); + map.insert(key, val); + } + Ok(map) + }) + } +} |
