From 37bc3e9df38a6c3f0f85acc26955462cd56f6640 Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 3 Mar 2015 21:33:51 -0800 Subject: [PATCH] Fix #[derive_deserialize] for deserializing empty sequences named units --- serde2/serde2_macros/src/lib.rs | 9 ++++++++ serde2/tests/test_de.rs | 38 +-------------------------------- 2 files changed, 10 insertions(+), 37 deletions(-) diff --git a/serde2/serde2_macros/src/lib.rs b/serde2/serde2_macros/src/lib.rs index 7a54806a..10204e04 100644 --- a/serde2/serde2_macros/src/lib.rs +++ b/serde2/serde2_macros/src/lib.rs @@ -827,6 +827,15 @@ fn deserialize_struct_empty_fields( Err(::serde2::de::Error::syntax_error()) } } + + + #[inline] + fn visit_seq(&mut self, mut visitor: V) -> Result<$type_ident, V::Error> + where V: de::SeqVisitor, + { + try!(visitor.end()); + self.visit_unit() + } } $state.visit(__Visitor) diff --git a/serde2/tests/test_de.rs b/serde2/tests/test_de.rs index fc245695..6a2987fe 100644 --- a/serde2/tests/test_de.rs +++ b/serde2/tests/test_de.rs @@ -324,45 +324,9 @@ impl<'a, 'b> de::EnumVisitor for TokenDeserializerEnumVisitor<'a, 'b> { ////////////////////////////////////////////////////////////////////////// #[derive(Copy, PartialEq, Debug)] +#[derive_deserialize] struct NamedUnit; -impl Deserialize for NamedUnit { - fn deserialize(deserializer: &mut D) -> Result - where D: Deserializer, - { - deserializer.visit(NamedUnitVisitor) - } -} - -struct NamedUnitVisitor; - -impl Visitor for NamedUnitVisitor { - type Value = NamedUnit; - - fn visit_unit(&mut self) -> Result - where E: de::Error, - { - Ok(NamedUnit) - } - - fn visit_named_unit(&mut self, name: &str) -> Result - where E: de::Error, - { - if name == "NamedUnit" { - Ok(NamedUnit) - } else { - Err(de::Error::syntax_error()) - } - } - - fn visit_seq(&mut self, mut visitor: V) -> Result - where V: de::SeqVisitor, - { - try!(visitor.end()); - Ok(NamedUnit) - } -} - ////////////////////////////////////////////////////////////////////////// #[derive(PartialEq, Debug)]