Skip to content

Commit 458ec96

Browse files
committed
Added test for tag/content enum flattening
1 parent dbe640a commit 458ec96

File tree

1 file changed

+67
-6
lines changed

1 file changed

+67
-6
lines changed

test_suite/tests/test_annotations.rs

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,19 +106,33 @@ struct CollectOther {
106106

107107
#[derive(Debug, PartialEq, Serialize, Deserialize)]
108108
#[serde(repr = "map")]
109-
struct ChangeRequest {
109+
struct FlattenStructEnumWrapper {
110110
#[serde(flatten)]
111-
data: ChangeAction,
111+
data: FlattenStructEnum,
112112
#[serde(flatten)]
113113
extra: HashMap<String, String>,
114114
}
115115

116116
#[derive(Debug, PartialEq, Serialize, Deserialize)]
117117
#[serde(rename_all = "snake_case")]
118-
enum ChangeAction {
119-
AppendInteger {
118+
enum FlattenStructEnum {
119+
InsertInteger {
120+
index: u32,
120121
value: u32
121122
},
123+
}
124+
125+
#[derive(Debug, PartialEq, Serialize, Deserialize)]
126+
#[serde(repr = "map")]
127+
struct FlattenStructTagContentEnumWrapper {
128+
outer: u32,
129+
#[serde(flatten)]
130+
data: FlattenStructTagContentEnum,
131+
}
132+
133+
#[derive(Debug, PartialEq, Serialize, Deserialize)]
134+
#[serde(rename_all = "snake_case", tag = "type", content = "value")]
135+
enum FlattenStructTagContentEnum {
122136
InsertInteger {
123137
index: u32,
124138
value: u32
@@ -1335,8 +1349,8 @@ fn test_collect_other() {
13351349
fn test_flatten_struct_enum() {
13361350
let mut extra = HashMap::new();
13371351
extra.insert("extra_key".into(), "extra value".into());
1338-
let change_request = ChangeRequest {
1339-
data: ChangeAction::InsertInteger {
1352+
let change_request = FlattenStructEnumWrapper {
1353+
data: FlattenStructEnum::InsertInteger {
13401354
index: 0,
13411355
value: 42
13421356
},
@@ -1375,3 +1389,50 @@ fn test_flatten_struct_enum() {
13751389
],
13761390
);
13771391
}
1392+
1393+
#[test]
1394+
fn test_flatten_struct_tag_content_enum() {
1395+
let change_request = FlattenStructTagContentEnumWrapper {
1396+
outer: 42,
1397+
data: FlattenStructTagContentEnum::InsertInteger {
1398+
index: 0,
1399+
value: 42
1400+
},
1401+
};
1402+
assert_de_tokens(
1403+
&change_request,
1404+
&[
1405+
Token::Map { len: None },
1406+
Token::Str("outer"),
1407+
Token::U32(42),
1408+
Token::Str("type"),
1409+
Token::Str("insert_integer"),
1410+
Token::Str("value"),
1411+
Token::Map { len: None },
1412+
Token::Str("index"),
1413+
Token::U32(0),
1414+
Token::Str("value"),
1415+
Token::U32(42),
1416+
Token::MapEnd,
1417+
Token::MapEnd,
1418+
],
1419+
);
1420+
assert_ser_tokens(
1421+
&change_request,
1422+
&[
1423+
Token::Map { len: None },
1424+
Token::Str("outer"),
1425+
Token::U32(42),
1426+
Token::Str("type"),
1427+
Token::Str("insert_integer"),
1428+
Token::Str("value"),
1429+
Token::Struct { len: 2, name: "insert_integer" },
1430+
Token::Str("index"),
1431+
Token::U32(0),
1432+
Token::Str("value"),
1433+
Token::U32(42),
1434+
Token::StructEnd,
1435+
Token::MapEnd,
1436+
],
1437+
);
1438+
}

0 commit comments

Comments
 (0)