From 7a170e1b2c1b1e72dddbd6f9391f90640ef437ee Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 3 Mar 2015 21:17:40 -0800 Subject: [PATCH] Fix #[derive_serialize] for enum struct variants --- serde2/serde2_macros/src/lib.rs | 4 +- serde2/tests/test_ser.rs | 87 +-------------------------------- 2 files changed, 3 insertions(+), 88 deletions(-) diff --git a/serde2/serde2_macros/src/lib.rs b/serde2/serde2_macros/src/lib.rs index d818cfec..7a54806a 100644 --- a/serde2/serde2_macros/src/lib.rs +++ b/serde2/serde2_macros/src/lib.rs @@ -443,8 +443,8 @@ fn serialize_variant( ast::StructVariantKind(ref struct_def) => { ( - cx.ident_of("SeqVisitor"), - cx.ident_of("visit_enum_seq"), + cx.ident_of("MapVisitor"), + cx.ident_of("visit_enum_map"), struct_def.fields.iter() .map(|field| field.node.ty.clone()) .collect() diff --git a/serde2/tests/test_ser.rs b/serde2/tests/test_ser.rs index 70102fbe..c0eab0d2 100644 --- a/serde2/tests/test_ser.rs +++ b/serde2/tests/test_ser.rs @@ -287,98 +287,13 @@ struct NamedUnit; #[derive_serialize] struct NamedSeq(i32, i32, i32); +#[derive_serialize] enum Enum { Unit, Seq(i32, i32), Map { a: i32, b: i32 }, } -impl Serialize for Enum { - fn visit(&self, visitor: &mut V) -> Result - where V: Visitor, - { - match *self { - Enum::Unit => { - visitor.visit_enum_unit("Enum", "Unit") - } - Enum::Seq(ref a, ref b) => { - visitor.visit_enum_seq("Enum", "Seq", EnumSeqVisitor { - a: a, - b: b, - state: 0, - }) - } - Enum::Map { ref a, ref b } => { - visitor.visit_enum_map("Enum", "Map", EnumMapVisitor { - a: a, - b: b, - state: 0, - }) - } - } - } -} - -struct EnumSeqVisitor<'a> { - a: &'a i32, - b: &'a i32, - state: u8, -} - -impl<'a> SeqVisitor for EnumSeqVisitor<'a> { - fn visit(&mut self, visitor: &mut V) -> Result, V::Error> - where V: Visitor, - { - match self.state { - 0 => { - self.state += 1; - Ok(Some(try!(visitor.visit_seq_elt(true, self.a)))) - } - 1 => { - self.state += 1; - Ok(Some(try!(visitor.visit_seq_elt(false, self.b)))) - } - _ => { - Ok(None) - } - } - } - - fn size_hint(&self) -> (usize, Option) { - (2, Some(2)) - } -} - -struct EnumMapVisitor<'a> { - a: &'a i32, - b: &'a i32, - state: u8, -} - -impl<'a> MapVisitor for EnumMapVisitor<'a> { - fn visit(&mut self, visitor: &mut V) -> Result, V::Error> - where V: Visitor, - { - match self.state { - 0 => { - self.state += 1; - Ok(Some(try!(visitor.visit_map_elt(true, "a", self.a)))) - } - 1 => { - self.state += 1; - Ok(Some(try!(visitor.visit_map_elt(false, "b", self.b)))) - } - _ => { - Ok(None) - } - } - } - - fn size_hint(&self) -> (usize, Option) { - (2, Some(2)) - } -} - macro_rules! btreemap { () => { BTreeMap::new()