Switch serializing Result to using simple enums
This commit is contained in:
parent
71cc95248c
commit
5dc245d2ce
@ -916,11 +916,11 @@ impl<T, E> Deserialize for Result<T, E> 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))
|
||||
}
|
||||
}
|
||||
|
@ -632,47 +632,10 @@ impl<T, E> Serialize for Result<T, E> where T: Serialize, E: Serialize {
|
||||
fn serialize<S>(&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<S>(&mut self, serializer: &mut S) -> Result<Option<()>, 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<usize> {
|
||||
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<S>(&mut self, serializer: &mut S) -> Result<Option<()>, 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<usize> {
|
||||
Some(1)
|
||||
}
|
||||
}
|
||||
|
||||
serializer.visit_tuple_variant("Result", 1, "Err", Visitor(Some(value)))
|
||||
serializer.visit_enum_simple("Result", 1, "Err", value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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::<i32, i32>(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 {
|
||||
|
@ -396,16 +396,12 @@ declare_tests! {
|
||||
}
|
||||
test_result {
|
||||
Ok::<i32, i32>(0) => vec![
|
||||
Token::EnumSeqStart("Result", "Ok", Some(1)),
|
||||
Token::SeqSep,
|
||||
Token::EnumSimple("Result", "Ok"),
|
||||
Token::I32(0),
|
||||
Token::SeqEnd,
|
||||
],
|
||||
Err::<i32, i32>(1) => vec![
|
||||
Token::EnumSeqStart("Result", "Err", Some(1)),
|
||||
Token::SeqSep,
|
||||
Token::EnumSimple("Result", "Err"),
|
||||
Token::I32(1),
|
||||
Token::SeqEnd,
|
||||
],
|
||||
}
|
||||
test_slice {
|
||||
|
Loading…
x
Reference in New Issue
Block a user