mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-14 11:41:01 +00:00
Support field ident deserialization from u32
This commit is contained in:
+20
-19
@@ -1384,26 +1384,27 @@ fn deserialize_identifier(
|
|||||||
"field identifier"
|
"field identifier"
|
||||||
};
|
};
|
||||||
|
|
||||||
let visit_index = if is_variant {
|
let index_expecting = if is_variant {
|
||||||
let variant_indices = 0u32..;
|
"variant"
|
||||||
let fallthrough_msg = format!("variant index 0 <= i < {}", fields.len());
|
|
||||||
let visit_index = quote! {
|
|
||||||
fn visit_u32<__E>(self, __value: u32) -> _serde::export::Result<Self::Value, __E>
|
|
||||||
where __E: _serde::de::Error
|
|
||||||
{
|
|
||||||
match __value {
|
|
||||||
#(
|
|
||||||
#variant_indices => _serde::export::Ok(#constructors),
|
|
||||||
)*
|
|
||||||
_ => _serde::export::Err(_serde::de::Error::invalid_value(
|
|
||||||
_serde::de::Unexpected::Unsigned(__value as u64),
|
|
||||||
&#fallthrough_msg))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
Some(visit_index)
|
|
||||||
} else {
|
} else {
|
||||||
None
|
"field"
|
||||||
|
};
|
||||||
|
|
||||||
|
let variant_indices = 0u32..;
|
||||||
|
let fallthrough_msg = format!("{} index 0 <= i < {}", index_expecting, fields.len());
|
||||||
|
let visit_index = quote! {
|
||||||
|
fn visit_u32<__E>(self, __value: u32) -> _serde::export::Result<Self::Value, __E>
|
||||||
|
where __E: _serde::de::Error
|
||||||
|
{
|
||||||
|
match __value {
|
||||||
|
#(
|
||||||
|
#variant_indices => _serde::export::Ok(#constructors),
|
||||||
|
)*
|
||||||
|
_ => _serde::export::Err(_serde::de::Error::invalid_value(
|
||||||
|
_serde::de::Unexpected::Unsigned(__value as u64),
|
||||||
|
&#fallthrough_msg))
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let bytes_to_str = if fallthrough.is_some() {
|
let bytes_to_str = if fallthrough.is_some() {
|
||||||
|
|||||||
@@ -521,6 +521,15 @@ declare_tests! {
|
|||||||
Token::I32(2),
|
Token::I32(2),
|
||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
|
Struct { a: 1, b: 2, c: 0 } => &[
|
||||||
|
Token::Map { len: Some(3) },
|
||||||
|
Token::U32(0),
|
||||||
|
Token::I32(1),
|
||||||
|
|
||||||
|
Token::U32(1),
|
||||||
|
Token::I32(2),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
Struct { a: 1, b: 2, c: 0 } => &[
|
Struct { a: 1, b: 2, c: 0 } => &[
|
||||||
Token::Struct { name: "Struct", len: 3 },
|
Token::Struct { name: "Struct", len: 3 },
|
||||||
Token::Str("a"),
|
Token::Str("a"),
|
||||||
|
|||||||
Reference in New Issue
Block a user