From 81b77bd7e7f3397ddfeeb9a63f5c74a08fd6837c Mon Sep 17 00:00:00 2001 From: Sam Scott Date: Mon, 20 Mar 2017 20:16:33 +0000 Subject: Add support for optional sequences and structs. --- src/de.rs | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/de.rs b/src/de.rs index 0e08bf1..248096a 100644 --- a/src/de.rs +++ b/src/de.rs @@ -568,10 +568,19 @@ impl de::Deserializer for LevelDeserializer { fn deserialize(self, visitor: V) -> Result where V: de::Visitor, { - if let Level::Flat(x) = self.0 { - x.into_deserializer().deserialize(visitor) - } else { - Err(de::Error::custom("cannot deserialize value")) + match self.0 { + Level::Nested(map) => { + Deserializer::with_map(map).deserialize_map(visitor) + }, + Level::Sequence(seq) => { + SeqDeserializer::new(seq.into_iter()).deserialize(visitor) + }, + Level::Flat(x) => { + x.into_deserializer().deserialize(visitor) + }, + Level::Invalid(e) => { + Err(de::Error::custom(e)) + } } } @@ -631,14 +640,12 @@ impl de::Deserializer for LevelDeserializer { where V: de::Visitor, { match self.0 { - Level::Flat(x) => { - if x == "" { - visitor.visit_none() - } else { - visitor.visit_some(x.into_deserializer()) - } + Level::Flat(ref x) if x == "" => { + visitor.visit_none() + }, + _ => { + visitor.visit_some(self) }, - _ => Err(de::Error::custom("value does not appear to be a value")), } } -- cgit v1.2.3