@@ -106,19 +106,33 @@ struct CollectOther {
106
106
107
107
#[ derive( Debug , PartialEq , Serialize , Deserialize ) ]
108
108
#[ serde( repr = "map" ) ]
109
- struct ChangeRequest {
109
+ struct FlattenStructEnumWrapper {
110
110
#[ serde( flatten) ]
111
- data : ChangeAction ,
111
+ data : FlattenStructEnum ,
112
112
#[ serde( flatten) ]
113
113
extra : HashMap < String , String > ,
114
114
}
115
115
116
116
#[ derive( Debug , PartialEq , Serialize , Deserialize ) ]
117
117
#[ serde( rename_all = "snake_case" ) ]
118
- enum ChangeAction {
119
- AppendInteger {
118
+ enum FlattenStructEnum {
119
+ InsertInteger {
120
+ index : u32 ,
120
121
value : u32
121
122
} ,
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 {
122
136
InsertInteger {
123
137
index : u32 ,
124
138
value : u32
@@ -1335,8 +1349,8 @@ fn test_collect_other() {
1335
1349
fn test_flatten_struct_enum ( ) {
1336
1350
let mut extra = HashMap :: new ( ) ;
1337
1351
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 {
1340
1354
index : 0 ,
1341
1355
value : 42
1342
1356
} ,
@@ -1375,3 +1389,50 @@ fn test_flatten_struct_enum() {
1375
1389
] ,
1376
1390
) ;
1377
1391
}
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