mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-13 09:01:01 +00:00
Omit missing content match if not needed
This commit is contained in:
+15
-11
@@ -1377,8 +1377,11 @@ fn deserialize_adjacently_tagged_enum(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let mut missing_content = quote! {
|
||||||
|
_serde::export::Err(<__A::Error as _serde::de::Error>::missing_field(#content))
|
||||||
|
};
|
||||||
let mut missing_content_fallthrough = quote!();
|
let mut missing_content_fallthrough = quote!();
|
||||||
let missing_content_arms = variants
|
let mut missing_content_arms = variants
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|&(_, variant)| !variant.attrs.skip_deserializing())
|
.filter(|&(_, variant)| !variant.attrs.skip_deserializing())
|
||||||
@@ -1398,22 +1401,23 @@ fn deserialize_adjacently_tagged_enum(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
missing_content_fallthrough = quote! {
|
missing_content_fallthrough = quote!(_ => #missing_content);
|
||||||
_ => _serde::export::Err(<__A::Error as _serde::de::Error>::missing_field(#content))
|
|
||||||
};
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
__Field::#variant_index => #arm,
|
__Field::#variant_index => #arm,
|
||||||
})
|
})
|
||||||
});
|
})
|
||||||
let missing_content = quote! {
|
.peekable();
|
||||||
match __field {
|
if missing_content_arms.peek().is_some() {
|
||||||
#(#missing_content_arms)*
|
missing_content = quote! {
|
||||||
#missing_content_fallthrough
|
match __field {
|
||||||
}
|
#(#missing_content_arms)*
|
||||||
};
|
#missing_content_fallthrough
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Advance the map by one key, returning early in case of error.
|
// Advance the map by one key, returning early in case of error.
|
||||||
let next_key = quote! {
|
let next_key = quote! {
|
||||||
|
|||||||
Reference in New Issue
Block a user