From 2796833c82638ee1e121fc0ba596bac5ef98ac70 Mon Sep 17 00:00:00 2001
From: Mingun <Alexander_Sergey@mail.ru>
Date: Thu, 1 Oct 2020 13:29:39 +0500
Subject: [PATCH] Pull up call to `deserialize_map` because it's identical

---
 serde_derive/src/de.rs | 24 ++++++++----------------
 1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs
index b7f82b28..ef129821 100644
--- a/serde_derive/src/de.rs
+++ b/serde_derive/src/de.rs
@@ -940,14 +940,13 @@ fn deserialize_struct(
     };
     let expecting = cattrs.expecting().unwrap_or(&expecting);
 
-    let (field_visitor, fields_stmt, visit_map) = if cattrs.has_flatten() {
-        deserialize_struct_as_map_visitor(&type_path, params, fields, cattrs)
+    let (field_visitor, fields_stmt) = if cattrs.has_flatten() {
+        deserialize_struct_as_map_visitor(fields, cattrs)
     } else {
-        deserialize_struct_as_struct_visitor(&type_path, params, fields, cattrs)
+        deserialize_struct_as_struct_visitor(fields, cattrs)
     };
     let field_visitor = Stmts(field_visitor);
     let fields_stmt = fields_stmt.map(Stmts);
-    let visit_map = Stmts(visit_map);
 
     // untagged struct variants do not get a visit_seq method. The same applies to
     // structs that only have a map representation.
@@ -976,6 +975,7 @@ fn deserialize_struct(
         }
         _ => None,
     };
+    let visit_map = Stmts(deserialize_map(&type_path, params, fields, cattrs));
 
     let is_enum = variant_ident.is_some();
     let need_seed = deserializer.is_none();
@@ -2425,11 +2425,9 @@ fn deserialize_identifier(
 }
 
 fn deserialize_struct_as_struct_visitor(
-    struct_path: &TokenStream,
-    params: &Parameters,
     fields: &[Field],
     cattrs: &attr::Container,
-) -> (Fragment, Option<Fragment>, Fragment) {
+) -> (Fragment, Option<Fragment>) {
     assert!(!cattrs.has_flatten());
 
     let field_names_idents: Vec<_> = fields
@@ -2458,17 +2456,13 @@ fn deserialize_struct_as_struct_visitor(
 
     let field_visitor = deserialize_generated_identifier(&field_names_idents, cattrs, false, None);
 
-    let visit_map = deserialize_map(struct_path, params, fields, cattrs);
-
-    (field_visitor, Some(fields_stmt), visit_map)
+    (field_visitor, Some(fields_stmt))
 }
 
 fn deserialize_struct_as_map_visitor(
-    struct_path: &TokenStream,
-    params: &Parameters,
     fields: &[Field],
     cattrs: &attr::Container,
-) -> (Fragment, Option<Fragment>, Fragment) {
+) -> (Fragment, Option<Fragment>) {
     let field_names_idents: Vec<_> = fields
         .iter()
         .enumerate()
@@ -2484,9 +2478,7 @@ fn deserialize_struct_as_map_visitor(
 
     let field_visitor = deserialize_generated_identifier(&field_names_idents, cattrs, false, None);
 
-    let visit_map = deserialize_map(struct_path, params, fields, cattrs);
-
-    (field_visitor, None, visit_map)
+    (field_visitor, None)
 }
 
 fn deserialize_map(