mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-14 11:41:01 +00:00
Eliminate additional allocations for flattening aliases
This commit is contained in:
+9
-10
@@ -2216,17 +2216,16 @@ fn deserialize_identifier(
|
|||||||
collect_other_fields: bool,
|
collect_other_fields: bool,
|
||||||
expecting: Option<&str>,
|
expecting: Option<&str>,
|
||||||
) -> Fragment {
|
) -> Fragment {
|
||||||
let mut flat_fields = Vec::new();
|
let str_mapping = fields.iter().map(|(_, ident, aliases)| {
|
||||||
for (_, ident, aliases) in fields {
|
// `aliases` also contains a main name
|
||||||
flat_fields.extend(aliases.iter().map(|alias| (alias, ident)));
|
quote!(#(#aliases)|* => _serde::__private::Ok(#this_value::#ident))
|
||||||
}
|
|
||||||
|
|
||||||
let str_mapping = flat_fields.iter().map(|(name, ident)| {
|
|
||||||
quote!(#name => _serde::__private::Ok(#this_value::#ident))
|
|
||||||
});
|
});
|
||||||
let bytes_mapping = flat_fields.iter().map(|(name, ident)| {
|
let bytes_mapping = fields.iter().map(|(_, ident, aliases)| {
|
||||||
let name = Literal::byte_string(name.as_bytes());
|
// `aliases` also contains a main name
|
||||||
quote!(#name => _serde::__private::Ok(#this_value::#ident))
|
let aliases = aliases
|
||||||
|
.iter()
|
||||||
|
.map(|alias| Literal::byte_string(alias.as_bytes()));
|
||||||
|
quote!(#(#aliases)|* => _serde::__private::Ok(#this_value::#ident))
|
||||||
});
|
});
|
||||||
|
|
||||||
let main_constructors: &Vec<_> = &fields
|
let main_constructors: &Vec<_> = &fields
|
||||||
|
|||||||
Reference in New Issue
Block a user