Add #[derive_deserialize] support for enums

This commit is contained in:
Erick Tryzelaar
2015-02-11 08:56:27 -08:00
parent 3fd42e616c
commit 1552eb72dc
2 changed files with 344 additions and 315 deletions
+16 -3
View File
@@ -201,6 +201,13 @@ pub trait Visitor {
>(&mut self, _name: &str, _variant: &str, _visitor: V) -> Result<Self::Value, V::Error> {
Err(Error::syntax_error())
}
#[inline]
fn visit_variant<
V: EnumVisitor,
>(&mut self, _name: &str, _visitor: V) -> Result<Self::Value, V::Error> {
Err(Error::syntax_error())
}
}
pub trait SeqVisitor {
@@ -1177,11 +1184,17 @@ mod tests {
fn visit_enum<
V: super::EnumVisitor,
>(&mut self, name: &str, variant: &str, mut visitor: V) -> Result<Enum, V::Error> {
if name != "Enum" {
return Err(super::Error::syntax_error());
if name == "Enum" {
self.visit_variant(variant, visitor)
} else {
Err(super::Error::syntax_error());
}
}
match variant {
fn visit_variant<
V: super::EnumVisitor,
>(&mut self, name: &str, mut visitor: V) -> Result<Enum, V::Error> {
match name {
"Unit" => {
try!(visitor.visit_unit());
Ok(Enum::Unit)