diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index aaaaed96..d2d4c337 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -916,11 +916,11 @@ impl Deserialize for Result where T: Deserialize, E: Deserialize { { match try!(visitor.visit_variant()) { Field::Ok => { - let (value,) = try!(visitor.visit_tuple(1, TupleVisitor1::new())); + let value = try!(visitor.visit_simple()); Ok(Ok(value)) } Field::Err => { - let (value,) = try!(visitor.visit_tuple(1, TupleVisitor1::new())); + let value = try!(visitor.visit_simple()); Ok(Err(value)) } } diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index 559f67a0..ec7c3884 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -632,47 +632,10 @@ impl Serialize for Result where T: Serialize, E: Serialize { fn serialize(&self, serializer: &mut S) -> Result<(), S::Error> where S: Serializer { match *self { Result::Ok(ref value) => { - struct Visitor<'a, T: 'a>(Option<&'a T>); - - impl<'a, T> SeqVisitor for Visitor<'a, T> where T: Serialize + 'a { - #[inline] - fn visit(&mut self, serializer: &mut S) -> Result, S::Error> - where S: Serializer - { - match self.0.take() { - Some(value) => Ok(Some(try!(serializer.visit_seq_elt(value)))), - None => Ok(None), - } - } - - #[inline] - fn len(&self) -> Option { - Some(1) - } - } - - serializer.visit_tuple_variant("Result", 0, "Ok", Visitor(Some(value))) + serializer.visit_enum_simple("Result", 0, "Ok", value) } Result::Err(ref value) => { - struct Visitor<'a, E: 'a>(Option<&'a E>); - - impl<'a, E> SeqVisitor for Visitor<'a, E> where E: Serialize + 'a { - #[inline] - fn visit(&mut self, serializer: &mut S) -> Result, S::Error> - where S: Serializer { - match self.0.take() { - Some(value) => Ok(Some(try!(serializer.visit_seq_elt(value)))), - None => Ok(None), - } - } - - #[inline] - fn len(&self) -> Option { - Some(1) - } - } - - serializer.visit_tuple_variant("Result", 1, "Err", Visitor(Some(value))) + serializer.visit_enum_simple("Result", 1, "Err", value) } } } diff --git a/serde_tests/tests/test_de.rs b/serde_tests/tests/test_de.rs index 78c3f16f..f226ef7e 100644 --- a/serde_tests/tests/test_de.rs +++ b/serde_tests/tests/test_de.rs @@ -539,23 +539,17 @@ declare_tests! { Token::EnumStart("Result"), Token::Str("Ok"), - Token::EnumSeq, - Token::SeqStart(1), - Token::SeqSep, - Token::I32(0), - Token::SeqEnd, - Token::EnumEnd, + Token::EnumSimple, + Token::I32(0), + Token::SeqEnd, ], Err::(1) => vec![ Token::EnumStart("Result"), Token::Str("Err"), - Token::EnumSeq, - Token::SeqStart(1), - Token::SeqSep, - Token::I32(1), - Token::SeqEnd, - Token::EnumEnd, + Token::EnumSimple, + Token::I32(1), + Token::SeqEnd, ], } test_unit { diff --git a/serde_tests/tests/test_ser.rs b/serde_tests/tests/test_ser.rs index 01fe11f3..c667cf35 100644 --- a/serde_tests/tests/test_ser.rs +++ b/serde_tests/tests/test_ser.rs @@ -396,16 +396,12 @@ declare_tests! { } test_result { Ok::(0) => vec![ - Token::EnumSeqStart("Result", "Ok", Some(1)), - Token::SeqSep, + Token::EnumSimple("Result", "Ok"), Token::I32(0), - Token::SeqEnd, ], Err::(1) => vec![ - Token::EnumSeqStart("Result", "Err", Some(1)), - Token::SeqSep, + Token::EnumSimple("Result", "Err"), Token::I32(1), - Token::SeqEnd, ], } test_slice {