diff --git a/src/de.rs b/src/de.rs index 8882a66c..8408e436 100644 --- a/src/de.rs +++ b/src/de.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::collections::{HashMap, TreeMap}; +use std::collections::{HashMap, HashSet, TreeMap, TreeSet}; use std::gc::{GC, Gc}; use std::hash::Hash; use std::num; @@ -588,6 +588,32 @@ impl< ////////////////////////////////////////////////////////////////////////////// +impl< + T: Deserializable + Eq + Hash +> Deserializable for HashSet { + #[inline] + fn deserialize_token< + D: Deserializer, + E + >(d: &mut D, token: Token) -> Result, E> { + d.expect_seq(token) + } +} + +impl< + T: Deserializable + Ord +> Deserializable for TreeSet { + #[inline] + fn deserialize_token< + D: Deserializer, + E + >(d: &mut D, token: Token) -> Result, E> { + d.expect_seq(token) + } +} + +////////////////////////////////////////////////////////////////////////////// + macro_rules! peel { ($name:ident, $($other:ident,)*) => (impl_deserialize_tuple!($($other,)*)) } diff --git a/src/ser.rs b/src/ser.rs index 8f8bd36d..779b18c7 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use std::collections::{HashMap, TreeMap}; +use std::collections::{HashMap, HashSet, TreeMap, TreeSet}; use std::gc::Gc; use std::hash::Hash; use std::rc::Rc; @@ -240,6 +240,32 @@ impl< ////////////////////////////////////////////////////////////////////////////// +impl< + T: Serializable + Eq + Hash +> Serializable for HashSet { + #[inline] + fn serialize< + S: Serializer, + E + >(&self, s: &mut S) -> Result<(), E> { + s.serialize_seq(self.iter()) + } +} + +impl< + T: Serializable + Ord +> Serializable for TreeSet { + #[inline] + fn serialize< + S: Serializer, + E + >(&self, s: &mut S) -> Result<(), E> { + s.serialize_seq(self.iter()) + } +} + +////////////////////////////////////////////////////////////////////////////// + macro_rules! peel { ($name:ident, $($other:ident,)*) => (impl_serialize_tuple!($($other,)*)) }