summaryrefslogtreecommitdiff
path: root/src/de/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/mod.rs')
-rw-r--r--src/de/mod.rs17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/de/mod.rs b/src/de/mod.rs
index fd34131..ef9cd76 100644
--- a/src/de/mod.rs
+++ b/src/de/mod.rs
@@ -221,10 +221,14 @@ impl<'a> QsDeserializer<'a> {
impl<'de> de::Deserializer<'de> for QsDeserializer<'de> {
type Error = Error;
- fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value>
+ fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value>
where
V: de::Visitor<'de>,
{
+ if self.iter.next().is_none() {
+ return visitor.visit_unit();
+ }
+
Err(Error::top_level("primitive"))
}
@@ -572,6 +576,16 @@ impl<'de> de::Deserializer<'de> for LevelDeserializer<'de> {
}
}
+ fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value>
+ where
+ V: de::Visitor<'de>,
+ {
+ match self.0 {
+ Level::Flat(ref x) if x == "" => visitor.visit_unit(),
+ _ => Err(de::Error::custom("expected unit".to_owned())),
+ }
+ }
+
fn deserialize_enum<V>(
self,
name: &'static str,
@@ -646,7 +660,6 @@ impl<'de> de::Deserializer<'de> for LevelDeserializer<'de> {
string
bytes
byte_buf
- unit
unit_struct
// newtype_struct
tuple_struct