mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-11 19:41:04 +00:00
Test all possible orders of map entries for enum-flatten-in-struct representations
This commit is contained in:
@@ -2697,23 +2697,42 @@ mod flatten {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn newtype() {
|
fn newtype() {
|
||||||
|
let value = Flatten {
|
||||||
|
data: Enum::Newtype(HashMap::from_iter([("key".into(), "value".into())])),
|
||||||
|
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
||||||
|
};
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&Flatten {
|
&value,
|
||||||
data: Enum::Newtype(HashMap::from_iter([("key".into(), "value".into())])),
|
|
||||||
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
|
||||||
},
|
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// data
|
||||||
Token::Str("Newtype"), // variant
|
Token::Str("Newtype"), // variant
|
||||||
Token::Map { len: Some(1) },
|
Token::Map { len: Some(1) },
|
||||||
Token::Str("key"),
|
Token::Str("key"),
|
||||||
Token::Str("value"),
|
Token::Str("value"),
|
||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
|
// extra
|
||||||
Token::Str("extra_key"),
|
Token::Str("extra_key"),
|
||||||
Token::Str("extra value"),
|
Token::Str("extra value"),
|
||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// extra
|
||||||
|
Token::Str("extra_key"),
|
||||||
|
Token::Str("extra value"),
|
||||||
|
// data
|
||||||
|
Token::Str("Newtype"), // variant
|
||||||
|
Token::Map { len: Some(1) },
|
||||||
|
Token::Str("key"),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::MapEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reaches crate::private::de::content::VariantDeserializer::tuple_variant
|
// Reaches crate::private::de::content::VariantDeserializer::tuple_variant
|
||||||
@@ -2721,23 +2740,42 @@ mod flatten {
|
|||||||
// via FlatMapDeserializer::deserialize_enum
|
// via FlatMapDeserializer::deserialize_enum
|
||||||
#[test]
|
#[test]
|
||||||
fn tuple() {
|
fn tuple() {
|
||||||
|
let value = Flatten {
|
||||||
|
data: Enum::Tuple(0, 42),
|
||||||
|
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
||||||
|
};
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&Flatten {
|
&value,
|
||||||
data: Enum::Tuple(0, 42),
|
|
||||||
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
|
||||||
},
|
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// data
|
||||||
Token::Str("Tuple"), // variant
|
Token::Str("Tuple"), // variant
|
||||||
Token::Seq { len: Some(2) },
|
Token::Seq { len: Some(2) },
|
||||||
Token::U32(0),
|
Token::U32(0),
|
||||||
Token::U32(42),
|
Token::U32(42),
|
||||||
Token::SeqEnd,
|
Token::SeqEnd,
|
||||||
|
// extra
|
||||||
Token::Str("extra_key"),
|
Token::Str("extra_key"),
|
||||||
Token::Str("extra value"),
|
Token::Str("extra value"),
|
||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// extra
|
||||||
|
Token::Str("extra_key"),
|
||||||
|
Token::Str("extra value"),
|
||||||
|
// data
|
||||||
|
Token::Str("Tuple"), // variant
|
||||||
|
Token::Seq { len: Some(2) },
|
||||||
|
Token::U32(0),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::SeqEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
|
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
|
||||||
@@ -2745,26 +2783,45 @@ mod flatten {
|
|||||||
// via FlatMapDeserializer::deserialize_enum
|
// via FlatMapDeserializer::deserialize_enum
|
||||||
#[test]
|
#[test]
|
||||||
fn struct_from_seq() {
|
fn struct_from_seq() {
|
||||||
assert_de_tokens(
|
let value = Flatten {
|
||||||
&Flatten {
|
data: Enum::Struct {
|
||||||
data: Enum::Struct {
|
index: 0,
|
||||||
index: 0,
|
value: 42,
|
||||||
value: 42,
|
|
||||||
},
|
|
||||||
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
|
||||||
},
|
},
|
||||||
|
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
||||||
|
};
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// data
|
||||||
Token::Str("Struct"), // variant
|
Token::Str("Struct"), // variant
|
||||||
Token::Seq { len: Some(2) },
|
Token::Seq { len: Some(2) },
|
||||||
Token::U32(0), // index
|
Token::U32(0), // index
|
||||||
Token::U32(42), // value
|
Token::U32(42), // value
|
||||||
Token::SeqEnd,
|
Token::SeqEnd,
|
||||||
|
// extra
|
||||||
Token::Str("extra_key"),
|
Token::Str("extra_key"),
|
||||||
Token::Str("extra value"),
|
Token::Str("extra value"),
|
||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// extra
|
||||||
|
Token::Str("extra_key"),
|
||||||
|
Token::Str("extra value"),
|
||||||
|
// data
|
||||||
|
Token::Str("Struct"), // variant
|
||||||
|
Token::Seq { len: Some(2) },
|
||||||
|
Token::U32(0), // index
|
||||||
|
Token::U32(42), // value
|
||||||
|
Token::SeqEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
|
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
|
||||||
@@ -2772,16 +2829,18 @@ mod flatten {
|
|||||||
// via FlatMapDeserializer::deserialize_enum
|
// via FlatMapDeserializer::deserialize_enum
|
||||||
#[test]
|
#[test]
|
||||||
fn struct_from_map() {
|
fn struct_from_map() {
|
||||||
assert_tokens(
|
let value = Flatten {
|
||||||
&Flatten {
|
data: Enum::Struct {
|
||||||
data: Enum::Struct {
|
index: 0,
|
||||||
index: 0,
|
value: 42,
|
||||||
value: 42,
|
|
||||||
},
|
|
||||||
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
|
||||||
},
|
},
|
||||||
|
extra: HashMap::from_iter([("extra_key".into(), "extra value".into())]),
|
||||||
|
};
|
||||||
|
assert_tokens(
|
||||||
|
&value,
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// data
|
||||||
Token::Str("Struct"), // variant
|
Token::Str("Struct"), // variant
|
||||||
Token::Struct {
|
Token::Struct {
|
||||||
len: 2,
|
len: 2,
|
||||||
@@ -2792,11 +2851,33 @@ mod flatten {
|
|||||||
Token::Str("value"),
|
Token::Str("value"),
|
||||||
Token::U32(42),
|
Token::U32(42),
|
||||||
Token::StructEnd,
|
Token::StructEnd,
|
||||||
|
// extra
|
||||||
Token::Str("extra_key"),
|
Token::Str("extra_key"),
|
||||||
Token::Str("extra value"),
|
Token::Str("extra value"),
|
||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// extra
|
||||||
|
Token::Str("extra_key"),
|
||||||
|
Token::Str("extra value"),
|
||||||
|
// data
|
||||||
|
Token::Str("Struct"), // variant
|
||||||
|
Token::Struct {
|
||||||
|
len: 2,
|
||||||
|
name: "Struct",
|
||||||
|
},
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2828,20 +2909,25 @@ mod flatten {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn newtype() {
|
fn newtype() {
|
||||||
|
let value = Flatten {
|
||||||
|
outer: 42,
|
||||||
|
data: NewtypeWrapper(Enum::Newtype(NewtypeVariant { value: 23 })),
|
||||||
|
};
|
||||||
|
// Field order: outer, [tag, content]
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&Flatten {
|
&value,
|
||||||
outer: 42,
|
|
||||||
data: NewtypeWrapper(Enum::Newtype(NewtypeVariant { value: 23 })),
|
|
||||||
},
|
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// outer
|
||||||
Token::Str("outer"),
|
Token::Str("outer"),
|
||||||
Token::U32(42),
|
Token::U32(42),
|
||||||
|
// tag
|
||||||
Token::Str("tag"),
|
Token::Str("tag"),
|
||||||
Token::UnitVariant {
|
Token::UnitVariant {
|
||||||
name: "Enum",
|
name: "Enum",
|
||||||
variant: "Newtype",
|
variant: "Newtype",
|
||||||
},
|
},
|
||||||
|
// content
|
||||||
Token::Str("content"),
|
Token::Str("content"),
|
||||||
Token::Struct {
|
Token::Struct {
|
||||||
len: 1,
|
len: 1,
|
||||||
@@ -2853,27 +2939,162 @@ mod flatten {
|
|||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
// Field order: outer, [content, tag]
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 1,
|
||||||
|
name: "NewtypeVariant",
|
||||||
|
},
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(23),
|
||||||
|
Token::StructEnd,
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Newtype",
|
||||||
|
},
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [tag, content], outer
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Newtype",
|
||||||
|
},
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 1,
|
||||||
|
name: "NewtypeVariant",
|
||||||
|
},
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(23),
|
||||||
|
Token::StructEnd,
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [content, tag], outer
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 1,
|
||||||
|
name: "NewtypeVariant",
|
||||||
|
},
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(23),
|
||||||
|
Token::StructEnd,
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Newtype",
|
||||||
|
},
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [tag], outer, [content]
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Newtype",
|
||||||
|
},
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 1,
|
||||||
|
name: "NewtypeVariant",
|
||||||
|
},
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(23),
|
||||||
|
Token::StructEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [content], outer, [tag]
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 1,
|
||||||
|
name: "NewtypeVariant",
|
||||||
|
},
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(23),
|
||||||
|
Token::StructEnd,
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Newtype",
|
||||||
|
},
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn struct_() {
|
fn struct_() {
|
||||||
|
let value = Flatten {
|
||||||
|
outer: 42,
|
||||||
|
data: NewtypeWrapper(Enum::Struct {
|
||||||
|
index: 0,
|
||||||
|
value: 42,
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
// Field order: outer, [tag, content]
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&Flatten {
|
&value,
|
||||||
outer: 42,
|
|
||||||
data: NewtypeWrapper(Enum::Struct {
|
|
||||||
index: 0,
|
|
||||||
value: 42,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// outer
|
||||||
Token::Str("outer"),
|
Token::Str("outer"),
|
||||||
Token::U32(42),
|
Token::U32(42),
|
||||||
|
// tag
|
||||||
Token::Str("tag"),
|
Token::Str("tag"),
|
||||||
Token::UnitVariant {
|
Token::UnitVariant {
|
||||||
name: "Enum",
|
name: "Enum",
|
||||||
variant: "Struct",
|
variant: "Struct",
|
||||||
},
|
},
|
||||||
|
// content
|
||||||
Token::Str("content"),
|
Token::Str("content"),
|
||||||
Token::Struct {
|
Token::Struct {
|
||||||
len: 2,
|
len: 2,
|
||||||
@@ -2887,6 +3108,146 @@ mod flatten {
|
|||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
// Field order: outer, [content, tag]
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 2,
|
||||||
|
name: "Struct",
|
||||||
|
},
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Struct",
|
||||||
|
},
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [tag, content], outer
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Struct",
|
||||||
|
},
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 2,
|
||||||
|
name: "Struct",
|
||||||
|
},
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [content, tag], outer
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 2,
|
||||||
|
name: "Struct",
|
||||||
|
},
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Struct",
|
||||||
|
},
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [tag], outer, [content]
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Struct",
|
||||||
|
},
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 2,
|
||||||
|
name: "Struct",
|
||||||
|
},
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
// Field order: [content], outer, [tag]
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// content
|
||||||
|
Token::Str("content"),
|
||||||
|
Token::Struct {
|
||||||
|
len: 2,
|
||||||
|
name: "Struct",
|
||||||
|
},
|
||||||
|
Token::Str("index"),
|
||||||
|
Token::U32(0),
|
||||||
|
Token::Str("value"),
|
||||||
|
Token::U32(42),
|
||||||
|
Token::StructEnd,
|
||||||
|
// outer
|
||||||
|
Token::Str("outer"),
|
||||||
|
Token::U32(42),
|
||||||
|
// tag
|
||||||
|
Token::Str("tag"),
|
||||||
|
Token::UnitVariant {
|
||||||
|
name: "Enum",
|
||||||
|
variant: "Struct",
|
||||||
|
},
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2917,17 +3278,20 @@ mod flatten {
|
|||||||
D { d: i32 },
|
D { d: i32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let value = Flatten {
|
||||||
|
x: X::B { b: 1 },
|
||||||
|
y: Y::D { d: 2 },
|
||||||
|
};
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&Flatten {
|
&value,
|
||||||
x: X::B { b: 1 },
|
|
||||||
y: Y::D { d: 2 },
|
|
||||||
},
|
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// x
|
||||||
Token::Str("typeX"),
|
Token::Str("typeX"),
|
||||||
Token::Str("B"),
|
Token::Str("B"),
|
||||||
Token::Str("b"),
|
Token::Str("b"),
|
||||||
Token::I32(1),
|
Token::I32(1),
|
||||||
|
// y
|
||||||
Token::Str("typeY"),
|
Token::Str("typeY"),
|
||||||
Token::Str("D"),
|
Token::Str("D"),
|
||||||
Token::Str("d"),
|
Token::Str("d"),
|
||||||
@@ -2935,6 +3299,23 @@ mod flatten {
|
|||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// y
|
||||||
|
Token::Str("typeY"),
|
||||||
|
Token::Str("D"),
|
||||||
|
Token::Str("d"),
|
||||||
|
Token::I32(2),
|
||||||
|
// x
|
||||||
|
Token::Str("typeX"),
|
||||||
|
Token::Str("B"),
|
||||||
|
Token::Str("b"),
|
||||||
|
Token::I32(1),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -2959,15 +3340,18 @@ mod flatten {
|
|||||||
B { c: u32 },
|
B { c: u32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let value = Flatten {
|
||||||
|
x: X::A,
|
||||||
|
y: Y::B { c: 0 },
|
||||||
|
};
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&Flatten {
|
&value,
|
||||||
x: X::A,
|
|
||||||
y: Y::B { c: 0 },
|
|
||||||
},
|
|
||||||
&[
|
&[
|
||||||
Token::Map { len: None },
|
Token::Map { len: None },
|
||||||
|
// x
|
||||||
Token::Str("typeX"),
|
Token::Str("typeX"),
|
||||||
Token::Str("A"),
|
Token::Str("A"),
|
||||||
|
// y
|
||||||
Token::Str("typeY"),
|
Token::Str("typeY"),
|
||||||
Token::Str("B"),
|
Token::Str("B"),
|
||||||
Token::Str("c"),
|
Token::Str("c"),
|
||||||
@@ -2975,6 +3359,21 @@ mod flatten {
|
|||||||
Token::MapEnd,
|
Token::MapEnd,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
assert_de_tokens(
|
||||||
|
&value,
|
||||||
|
&[
|
||||||
|
Token::Map { len: None },
|
||||||
|
// y
|
||||||
|
Token::Str("typeY"),
|
||||||
|
Token::Str("B"),
|
||||||
|
Token::Str("c"),
|
||||||
|
Token::U32(0),
|
||||||
|
// x
|
||||||
|
Token::Str("typeX"),
|
||||||
|
Token::Str("A"),
|
||||||
|
Token::MapEnd,
|
||||||
|
],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user