From 687e099b441ff62d6ab69577e28e0eebfa82a186 Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Wed, 22 Nov 2017 14:39:32 +0100 Subject: incr.comp.: Make a bunch of query results encodable. --- src/libserialize/collection_impls.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/libserialize') diff --git a/src/libserialize/collection_impls.rs b/src/libserialize/collection_impls.rs index 1a995276931..d8ae9729224 100644 --- a/src/libserialize/collection_impls.rs +++ b/src/libserialize/collection_impls.rs @@ -14,6 +14,7 @@ use std::hash::{Hash, BuildHasher}; use {Decodable, Encodable, Decoder, Encoder}; use std::collections::{LinkedList, VecDeque, BTreeMap, BTreeSet, HashMap, HashSet}; +use std::rc::Rc; impl< T: Encodable @@ -194,3 +195,26 @@ impl Decodable for HashSet }) } } + +impl Encodable for Rc<[T]> { + fn encode(&self, s: &mut E) -> Result<(), E::Error> { + s.emit_seq(self.len(), |s| { + for (index, e) in self.iter().enumerate() { + s.emit_seq_elt(index, |s| e.encode(s))?; + } + Ok(()) + }) + } +} + +impl Decodable for Rc<[T]> { + fn decode(d: &mut D) -> Result, D::Error> { + d.read_seq(|d, len| { + let mut vec = Vec::with_capacity(len); + for index in 0..len { + vec.push(d.read_seq_elt(index, |d| Decodable::decode(d))?); + } + Ok(vec.into()) + }) + } +} -- cgit 1.4.1-3-g733a5