fix deserialization of untagged variants within internally or adjacently

tagged enums
This commit is contained in:
Adam H. Leventhal
2023-09-07 17:19:27 -07:00
parent 09993a904a
commit 8da2058e2a
2 changed files with 43 additions and 5 deletions
+37 -3
View File
@@ -2381,11 +2381,12 @@ fn test_partially_untagged_enum_desugared() {
}
#[test]
fn test_partially_untagged_simple_enum() {
fn test_partially_untagged_tagged_enum() {
#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[serde(tag = "t")]
enum Data {
A,
B,
#[serde(untagged)]
Var(u32),
}
@@ -2398,11 +2399,44 @@ fn test_partially_untagged_simple_enum() {
Token::Map { len: None },
Token::Str("t"),
Token::Str("A"),
Token::Str("b"),
Token::I32(0),
Token::MapEnd,
],
);
let data = Data::Var(42);
assert_de_tokens(&data, &[Token::U32(42)]);
// TODO test error output
#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[serde(tag = "t", content = "c")]
enum Data2 {
A(u32),
B,
#[serde(untagged)]
Var(u32),
}
let data = Data2::A(7);
assert_de_tokens(
&data,
&[
Token::Map { len: None },
Token::Str("t"),
Token::Str("A"),
Token::Str("c"),
Token::U32(7),
Token::MapEnd,
],
);
let data = Data2::Var(42);
assert_de_tokens(&data, &[Token::U32(42)]);
// TODO test error output
}
#[test]