mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 04:28:00 +00:00
Fix roundtrip inconsistency:
- deserialization of flatten unit variant is possible
- serialization of such variant gives Err("can only flatten structs and maps (got an enum)")
This commit is contained in:
@@ -2655,11 +2655,46 @@ mod flatten {
|
||||
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
enum Enum {
|
||||
Unit,
|
||||
Newtype(HashMap<String, String>),
|
||||
Tuple(u32, u32),
|
||||
Struct { index: u32, value: u32 },
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unit() {
|
||||
let value = Flatten {
|
||||
data: Enum::Unit,
|
||||
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
||||
};
|
||||
assert_tokens(
|
||||
&value,
|
||||
&[
|
||||
Token::Map { len: None },
|
||||
// data
|
||||
Token::Str("Unit"), // variant
|
||||
Token::Unit,
|
||||
// extra
|
||||
Token::Str("extra_key"),
|
||||
Token::Str("extra value"),
|
||||
Token::MapEnd,
|
||||
],
|
||||
);
|
||||
assert_de_tokens(
|
||||
&value,
|
||||
&[
|
||||
Token::Map { len: None },
|
||||
// extra
|
||||
Token::Str("extra_key"),
|
||||
Token::Str("extra value"),
|
||||
// data
|
||||
Token::Str("Unit"), // variant
|
||||
Token::Unit,
|
||||
Token::MapEnd,
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn newtype() {
|
||||
assert_tokens(
|
||||
|
||||
Reference in New Issue
Block a user