mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-23 03:38:00 +00:00
Added support for struct variant enum serialization
This commit is contained in:
@@ -96,7 +96,7 @@ where
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(repr="map")]
|
||||
#[serde(repr = "map")]
|
||||
struct CollectOther {
|
||||
a: u32,
|
||||
b: u32,
|
||||
@@ -104,6 +104,27 @@ struct CollectOther {
|
||||
extra: HashMap<String, u32>,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(repr = "map")]
|
||||
struct ChangeRequest {
|
||||
#[serde(flatten)]
|
||||
data: ChangeAction,
|
||||
#[serde(flatten)]
|
||||
extra: HashMap<String, String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
enum ChangeAction {
|
||||
AppendInteger {
|
||||
value: u32
|
||||
},
|
||||
InsertInteger {
|
||||
index: u32,
|
||||
value: u32
|
||||
},
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_default_struct() {
|
||||
assert_de_tokens(
|
||||
@@ -1309,3 +1330,48 @@ fn test_collect_other() {
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_flatten_struct_enum() {
|
||||
let mut extra = HashMap::new();
|
||||
extra.insert("extra_key".into(), "extra value".into());
|
||||
let change_request = ChangeRequest {
|
||||
data: ChangeAction::InsertInteger {
|
||||
index: 0,
|
||||
value: 42
|
||||
},
|
||||
extra: extra,
|
||||
};
|
||||
assert_de_tokens(
|
||||
&change_request,
|
||||
&[
|
||||
Token::Map { len: None },
|
||||
Token::Str("insert_integer"),
|
||||
Token::Map { len: None },
|
||||
Token::Str("index"),
|
||||
Token::U32(0),
|
||||
Token::Str("value"),
|
||||
Token::U32(42),
|
||||
Token::MapEnd,
|
||||
Token::Str("extra_key"),
|
||||
Token::String("extra value".into()),
|
||||
Token::MapEnd
|
||||
],
|
||||
);
|
||||
assert_ser_tokens(
|
||||
&change_request,
|
||||
&[
|
||||
Token::Map { len: None },
|
||||
Token::Str("insert_integer"),
|
||||
Token::Struct { len: 2, name: "insert_integer" },
|
||||
Token::Str("index"),
|
||||
Token::U32(0),
|
||||
Token::Str("value"),
|
||||
Token::U32(42),
|
||||
Token::StructEnd,
|
||||
Token::Str("extra_key"),
|
||||
Token::String("extra value".into()),
|
||||
Token::MapEnd
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user