@@ -31,20 +31,19 @@ pub(super) fn deserialize(
3131
3232 let ( variants_stmt, variant_visitor) = enum_:: prepare_enum_variant_enum ( variants) ;
3333
34- let variant_arms: & Vec < _ > = & variants
35- . iter ( )
36- . enumerate ( )
37- . filter ( | & ( _ , variant ) | !variant . attrs . skip_deserializing ( ) )
38- . map ( | ( i , variant ) | {
39- let variant_index = field_i ( i) ;
34+ let mut variant_arms = Vec :: new ( ) ;
35+ for ( i , variant ) in variants . iter ( ) . enumerate ( ) {
36+ if variant . attrs . skip_deserializing ( ) {
37+ continue ;
38+ }
39+ let variant_index = field_i ( i) ;
4040
41- let block = Match ( enum_untagged:: deserialize_variant ( params, variant, cattrs) ) ;
41+ let block = Match ( enum_untagged:: deserialize_variant ( params, variant, cattrs) ) ;
4242
43- quote ! {
44- __Field:: #variant_index => #block
45- }
46- } )
47- . collect ( ) ;
43+ variant_arms. push ( quote ! {
44+ __Field:: #variant_index => #block
45+ } ) ;
46+ }
4847
4948 let rust_name = params. type_name ( ) ;
5049 let expecting = format ! ( "adjacently tagged enum {}" , rust_name) ;
@@ -64,35 +63,35 @@ pub(super) fn deserialize(
6463 _serde:: #private:: Err ( <__A:: Error as _serde:: de:: Error >:: missing_field( #content) )
6564 } ;
6665 let mut missing_content_fallthrough = quote ! ( ) ;
67- let missing_content_arms = variants
68- . iter ( )
69- . enumerate ( )
70- . filter ( | & ( _ , variant ) | !variant . attrs . skip_deserializing ( ) )
71- . filter_map ( | ( i , variant ) | {
72- let variant_index = field_i ( i) ;
73- let variant_ident = & variant. ident ;
66+ let mut missing_content_arms = Vec :: new ( ) ;
67+ for ( i , variant ) in variants . iter ( ) . enumerate ( ) {
68+ if variant . attrs . skip_deserializing ( ) {
69+ continue ;
70+ }
71+ let variant_index = field_i ( i) ;
72+ let variant_ident = & variant. ident ;
7473
75- let arm = match variant. style {
76- Style :: Unit => quote ! {
77- _serde:: #private:: Ok ( #this_value:: #variant_ident)
78- } ,
79- Style :: Newtype if variant. attrs . deserialize_with ( ) . is_none ( ) => {
80- let span = variant. original . span ( ) ;
81- let func = quote_spanned ! ( span=> _serde:: #private:: de:: missing_field) ;
82- quote ! {
83- #func( #content) . map( #this_value:: #variant_ident)
84- }
85- }
86- _ => {
87- missing_content_fallthrough = quote ! ( _ => #missing_content) ;
88- return None ;
74+ let arm = match variant. style {
75+ Style :: Unit => quote ! {
76+ _serde:: #private:: Ok ( #this_value:: #variant_ident)
77+ } ,
78+ Style :: Newtype if variant. attrs . deserialize_with ( ) . is_none ( ) => {
79+ let span = variant. original . span ( ) ;
80+ let func = quote_spanned ! ( span=> _serde:: #private:: de:: missing_field) ;
81+ quote ! {
82+ #func( #content) . map( #this_value:: #variant_ident)
8983 }
90- } ;
91- Some ( quote ! {
92- __Field:: #variant_index => #arm,
93- } )
94- } )
95- . collect :: < Vec < _ > > ( ) ;
84+ }
85+ _ => {
86+ missing_content_fallthrough = quote ! ( _ => #missing_content) ;
87+ continue ;
88+ }
89+ } ;
90+ missing_content_arms. push ( quote ! {
91+ __Field:: #variant_index => #arm,
92+ } ) ;
93+ }
94+
9695 if !missing_content_arms. is_empty ( ) {
9796 missing_content = quote ! {
9897 match __field {
0 commit comments