diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 7cb1f26e..58d97c63 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -266,24 +266,23 @@ fn deserialize_from_body(cont: &Container, params: &Parameters) -> Option None, - Body::Struct(Style::Struct, ref fields) => { - Some(deserialize_from_struct(None, params, fields, &cont.attrs, None, Untagged::No)) - } - Body::Struct(Style::Tuple, ref fields) | - Body::Struct(Style::Newtype, ref fields) => { - Some(deserialize_from_tuple(None, params, fields, &cont.attrs, None)) - } - Body::Struct(Style::Unit, _) => None, + match cont.body { + Body::Enum(_) => None, + Body::Struct(Style::Struct, ref fields) => { + Some(deserialize_from_struct(None, params, fields, &cont.attrs, None, Untagged::No)) } - } else { - None + Body::Struct(Style::Tuple, ref fields) | + Body::Struct(Style::Newtype, ref fields) => { + Some(deserialize_from_tuple(None, params, fields, &cont.attrs, None)) + } + Body::Struct(Style::Unit, _) => None, } } diff --git a/serde_derive_internals/src/attr.rs b/serde_derive_internals/src/attr.rs index 7baeb59b..3cf7e74d 100644 --- a/serde_derive_internals/src/attr.rs +++ b/serde_derive_internals/src/attr.rs @@ -164,6 +164,15 @@ pub enum Identifier { Variant, } +impl Identifier { + pub fn is_some(self) -> bool { + match self { + Identifier::No => false, + Identifier::Field | Identifier::Variant => true, + } + } +} + impl Container { /// Extract out the `#[serde(...)]` attributes from an item. pub fn from_ast(cx: &Ctxt, item: &syn::DeriveInput) -> Self {