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)]