diff --git a/test_suite/tests/test_annotations.rs b/test_suite/tests/test_annotations.rs index 493746da..e305db5b 100644 --- a/test_suite/tests/test_annotations.rs +++ b/test_suite/tests/test_annotations.rs @@ -93,6 +93,17 @@ where a5: E, } +#[derive(Debug, PartialEq, Serialize, Deserialize)] +struct DefaultTupleStruct( + A, + #[serde(default)] + B, + #[serde(default = "MyDefault::my_default")] + C, +) +where + C: MyDefault; + #[derive(Debug, PartialEq, Serialize, Deserialize)] struct CollectOther { a: u32, @@ -186,8 +197,37 @@ fn test_default_struct() { ); } +#[test] +fn test_default_tuple() { + assert_de_tokens( + &DefaultTupleStruct(1, 2, 3), + &[ + Token::TupleStruct { + name: "DefaultTupleStruct", + len: 3, + }, + Token::I32(1), + Token::I32(2), + Token::I32(3), + Token::TupleStructEnd, + ], + ); + + assert_de_tokens( + &DefaultTupleStruct(1, 0, 123), + &[ + Token::TupleStruct { + name: "DefaultTupleStruct", + len: 3, + }, + Token::I32(1), + Token::TupleStructEnd, + ], + ); +} + #[derive(Debug, PartialEq, Serialize, Deserialize)] -enum DefaultEnum +enum DefaultStructVariant where C: MyDefault, E: MyDefault, @@ -205,10 +245,24 @@ where }, } +#[derive(Debug, PartialEq, Serialize, Deserialize)] +enum DefaultTupleVariant +where + C: MyDefault, +{ + Tuple( + A, + #[serde(default)] + B, + #[serde(default = "MyDefault::my_default")] + C, + ), +} + #[test] -fn test_default_enum() { +fn test_default_struct_variant() { assert_de_tokens( - &DefaultEnum::Struct { + &DefaultStructVariant::Struct { a1: 1, a2: 2, a3: 3, @@ -217,7 +271,7 @@ fn test_default_enum() { }, &[ Token::StructVariant { - name: "DefaultEnum", + name: "DefaultStructVariant", variant: "Struct", len: 3, }, @@ -236,7 +290,7 @@ fn test_default_enum() { ); assert_de_tokens( - &DefaultEnum::Struct { + &DefaultStructVariant::Struct { a1: 1, a2: 0, a3: 123, @@ -245,7 +299,7 @@ fn test_default_enum() { }, &[ Token::StructVariant { - name: "DefaultEnum", + name: "DefaultStructVariant", variant: "Struct", len: 3, }, @@ -256,6 +310,37 @@ fn test_default_enum() { ); } +#[test] +fn test_default_tuple_variant() { + assert_de_tokens( + &DefaultTupleVariant::Tuple(1, 2, 3), + &[ + Token::TupleVariant { + name: "DefaultTupleVariant", + variant: "Tuple", + len: 3, + }, + Token::I32(1), + Token::I32(2), + Token::I32(3), + Token::TupleVariantEnd, + ], + ); + + assert_de_tokens( + &DefaultTupleVariant::Tuple(1, 0, 123), + &[ + Token::TupleVariant { + name: "DefaultTupleVariant", + variant: "Tuple", + len: 3, + }, + Token::I32(1), + Token::TupleVariantEnd, + ], + ); +} + // Does not implement std::default::Default. #[derive(Debug, PartialEq, Deserialize)] struct NoStdDefault(i8);