Skip to content

Commit 84ce4f1

Browse files
committed
Add Encodable and Decodable impls for Arc<[T]>
1 parent 30733b3 commit 84ce4f1

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/libserialize/collection_impls.rs

+24
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use std::hash::{Hash, BuildHasher};
1515
use {Decodable, Encodable, Decoder, Encoder};
1616
use std::collections::{LinkedList, VecDeque, BTreeMap, BTreeSet, HashMap, HashSet};
1717
use std::rc::Rc;
18+
use std::sync::Arc;
1819

1920
impl<
2021
T: Encodable
@@ -218,3 +219,26 @@ impl<T: Decodable> Decodable for Rc<[T]> {
218219
})
219220
}
220221
}
222+
223+
impl<T: Encodable> Encodable for Arc<[T]> {
224+
fn encode<E: Encoder>(&self, s: &mut E) -> Result<(), E::Error> {
225+
s.emit_seq(self.len(), |s| {
226+
for (index, e) in self.iter().enumerate() {
227+
s.emit_seq_elt(index, |s| e.encode(s))?;
228+
}
229+
Ok(())
230+
})
231+
}
232+
}
233+
234+
impl<T: Decodable> Decodable for Arc<[T]> {
235+
fn decode<D: Decoder>(d: &mut D) -> Result<Arc<[T]>, D::Error> {
236+
d.read_seq(|d, len| {
237+
let mut vec = Vec::with_capacity(len);
238+
for index in 0..len {
239+
vec.push(d.read_seq_elt(index, |d| Decodable::decode(d))?);
240+
}
241+
Ok(vec.into())
242+
})
243+
}
244+
}

0 commit comments

Comments
 (0)