mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-23 00:08:01 +00:00
Allow #[serde(default)] on tuple structs
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
error: #[serde(default)] can only be used on structs with named fields
|
||||
error: #[serde(default)] can only be used on structs with fields
|
||||
--> tests/ui/default-attribute/enum.rs:4:9
|
||||
|
|
||||
4 | #[serde(default)]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
error: #[serde(default = "...")] can only be used on structs with named fields
|
||||
error: #[serde(default = "...")] can only be used on structs with fields
|
||||
--> tests/ui/default-attribute/enum_path.rs:4:9
|
||||
|
|
||||
4 | #[serde(default = "default_e")]
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default)]
|
||||
struct T(u8, u8);
|
||||
|
||||
fn main() {}
|
||||
@@ -1,5 +0,0 @@
|
||||
error: #[serde(default)] can only be used on structs with named fields
|
||||
--> tests/ui/default-attribute/nameless_struct_fields.rs:5:9
|
||||
|
|
||||
5 | struct T(u8, u8);
|
||||
| ^^^^^^^^
|
||||
@@ -1,7 +0,0 @@
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "default_t")]
|
||||
struct T(u8, u8);
|
||||
|
||||
fn main() {}
|
||||
@@ -1,5 +0,0 @@
|
||||
error: #[serde(default = "...")] can only be used on structs with named fields
|
||||
--> tests/ui/default-attribute/nameless_struct_fields_path.rs:4:9
|
||||
|
|
||||
4 | #[serde(default = "default_t")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
@@ -0,0 +1,48 @@
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
/// No errors expected
|
||||
#[derive(Deserialize)]
|
||||
struct T0(u8, u8);
|
||||
|
||||
/// No errors expected:
|
||||
/// - if both fields are provided, both gets value from data
|
||||
/// - if only one field is provided, the second gets default value
|
||||
#[derive(Deserialize)]
|
||||
struct T1(u8, #[serde(default)] u8);
|
||||
|
||||
/// Errors expected -- the first field can get default value only if sequence is
|
||||
/// empty, but that mean that all other fields cannot be deserialized without
|
||||
/// errors, so the `#[serde(default)]` attribute is superfluous
|
||||
#[derive(Deserialize)]
|
||||
struct T2(#[serde(default)] u8, u8, u8);
|
||||
|
||||
/// No errors expected:
|
||||
/// - if both fields are provided, both gets value from data
|
||||
/// - if only one field is provided, the second gets default value
|
||||
/// - if none fields are provided, both gets default value
|
||||
#[derive(Deserialize)]
|
||||
struct T3(#[serde(default)] u8, #[serde(default)] u8);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T4(u8, u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T5(#[serde(default)] u8, u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T6(u8, #[serde(default)] u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T7(#[serde(default)] u8, #[serde(default)] u8);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,11 @@
|
||||
error: struct or field must have #[serde(default)] because previous field 0 have #[serde(default)]
|
||||
--> tests/ui/default-attribute/tuple_struct.rs:17:33
|
||||
|
|
||||
17 | struct T2(#[serde(default)] u8, u8, u8);
|
||||
| ^^
|
||||
|
||||
error: struct or field must have #[serde(default)] because previous field 0 have #[serde(default)]
|
||||
--> tests/ui/default-attribute/tuple_struct.rs:17:37
|
||||
|
|
||||
17 | struct T2(#[serde(default)] u8, u8, u8);
|
||||
| ^^
|
||||
@@ -0,0 +1,77 @@
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
fn d<T>() -> T {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
/// No errors expected:
|
||||
/// - if both fields are provided, both gets value from data
|
||||
/// - if only one field is provided, the second gets default value
|
||||
#[derive(Deserialize)]
|
||||
struct T1(u8, #[serde(default = "d")] u8);
|
||||
|
||||
/// Errors expected -- the first field can get default value only if sequence is
|
||||
/// empty, but that mean that all other fields cannot be deserialized without
|
||||
/// errors, so the `#[serde(default)]` attribute is superfluous
|
||||
#[derive(Deserialize)]
|
||||
struct T2(#[serde(default = "d")] u8, u8, u8);
|
||||
|
||||
/// No errors expected:
|
||||
/// - if both fields are provided, both gets value from data
|
||||
/// - if only one field is provided, the second gets default value
|
||||
/// - if none fields are provided, both gets default value
|
||||
#[derive(Deserialize)]
|
||||
struct T3(#[serde(default = "d")] u8, #[serde(default = "d")] u8);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T1D(#[serde(default = "d")] u8, u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T2D(u8, #[serde(default = "d")] u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize, Default)]
|
||||
#[serde(default)]
|
||||
struct T3D(#[serde(default = "d")] u8, #[serde(default = "d")] u8);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "d")]
|
||||
struct T1Path(#[serde(default)] u8, u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "d")]
|
||||
struct T2Path(u8, #[serde(default)] u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "d")]
|
||||
struct T3Path(#[serde(default)] u8, #[serde(default)] u8);
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "d")]
|
||||
struct T1PathD(#[serde(default = "d")] u8, u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "d")]
|
||||
struct T2PathD(u8, #[serde(default = "d")] u8);
|
||||
|
||||
/// No errors expected -- missing fields gets default values
|
||||
#[derive(Deserialize)]
|
||||
#[serde(default = "d")]
|
||||
struct T3PathD(#[serde(default = "d")] u8, #[serde(default = "d")] u8);
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,11 @@
|
||||
error: struct or field must have #[serde(default)] because previous field 0 have #[serde(default)]
|
||||
--> tests/ui/default-attribute/tuple_struct_path.rs:17:39
|
||||
|
|
||||
17 | struct T2(#[serde(default = "d")] u8, u8, u8);
|
||||
| ^^
|
||||
|
||||
error: struct or field must have #[serde(default)] because previous field 0 have #[serde(default)]
|
||||
--> tests/ui/default-attribute/tuple_struct_path.rs:17:43
|
||||
|
|
||||
17 | struct T2(#[serde(default = "d")] u8, u8, u8);
|
||||
| ^^
|
||||
Reference in New Issue
Block a user