diff --git a/serde/src/de/value.rs b/serde/src/de/value.rs index a4502264..0a5fe4fc 100644 --- a/serde/src/de/value.rs +++ b/serde/src/de/value.rs @@ -362,6 +362,38 @@ impl ValueDeserializer for HashSet /////////////////////////////////////////////////////////////////////////////// +/// A helper deserializer that deserializes a sequence using a `SeqVisitor`. +pub struct SeqVisitorDeserializer { + visitor: V_, + marker: PhantomData, +} + +impl SeqVisitorDeserializer + where V_: de::SeqVisitor, + E: de::Error, +{ + /// Construct a new `SeqVisitorDeserializer`. + pub fn new(visitor: V_) -> Self { + SeqVisitorDeserializer{ + visitor: visitor, + marker: PhantomData + } + } +} + +impl de::Deserializer for SeqVisitorDeserializer + where V_: de::SeqVisitor, + E: de::Error, +{ + type Error = E; + + fn visit(&mut self, mut visitor: V) -> Result { + visitor.visit_seq(&mut self.visitor) + } +} + +/////////////////////////////////////////////////////////////////////////////// + /// A helper deserializer that deserializes a map. pub struct MapDeserializer where I: Iterator, @@ -484,6 +516,38 @@ impl ValueDeserializer for HashMap /////////////////////////////////////////////////////////////////////////////// +/// A helper deserializer that deserializes a map using a `MapVisitor`. +pub struct MapVisitorDeserializer { + visitor: V_, + marker: PhantomData, +} + +impl MapVisitorDeserializer + where V_: de::MapVisitor, + E: de::Error, +{ + /// Construct a new `MapVisitorDeserializer`. + pub fn new(visitor: V_) -> Self { + MapVisitorDeserializer{ + visitor: visitor, + marker: PhantomData + } + } +} + +impl de::Deserializer for MapVisitorDeserializer + where V_: de::MapVisitor, + E: de::Error, +{ + type Error = E; + + fn visit(&mut self, mut visitor: V) -> Result { + visitor.visit_map(&mut self.visitor) + } +} + +/////////////////////////////////////////////////////////////////////////////// + impl<'a, E> ValueDeserializer for bytes::Bytes<'a> where E: de::Error, {