mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-12 19:01:02 +00:00
Added test for tag/content enum flattening
This commit is contained in:
@@ -106,19 +106,33 @@ struct CollectOther {
|
|||||||
|
|
||||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
#[serde(repr = "map")]
|
#[serde(repr = "map")]
|
||||||
struct ChangeRequest {
|
struct FlattenStructEnumWrapper {
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
data: ChangeAction,
|
data: FlattenStructEnum,
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
extra: HashMap<String, String>,
|
extra: HashMap<String, String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
enum ChangeAction {
|
enum FlattenStructEnum {
|
||||||
AppendInteger {
|
InsertInteger {
|
||||||
|
index: u32,
|
||||||
value: u32
|
value: u32
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(repr = "map")]
|
||||||
|
struct FlattenStructTagContentEnumWrapper {
|
||||||
|
outer: u32,
|
||||||
|
#[serde(flatten)]
|
||||||
|
data: FlattenStructTagContentEnum,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "snake_case", tag = "type", content = "value")]
|
||||||
|
enum FlattenStructTagContentEnum {
|
||||||
InsertInteger {
|
InsertInteger {
|
||||||
index: u32,
|
index: u32,
|
||||||
value: u32
|
value: u32
|
||||||
@@ -1335,8 +1349,8 @@ fn test_collect_other() {
|
|||||||
fn test_flatten_struct_enum() {
|
fn test_flatten_struct_enum() {
|
||||||
let mut extra = HashMap::new();
|
let mut extra = HashMap::new();
|
||||||
extra.insert("extra_key".into(), "extra value".into());
|
extra.insert("extra_key".into(), "extra value".into());
|
||||||
let change_request = ChangeRequest {
|
let change_request = FlattenStructEnumWrapper {
|
||||||
data: ChangeAction::InsertInteger {
|
data: FlattenStructEnum::InsertInteger {
|
||||||
index: 0,
|
index: 0,
|
||||||
value: 42
|
value: 42
|
||||||
},
|
},
|
||||||
@@ -1375,3 +1389,50 @@ fn test_flatten_struct_enum() {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_flatten_struct_tag_content_enum() {
|
||||||
|
let change_request = FlattenStructTagContentEnumWrapper {
|
||||||
|
outer: 42,
|
||||||
|
data: FlattenStructTagContentEnum::InsertInteger {
|
||||||
|
index: 0,
|
||||||
|
value: 42
|
||||||
|
},
|
||||||
|
};
|
||||||
|
assert_de_tokens(
|
||||||
|
&change_request,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::Str("type"),
|
||||||
|
Token::Str("insert_integer"),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::Map { len: None },
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::MapEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
assert_ser_tokens(
|
||||||
|
&change_request,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::Str("type"),
|
||||||
|
Token::Str("insert_integer"),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::Struct { len: 2, name: "insert_integer" },
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user