diff options
author | Sam Scott <sam.scott89@gmail.com> | 2017-03-20 20:16:33 +0000 |
---|---|---|
committer | Sam Scott <sam.scott89@gmail.com> | 2017-03-20 20:18:16 +0000 |
commit | 81b77bd7e7f3397ddfeeb9a63f5c74a08fd6837c (patch) | |
tree | d17d56f8a210adabbb4d5468e1fff73d052b0de5 /src | |
parent | 579af8c2aa5cf4ab520945084a162c86a74447e9 (diff) |
Add support for optional sequences and structs.
Diffstat (limited to 'src')
-rw-r--r-- | src/de.rs | 29 |
1 files changed, 18 insertions, 11 deletions
@@ -568,10 +568,19 @@ impl de::Deserializer for LevelDeserializer { fn deserialize<V>(self, visitor: V) -> Result<V::Value, Self::Error> 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")), } } |