@@ -81,93 +81,86 @@ pub fn derive_referenced_names(mut input: DeriveInput) -> TokenStream {
8181 }
8282 } ,
8383 Data :: Enum ( data) => {
84- let variants =
85- data . variants
86- . iter ( )
87- . map ( |variant| {
88- let variant_name = & variant. ident ;
89- does_not_have_skip_attr ( & variant. attrs )
90- . then ( || match & variant. fields {
91- Fields :: Named ( named) => {
92- let ( names, fields) : ( Vec < _ > , Vec < _ > ) =
93- named
94- . named
95- . iter ( )
96- . map ( |field| {
97- does_not_have_skip_attr ( & field. attrs )
98- . then ( || {
99- let name = field . ident . as_ref ( ) . unwrap ( ) ;
100- ( name , quote ! {
84+ let variants = data
85+ . variants
86+ . iter ( )
87+ . map ( |variant| {
88+ let variant_name = & variant. ident ;
89+ if does_not_have_skip_attr ( & variant. attrs ) {
90+ match & variant. fields {
91+ Fields :: Named ( named) => {
92+ let ( names, fields) : ( Vec < _ > , Vec < _ > ) = named
93+ . named
94+ . iter ( )
95+ . map ( |field| {
96+ let name = field . ident . as_ref ( ) . unwrap ( ) ;
97+ if does_not_have_skip_attr ( & field. attrs ) {
98+ (
99+ name,
100+ quote ! {
101101 #name. extend_referenced_names( names) ;
102- } )
103- } )
104- . unwrap_or_else ( || {
105- let name = field. ident . as_ref ( ) . unwrap ( ) ;
106- ( name, quote ! { } )
107- } )
108- } )
109- . unzip ( ) ;
110-
111- quote ! {
112- #name:: #variant_name { #( #names, ) * } => {
113- #( #fields) *
102+ } ,
103+ )
104+ } else {
105+ ( name, quote ! { } )
114106 }
107+ } )
108+ . unzip ( ) ;
109+
110+ quote ! {
111+ #name:: #variant_name { #( #names, ) * } => {
112+ #( #fields) *
115113 }
116114 }
117- Fields :: Unnamed ( unnamed) => {
118- let ( fields, names) : ( Vec < _ > , Vec < _ > ) = unnamed
119- . unnamed
120- . iter ( )
121- . enumerate ( )
122- . map ( |( i, field) | {
123- does_not_have_skip_attr ( & field. attrs )
124- . then ( || {
125- let ident = Ident :: new (
126- format ! ( "field_{}" , i) . as_str ( ) ,
127- variant. span ( ) ,
128- ) ;
129- (
130- quote ! {
131- #ident. extend_referenced_names( names) ;
132- } ,
133- ident,
134- )
135- } )
136- . unwrap_or_else ( || {
137- let ident = Ident :: new (
138- format ! ( "field_{}" , i) . as_str ( ) ,
139- variant. span ( ) ,
140- ) ;
141- ( quote ! { } , ident)
142- } )
143- } )
144- . unzip ( ) ;
145-
146- quote ! {
147- #name:: #variant_name( #( #names, ) * ) => {
148- #( #fields) *
115+ }
116+ Fields :: Unnamed ( unnamed) => {
117+ let ( fields, names) : ( Vec < _ > , Vec < _ > ) = unnamed
118+ . unnamed
119+ . iter ( )
120+ . enumerate ( )
121+ . map ( |( i, field) | {
122+ let ident = Ident :: new (
123+ format ! ( "field_{}" , i) . as_str ( ) ,
124+ variant. span ( ) ,
125+ ) ;
126+ if does_not_have_skip_attr ( & field. attrs ) {
127+ (
128+ quote ! {
129+ #ident. extend_referenced_names( names) ;
130+ } ,
131+ ident,
132+ )
133+ } else {
134+ ( quote ! { } , ident)
149135 }
136+ } )
137+ . unzip ( ) ;
138+
139+ quote ! {
140+ #name:: #variant_name( #( #names, ) * ) => {
141+ #( #fields) *
150142 }
151143 }
152- Fields :: Unit => {
153- quote ! { #name:: #variant_name => { } }
154- }
155- } )
156- . unwrap_or_else ( || {
144+ }
145+ Fields :: Unit => {
157146 quote ! { #name:: #variant_name => { } }
158- } )
159- } )
160- . collect :: < Vec < _ > > ( ) ;
161-
162- ( !variants. is_empty ( ) )
163- . then ( || {
164- quote ! {
165- match self {
166- #( #variants) *
147+ }
167148 }
149+ } else {
150+ quote ! { #name:: #variant_name => { } }
168151 }
169152 } )
170- . unwrap_or_default ( )
153+ . collect :: < Vec < _ > > ( ) ;
154+
155+ if !variants. is_empty ( ) {
156+ quote ! {
157+ match self {
158+ #( #variants) *
159+ }
160+ }
161+ } else {
162+ Default :: default ( )
163+ }
171164 }
172165 Data :: Union ( _) => {
173166 unimplemented ! ( )
0 commit comments