From 126d50e12679c3e134cc6163abbd12a50abcdce4 Mon Sep 17 00:00:00 2001 From: Mingun Date: Thu, 10 Aug 2023 19:25:16 +0500 Subject: [PATCH] Remove generation of unused components of tuple --- serde_derive/src/de.rs | 35 ++++++++++------------------------- 1 file changed, 10 insertions(+), 25 deletions(-) diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 80db51ba0..afeb9e10a 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -952,17 +952,9 @@ fn deserialize_struct( let field_names_idents: 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)| { - ( - field.attrs.name().deserialize_name(), - field_i(i), - field.attrs.aliases(), - ) - }) + .filter(|field| !field.attrs.skip_deserializing() && !field.attrs.flatten()) .collect(); let has_flatten = has_flatten(fields); @@ -1026,7 +1018,7 @@ fn deserialize_struct( } else { let field_names = field_names_idents .iter() - .flat_map(|&(_, _, aliases)| aliases); + .flat_map(|field| field.attrs.aliases()); Some(quote! { #[doc(hidden)] @@ -1120,15 +1112,7 @@ fn deserialize_struct_in_place( let field_names_idents: Vec<_> = fields .iter() - .enumerate() - .filter(|&(_, field)| !field.attrs.skip_deserializing()) - .map(|(i, field)| { - ( - field.attrs.name().deserialize_name(), - field_i(i), - field.attrs.aliases(), - ) - }) + .filter(|field| !field.attrs.skip_deserializing()) .collect(); let (consts, field, field_seed) = deserialize_field_identifier(&field_names_idents, cattrs, false); @@ -1144,7 +1128,7 @@ fn deserialize_struct_in_place( )); let field_names = field_names_idents .iter() - .flat_map(|&(_, _, aliases)| aliases); + .flat_map(|field| field.attrs.aliases()); let type_name = cattrs.name().deserialize_name(); let in_place_impl_generics = de_impl_generics.in_place(); @@ -2054,7 +2038,7 @@ fn deserialize_generated_identifier( /// Generates enum and its `Deserialize` implementation that represents each /// non-skipped field of the struct fn deserialize_field_identifier( - fields: &[(&str, Ident, &BTreeSet)], + fields: &[&Field], cattrs: &attr::Container, has_flatten: bool, ) -> (TokenStream, TokenStream, TokenStream) { @@ -2075,10 +2059,11 @@ fn deserialize_field_identifier( ) }; - // `aliases` also contains a main name - let aliases = fields - .iter() - .map(|(_, _, aliases)| quote!(&[ #(#aliases),* ])); + let aliases = fields.iter().map(|field| { + // `aliases` also contains a main name + let aliases = field.attrs.aliases(); + quote!(&[ #(#aliases),* ]) + }); let consts = quote! { #[doc(hidden)] const ALIASES: &[&[&str]] = &[ #(#aliases),* ];