diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 6b0908831..5f8bd82d5 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -969,14 +969,9 @@ fn deserialize_struct( let deserialized_fields: Vec<_> = fields .iter() - .enumerate() // Skip fields that shouldn't be deserialized or that were flattened, // so they don't appear in the storage in their literal form - .filter(|&(_, field)| !field.attrs.skip_deserializing() && !field.attrs.flatten()) - .map(|(i, field)| FieldWithAliases { - ident: field_i(i), - aliases: field.attrs.aliases(), - }) + .filter(|field| !field.attrs.skip_deserializing() && !field.attrs.flatten()) .collect(); let has_flatten = has_flatten(fields); @@ -1039,7 +1034,9 @@ fn deserialize_struct( let fields_stmt = if has_flatten { None } else { - let field_names = deserialized_fields.iter().flat_map(|field| field.aliases); + let field_names = deserialized_fields + .iter() + .flat_map(|field| field.attrs.aliases()); Some(quote! { #[doc(hidden)] @@ -1133,12 +1130,7 @@ fn deserialize_struct_in_place( let deserialized_fields: Vec<_> = fields .iter() - .enumerate() - .filter(|&(_, field)| !field.attrs.skip_deserializing()) - .map(|(i, field)| FieldWithAliases { - ident: field_i(i), - aliases: field.attrs.aliases(), - }) + .filter(|field| !field.attrs.skip_deserializing()) .collect(); let (consts, field, field_seed) = @@ -1153,7 +1145,9 @@ fn deserialize_struct_in_place( let visit_map = Stmts(deserialize_map_in_place( params, fields, cattrs, field, field_seed, )); - let field_names = deserialized_fields.iter().flat_map(|field| field.aliases); + let field_names = deserialized_fields + .iter() + .flat_map(|field| field.attrs.aliases()); let type_name = cattrs.name().deserialize_name(); let in_place_impl_generics = de_impl_generics.in_place(); @@ -2070,7 +2064,7 @@ fn deserialize_generated_identifier( /// Generates enum and its `Deserialize` implementation that represents each /// non-skipped field of the struct fn deserialize_field_identifier( - deserialized_fields: &[FieldWithAliases], + deserialized_fields: &[&Field], cattrs: &attr::Container, has_flatten: bool, ) -> (TokenStream, TokenStream, TokenStream) { @@ -2091,9 +2085,9 @@ fn deserialize_field_identifier( ) }; - // `aliases` also contains a main name let aliases = deserialized_fields.iter().map(|field| { - let aliases = field.aliases; + // `aliases` also contains a main name + let aliases = field.attrs.aliases(); quote!(&[ #(#aliases),* ]) }); let consts = quote! {