diff options
Diffstat (limited to 'src/libserialize/serialize.rs')
| -rw-r--r-- | src/libserialize/serialize.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libserialize/serialize.rs b/src/libserialize/serialize.rs index c4f0a7a1830..e57e7adcf8d 100644 --- a/src/libserialize/serialize.rs +++ b/src/libserialize/serialize.rs @@ -18,6 +18,7 @@ use std::hashmap::{HashMap, HashSet}; use std::rc::Rc; use std::trie::{TrieMap, TrieSet}; use std::vec; +use std::vec_ng::Vec; pub trait Encoder { // Primitive types: @@ -435,6 +436,26 @@ impl<D:Decoder,T:Decodable<D>> Decodable<D> for ~[T] { } } +impl<S:Encoder,T:Encodable<S>> Encodable<S> for Vec<T> { + fn encode(&self, s: &mut S) { + s.emit_seq(self.len(), |s| { + for (i, e) in self.iter().enumerate() { + s.emit_seq_elt(i, |s| e.encode(s)) + } + }) + } +} + +impl<D:Decoder,T:Decodable<D>> Decodable<D> for Vec<T> { + fn decode(d: &mut D) -> Vec<T> { + d.read_seq(|d, len| { + Vec::from_fn(len, |i| { + d.read_seq_elt(i, |d| Decodable::decode(d)) + }) + }) + } +} + impl<S:Encoder,T:Encodable<S>> Encodable<S> for Option<T> { fn encode(&self, s: &mut S) { s.emit_option(|s| { |
