From a64aaeeb3b5338ada58a680a914ec48f77a3a955 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 20 May 2018 13:35:25 -0700 Subject: [PATCH] Parse serde(transparent) container attribute --- serde_derive/src/internals/attr.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/serde_derive/src/internals/attr.rs b/serde_derive/src/internals/attr.rs index 43c689a0..4baf1f7c 100644 --- a/serde_derive/src/internals/attr.rs +++ b/serde_derive/src/internals/attr.rs @@ -105,6 +105,7 @@ impl Name { /// Represents container (e.g. struct) attribute information pub struct Container { name: Name, + transparent: bool, deny_unknown_fields: bool, default: Default, rename_all: RenameRule, @@ -181,6 +182,7 @@ impl Container { pub fn from_ast(cx: &Ctxt, item: &syn::DeriveInput) -> Self { let mut ser_name = Attr::none(cx, "rename"); let mut de_name = Attr::none(cx, "rename"); + let mut transparent = BoolAttr::none(cx, "transparent"); let mut deny_unknown_fields = BoolAttr::none(cx, "deny_unknown_fields"); let mut default = Attr::none(cx, "default"); let mut rename_all = Attr::none(cx, "rename_all"); @@ -228,6 +230,11 @@ impl Container { } } + // Parse `#[serde(transparent)]` + Meta(Word(word)) if word == "transparent" => { + transparent.set_true(); + } + // Parse `#[serde(deny_unknown_fields)]` Meta(Word(ref word)) if word == "deny_unknown_fields" => { deny_unknown_fields.set_true(); @@ -376,6 +383,7 @@ impl Container { serialize: ser_name.get().unwrap_or_else(|| item.ident.to_string()), deserialize: de_name.get().unwrap_or_else(|| item.ident.to_string()), }, + transparent: transparent.get(), deny_unknown_fields: deny_unknown_fields.get(), default: default.get().unwrap_or(Default::None), rename_all: rename_all.get().unwrap_or(RenameRule::None), @@ -398,6 +406,10 @@ impl Container { &self.rename_all } + pub fn transparent(&self) -> bool { + self.transparent + } + pub fn deny_unknown_fields(&self) -> bool { self.deny_unknown_fields }