From bbbd1d24c96b8d142c1f3bf54109a6ee984a84a0 Mon Sep 17 00:00:00 2001 From: Mingun Date: Mon, 1 May 2023 01:49:11 +0500 Subject: [PATCH] Move `deserialize_generated_identifier` out from if because the call is same in both arms --- serde_derive/src/de.rs | 41 +++++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 8067f5d7..59d0c4d8 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -954,28 +954,12 @@ fn deserialize_struct( ) }) .collect(); - let (field_visitor, fields_stmt) = if cattrs.has_flatten() { - let field_visitor = deserialize_generated_identifier(&field_names_idents, cattrs, false, None); - - (field_visitor, None) - } else { - let fields_stmt = { - let field_names = field_names_idents - .iter() - .flat_map(|(_, _, aliases)| aliases); - - quote_block! { - #[doc(hidden)] - const FIELDS: &'static [&'static str] = &[ #(#field_names),* ]; - } - }; - - let field_visitor = deserialize_generated_identifier(&field_names_idents, cattrs, false, None); - - (field_visitor, Some(fields_stmt)) - }; - let field_visitor = Stmts(field_visitor); - let fields_stmt = fields_stmt.map(Stmts); + let field_visitor = Stmts(deserialize_generated_identifier( + &field_names_idents, + cattrs, + false, + None, + )); // untagged struct variants do not get a visit_seq method. The same applies to // structs that only have a map representation. @@ -1024,6 +1008,19 @@ fn deserialize_struct( None }; + let fields_stmt = if cattrs.has_flatten() { + None + } else { + let field_names = field_names_idents + .iter() + .flat_map(|(_, _, aliases)| aliases); + + Some(quote! { + #[doc(hidden)] + const FIELDS: &'static [&'static str] = &[ #(#field_names),* ]; + }) + }; + let visitor_expr = quote! { __Visitor { marker: _serde::__private::PhantomData::<#this_type #ty_generics>,