mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-25 16:17:55 +00:00
Merge pull request 1916 from Mingun/expecting-customize
This commit is contained in:
+19
-3
@@ -402,6 +402,7 @@ fn deserialize_unit_struct(params: &Parameters, cattrs: &attr::Container) -> Fra
|
||||
let type_name = cattrs.name().deserialize_name();
|
||||
|
||||
let expecting = format!("unit struct {}", params.type_name());
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
quote_block! {
|
||||
struct __Visitor;
|
||||
@@ -459,6 +460,7 @@ fn deserialize_tuple(
|
||||
Some(variant_ident) => format!("tuple variant {}::{}", params.type_name(), variant_ident),
|
||||
None => format!("tuple struct {}", params.type_name()),
|
||||
};
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let nfields = fields.len();
|
||||
|
||||
@@ -545,6 +547,7 @@ fn deserialize_tuple_in_place(
|
||||
Some(variant_ident) => format!("tuple variant {}::{}", params.type_name(), variant_ident),
|
||||
None => format!("tuple struct {}", params.type_name()),
|
||||
};
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let nfields = fields.len();
|
||||
|
||||
@@ -633,6 +636,7 @@ fn deserialize_seq(
|
||||
} else {
|
||||
format!("{} with {} elements", expecting, deserialized_count)
|
||||
};
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let mut index_in_seq = 0_usize;
|
||||
let let_values = vars.clone().zip(fields).map(|(var, field)| {
|
||||
@@ -735,6 +739,7 @@ fn deserialize_seq_in_place(
|
||||
} else {
|
||||
format!("{} with {} elements", expecting, deserialized_count)
|
||||
};
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let mut index_in_seq = 0usize;
|
||||
let write_values = fields.iter().map(|field| {
|
||||
@@ -910,6 +915,7 @@ fn deserialize_struct(
|
||||
Some(variant_ident) => format!("struct variant {}::{}", params.type_name(), variant_ident),
|
||||
None => format!("struct {}", params.type_name()),
|
||||
};
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let visit_seq = Stmts(deserialize_seq(
|
||||
&type_path, params, fields, true, cattrs, &expecting,
|
||||
@@ -1051,6 +1057,7 @@ fn deserialize_struct_in_place(
|
||||
Some(variant_ident) => format!("struct variant {}::{}", params.type_name(), variant_ident),
|
||||
None => format!("struct {}", params.type_name()),
|
||||
};
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let visit_seq = Stmts(deserialize_seq_in_place(params, fields, cattrs, &expecting));
|
||||
|
||||
@@ -1203,6 +1210,7 @@ fn deserialize_externally_tagged_enum(
|
||||
|
||||
let type_name = cattrs.name().deserialize_name();
|
||||
let expecting = format!("enum {}", params.type_name());
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
let (variants_stmt, variant_visitor) = prepare_enum_variant_enum(variants, cattrs);
|
||||
|
||||
@@ -1312,6 +1320,9 @@ fn deserialize_internally_tagged_enum(
|
||||
}
|
||||
});
|
||||
|
||||
let expecting = format!("internally tagged enum {}", params.type_name());
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
|
||||
quote_block! {
|
||||
#variant_visitor
|
||||
|
||||
@@ -1319,7 +1330,7 @@ fn deserialize_internally_tagged_enum(
|
||||
|
||||
let __tagged = try!(_serde::Deserializer::deserialize_any(
|
||||
__deserializer,
|
||||
_serde::__private::de::TaggedContentVisitor::<__Field>::new(#tag)));
|
||||
_serde::__private::de::TaggedContentVisitor::<__Field>::new(#tag, #expecting)));
|
||||
|
||||
match __tagged.tag {
|
||||
#(#variant_arms)*
|
||||
@@ -1362,6 +1373,7 @@ fn deserialize_adjacently_tagged_enum(
|
||||
.collect();
|
||||
|
||||
let expecting = format!("adjacently tagged enum {}", params.type_name());
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
let type_name = cattrs.name().deserialize_name();
|
||||
let deny_unknown_fields = cattrs.deny_unknown_fields();
|
||||
|
||||
@@ -1653,6 +1665,7 @@ fn deserialize_untagged_enum(
|
||||
"data did not match any variant of untagged enum {}",
|
||||
params.type_name()
|
||||
);
|
||||
let fallthrough_msg = cattrs.expecting().unwrap_or(&fallthrough_msg);
|
||||
|
||||
quote_block! {
|
||||
let __content = try!(<_serde::__private::de::Content as _serde::Deserialize>::deserialize(__deserializer));
|
||||
@@ -1916,6 +1929,7 @@ fn deserialize_generated_identifier(
|
||||
is_variant,
|
||||
fallthrough,
|
||||
!is_variant && cattrs.has_flatten(),
|
||||
None,
|
||||
));
|
||||
|
||||
let lifetime = if !is_variant && cattrs.has_flatten() {
|
||||
@@ -2029,6 +2043,7 @@ fn deserialize_custom_identifier(
|
||||
is_variant,
|
||||
fallthrough,
|
||||
false,
|
||||
cattrs.expecting(),
|
||||
));
|
||||
|
||||
quote_block! {
|
||||
@@ -2060,6 +2075,7 @@ fn deserialize_identifier(
|
||||
// .0 for referenced data, .1 -- for borrowed
|
||||
fallthrough: Option<(TokenStream, TokenStream)>,
|
||||
collect_other_fields: bool,
|
||||
expecting: Option<&str>,
|
||||
) -> Fragment {
|
||||
let mut flat_fields = Vec::new();
|
||||
for (_, ident, aliases) in fields {
|
||||
@@ -2081,11 +2097,11 @@ fn deserialize_identifier(
|
||||
.map(|(_, ident, _)| quote!(#this::#ident))
|
||||
.collect();
|
||||
|
||||
let expecting = if is_variant {
|
||||
let expecting = expecting.unwrap_or(if is_variant {
|
||||
"variant identifier"
|
||||
} else {
|
||||
"field identifier"
|
||||
};
|
||||
});
|
||||
|
||||
let index_expecting = if is_variant { "variant" } else { "field" };
|
||||
|
||||
|
||||
Reference in New Issue
Block a user