mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 22:31:02 +00:00
Pull up call to deserialize_map because it's identical
This commit is contained in:
+8
-16
@@ -940,14 +940,13 @@ fn deserialize_struct(
|
|||||||
};
|
};
|
||||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||||
|
|
||||||
let (field_visitor, fields_stmt, visit_map) = if cattrs.has_flatten() {
|
let (field_visitor, fields_stmt) = if cattrs.has_flatten() {
|
||||||
deserialize_struct_as_map_visitor(&type_path, params, fields, cattrs)
|
deserialize_struct_as_map_visitor(fields, cattrs)
|
||||||
} else {
|
} 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 field_visitor = Stmts(field_visitor);
|
||||||
let fields_stmt = fields_stmt.map(Stmts);
|
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
|
// untagged struct variants do not get a visit_seq method. The same applies to
|
||||||
// structs that only have a map representation.
|
// structs that only have a map representation.
|
||||||
@@ -976,6 +975,7 @@ fn deserialize_struct(
|
|||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
};
|
};
|
||||||
|
let visit_map = Stmts(deserialize_map(&type_path, params, fields, cattrs));
|
||||||
|
|
||||||
let is_enum = variant_ident.is_some();
|
let is_enum = variant_ident.is_some();
|
||||||
let need_seed = deserializer.is_none();
|
let need_seed = deserializer.is_none();
|
||||||
@@ -2425,11 +2425,9 @@ fn deserialize_identifier(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_struct_as_struct_visitor(
|
fn deserialize_struct_as_struct_visitor(
|
||||||
struct_path: &TokenStream,
|
|
||||||
params: &Parameters,
|
|
||||||
fields: &[Field],
|
fields: &[Field],
|
||||||
cattrs: &attr::Container,
|
cattrs: &attr::Container,
|
||||||
) -> (Fragment, Option<Fragment>, Fragment) {
|
) -> (Fragment, Option<Fragment>) {
|
||||||
assert!(!cattrs.has_flatten());
|
assert!(!cattrs.has_flatten());
|
||||||
|
|
||||||
let field_names_idents: Vec<_> = fields
|
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 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))
|
||||||
|
|
||||||
(field_visitor, Some(fields_stmt), visit_map)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_struct_as_map_visitor(
|
fn deserialize_struct_as_map_visitor(
|
||||||
struct_path: &TokenStream,
|
|
||||||
params: &Parameters,
|
|
||||||
fields: &[Field],
|
fields: &[Field],
|
||||||
cattrs: &attr::Container,
|
cattrs: &attr::Container,
|
||||||
) -> (Fragment, Option<Fragment>, Fragment) {
|
) -> (Fragment, Option<Fragment>) {
|
||||||
let field_names_idents: Vec<_> = fields
|
let field_names_idents: Vec<_> = fields
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
@@ -2484,9 +2478,7 @@ fn deserialize_struct_as_map_visitor(
|
|||||||
|
|
||||||
let field_visitor = deserialize_generated_identifier(&field_names_idents, cattrs, false, None);
|
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)
|
||||||
|
|
||||||
(field_visitor, None, visit_map)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_map(
|
fn deserialize_map(
|
||||||
|
|||||||
Reference in New Issue
Block a user