From 096d851f6d878c2c727f530ccc5749b4d8be2ab0 Mon Sep 17 00:00:00 2001 From: Rudi Floren Date: Thu, 2 Mar 2023 06:01:26 +0100 Subject: Improve support unit types (#76) * fix unit type serialization issue `()` and `A` returned a no key error previously. This is very unergonimic if you just have a trait bound for Serialize and want to generate an empty querystring `?` * add support for deserializing unit structs * Comment updates for serializer methods --- src/de/mod.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/de') 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(self, _visitor: V) -> Result + fn deserialize_any(mut self, visitor: V) -> Result 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(self, visitor: V) -> Result + 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( 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 -- cgit v1.2.3