mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 20:38:02 +00:00
Auto merge of #293 - dtolnay:duplicate, r=oli-obk
feat(codegen): Detect repeated struct field when deserializing Addresses #59. Let me know whether you think we need an escape hatch to opt out of this check.
This commit is contained in:
@@ -725,4 +725,32 @@ declare_error_tests! {
|
||||
],
|
||||
Error::UnexpectedToken(Token::SeqSep),
|
||||
}
|
||||
test_duplicate_field_struct<Struct> {
|
||||
vec![
|
||||
Token::MapStart(Some(3)),
|
||||
Token::MapSep,
|
||||
Token::Str("a"),
|
||||
Token::I32(1),
|
||||
|
||||
Token::MapSep,
|
||||
Token::Str("a"),
|
||||
Token::I32(3),
|
||||
Token::MapEnd,
|
||||
],
|
||||
Error::DuplicateFieldError("a"),
|
||||
}
|
||||
test_duplicate_field_enum<Enum> {
|
||||
vec![
|
||||
Token::EnumMapStart("Enum", "Map", Some(3)),
|
||||
Token::EnumMapSep,
|
||||
Token::Str("a"),
|
||||
Token::I32(1),
|
||||
|
||||
Token::EnumMapSep,
|
||||
Token::Str("a"),
|
||||
Token::I32(3),
|
||||
Token::EnumMapEnd,
|
||||
],
|
||||
Error::DuplicateFieldError("a"),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,6 +410,7 @@ pub enum Error {
|
||||
UnknownFieldError(String),
|
||||
UnknownVariantError(String),
|
||||
MissingFieldError(&'static str),
|
||||
DuplicateFieldError(&'static str),
|
||||
InvalidName(&'static str),
|
||||
InvalidValue(String),
|
||||
UnexpectedToken(Token<'static>),
|
||||
@@ -429,6 +430,10 @@ impl de::Error for Error {
|
||||
|
||||
fn end_of_stream() -> Error { Error::EndOfStreamError }
|
||||
|
||||
fn invalid_value(msg: &str) -> Error {
|
||||
Error::InvalidValue(msg.to_owned())
|
||||
}
|
||||
|
||||
fn unknown_field(field: &str) -> Error {
|
||||
Error::UnknownFieldError(field.to_owned())
|
||||
}
|
||||
@@ -440,6 +445,10 @@ impl de::Error for Error {
|
||||
fn missing_field(field: &'static str) -> Error {
|
||||
Error::MissingFieldError(field)
|
||||
}
|
||||
|
||||
fn duplicate_field(field: &'static str) -> Error {
|
||||
Error::DuplicateFieldError(field)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Error {
|
||||
|
||||
Reference in New Issue
Block a user