Switch serializing Result to using simple enums

This commit is contained in:
Erick Tryzelaar
2015-07-30 07:58:02 -07:00
parent 71cc95248c
commit 5dc245d2ce
4 changed files with 12 additions and 59 deletions
+2 -2
View File
@@ -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))
}
}
+2 -39
View File
@@ -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)
}
}
}