mirror of
https://github.com/serde-rs/serde.git
synced 2025-10-02 07:21:12 +00:00
Keep aliases sorted
This commit is contained in:
parent
27414c90a8
commit
bb51e68f16
@ -184,12 +184,20 @@ impl Name {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_aliases(&self) -> Vec<String> {
|
fn deserialize_aliases(&self) -> Vec<String> {
|
||||||
let mut aliases = self.deserialize_aliases.clone();
|
self.deserialize_aliases.clone()
|
||||||
let main_name = self.deserialize_name();
|
}
|
||||||
if !aliases.contains(&main_name) {
|
|
||||||
aliases.push(main_name);
|
fn correct_aliases(&mut self) {
|
||||||
|
// `deserialize_aliases` got from a BTreeSet, so it sorted and does not
|
||||||
|
// contain duplicates.
|
||||||
|
// We cannot insert main name in `new` because rename_all rules not yet
|
||||||
|
// applied there.
|
||||||
|
match self.deserialize_aliases.binary_search(&self.deserialize) {
|
||||||
|
Ok(_) => {} // element already here
|
||||||
|
Err(pos) => self
|
||||||
|
.deserialize_aliases
|
||||||
|
.insert(pos, self.deserialize.clone()),
|
||||||
}
|
}
|
||||||
aliases
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -928,6 +936,7 @@ impl Variant {
|
|||||||
if !self.name.deserialize_renamed {
|
if !self.name.deserialize_renamed {
|
||||||
self.name.deserialize = rules.deserialize.apply_to_variant(&self.name.deserialize);
|
self.name.deserialize = rules.deserialize.apply_to_variant(&self.name.deserialize);
|
||||||
}
|
}
|
||||||
|
self.name.correct_aliases();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rename_all_rules(&self) -> &RenameAllRules {
|
pub fn rename_all_rules(&self) -> &RenameAllRules {
|
||||||
@ -1267,6 +1276,7 @@ impl Field {
|
|||||||
if !self.name.deserialize_renamed {
|
if !self.name.deserialize_renamed {
|
||||||
self.name.deserialize = rules.deserialize.apply_to_field(&self.name.deserialize);
|
self.name.deserialize = rules.deserialize.apply_to_field(&self.name.deserialize);
|
||||||
}
|
}
|
||||||
|
self.name.correct_aliases();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn skip_serializing(&self) -> bool {
|
pub fn skip_serializing(&self) -> bool {
|
||||||
|
@ -643,7 +643,7 @@ fn test_unknown_field_rename_struct() {
|
|||||||
Token::Str("a4"),
|
Token::Str("a4"),
|
||||||
Token::I32(3),
|
Token::I32(3),
|
||||||
],
|
],
|
||||||
"unknown field `a4`, expected one of `a1`, `a3`, `a2`, `a5`, `a6`",
|
"unknown field `a4`, expected one of `a1`, `a2`, `a3`, `a5`, `a6`",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -837,7 +837,7 @@ fn test_unknown_field_rename_enum() {
|
|||||||
Token::Str("d"),
|
Token::Str("d"),
|
||||||
Token::I8(2),
|
Token::I8(2),
|
||||||
],
|
],
|
||||||
"unknown field `d`, expected one of `a`, `c`, `b`, `e`, `f`",
|
"unknown field `d`, expected one of `a`, `b`, `c`, `e`, `f`",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user