mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 05:37:58 +00:00
Add checks for conflicts for aliases
- Check that alias is not the same as name of other field (it still can be the name of owning field/variant) - Check that aliases are unique, i. e. two different fields does not use the same alias
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
#![allow(non_camel_case_types)]
|
||||
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
enum E {
|
||||
S1 {
|
||||
/// Expected error on "alias b", because this is a name of other field
|
||||
/// Error on "alias a" is not expected because this is a name of this field
|
||||
/// Error on "alias c" is not expected because field `c` is skipped
|
||||
#[serde(alias = "a", alias = "b", alias = "c")]
|
||||
a: (),
|
||||
|
||||
/// Expected error on "alias c", because it is already used as alias of `a`
|
||||
#[serde(alias = "c")]
|
||||
b: (),
|
||||
|
||||
#[serde(skip_deserializing)]
|
||||
c: (),
|
||||
},
|
||||
|
||||
S2 {
|
||||
/// Expected error on "alias c", because this is a name of other field after
|
||||
/// applying rename rules
|
||||
#[serde(alias = "b", alias = "c")]
|
||||
a: (),
|
||||
|
||||
#[serde(rename = "c")]
|
||||
b: (),
|
||||
},
|
||||
|
||||
#[serde(rename_all = "UPPERCASE")]
|
||||
S3 {
|
||||
/// Expected error on "alias B", because this is a name of field after
|
||||
/// applying rename rules
|
||||
#[serde(alias = "B", alias = "c")]
|
||||
a: (),
|
||||
b: (),
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
enum E1 {
|
||||
/// Expected error on "alias b", because this is a name of other variant
|
||||
/// Error on "alias a" is not expected because this is a name of this variant
|
||||
/// Error on "alias c" is not expected because variant `c` is skipped
|
||||
#[serde(alias = "a", alias = "b", alias = "c")]
|
||||
a,
|
||||
|
||||
/// Expected error on "alias c", because it is already used as alias of `a`
|
||||
#[serde(alias = "c")]
|
||||
b,
|
||||
|
||||
#[serde(skip_deserializing)]
|
||||
c,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
enum E2 {
|
||||
/// Expected error on "alias c", because this is a name of other variant after
|
||||
/// applying rename rules
|
||||
#[serde(alias = "b", alias = "c")]
|
||||
a,
|
||||
|
||||
#[serde(rename = "c")]
|
||||
b,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "UPPERCASE")]
|
||||
enum E3 {
|
||||
/// Expected error on "alias B", because this is a name of variant after
|
||||
/// applying rename rules
|
||||
#[serde(alias = "B", alias = "c")]
|
||||
a,
|
||||
b,
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,71 @@
|
||||
error: alias `b` conflicts with deserialization name of other field
|
||||
--> tests/ui/conflict/alias-enum.rs:8:9
|
||||
|
|
||||
8 | / /// Expected error on "alias b", because this is a name of other field
|
||||
9 | | /// Error on "alias a" is not expected because this is a name of this field
|
||||
10 | | /// Error on "alias c" is not expected because field `c` is skipped
|
||||
11 | | #[serde(alias = "a", alias = "b", alias = "c")]
|
||||
12 | | a: (),
|
||||
| |_____________^
|
||||
|
||||
error: alias `c` already used by field a
|
||||
--> tests/ui/conflict/alias-enum.rs:14:9
|
||||
|
|
||||
14 | / /// Expected error on "alias c", because it is already used as alias of `a`
|
||||
15 | | #[serde(alias = "c")]
|
||||
16 | | b: (),
|
||||
| |_____________^
|
||||
|
||||
error: alias `c` conflicts with deserialization name of other field
|
||||
--> tests/ui/conflict/alias-enum.rs:23:9
|
||||
|
|
||||
23 | / /// Expected error on "alias c", because this is a name of other field after
|
||||
24 | | /// applying rename rules
|
||||
25 | | #[serde(alias = "b", alias = "c")]
|
||||
26 | | a: (),
|
||||
| |_____________^
|
||||
|
||||
error: alias `B` conflicts with deserialization name of other field
|
||||
--> tests/ui/conflict/alias-enum.rs:34:9
|
||||
|
|
||||
34 | / /// Expected error on "alias B", because this is a name of field after
|
||||
35 | | /// applying rename rules
|
||||
36 | | #[serde(alias = "B", alias = "c")]
|
||||
37 | | a: (),
|
||||
| |_____________^
|
||||
|
||||
error: alias `b` conflicts with deserialization name of other variant
|
||||
--> tests/ui/conflict/alias-enum.rs:44:5
|
||||
|
|
||||
44 | / /// Expected error on "alias b", because this is a name of other variant
|
||||
45 | | /// Error on "alias a" is not expected because this is a name of this variant
|
||||
46 | | /// Error on "alias c" is not expected because variant `c` is skipped
|
||||
47 | | #[serde(alias = "a", alias = "b", alias = "c")]
|
||||
48 | | a,
|
||||
| |_____^
|
||||
|
||||
error: alias `c` already used by variant a
|
||||
--> tests/ui/conflict/alias-enum.rs:50:5
|
||||
|
|
||||
50 | / /// Expected error on "alias c", because it is already used as alias of `a`
|
||||
51 | | #[serde(alias = "c")]
|
||||
52 | | b,
|
||||
| |_____^
|
||||
|
||||
error: alias `c` conflicts with deserialization name of other variant
|
||||
--> tests/ui/conflict/alias-enum.rs:60:5
|
||||
|
|
||||
60 | / /// Expected error on "alias c", because this is a name of other variant after
|
||||
61 | | /// applying rename rules
|
||||
62 | | #[serde(alias = "b", alias = "c")]
|
||||
63 | | a,
|
||||
| |_____^
|
||||
|
||||
error: alias `B` conflicts with deserialization name of other variant
|
||||
--> tests/ui/conflict/alias-enum.rs:72:5
|
||||
|
|
||||
72 | / /// Expected error on "alias B", because this is a name of variant after
|
||||
73 | | /// applying rename rules
|
||||
74 | | #[serde(alias = "B", alias = "c")]
|
||||
75 | | a,
|
||||
| |_____^
|
||||
@@ -0,0 +1,40 @@
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct S1 {
|
||||
/// Expected error on "alias b", because this is a name of other field
|
||||
/// Error on "alias a" is not expected because this is a name of this field
|
||||
/// Error on "alias c" is not expected because field `c` is skipped
|
||||
#[serde(alias = "a", alias = "b", alias = "c")]
|
||||
a: (),
|
||||
|
||||
/// Expected error on "alias c", because it is already used as alias of `a`
|
||||
#[serde(alias = "c")]
|
||||
b: (),
|
||||
|
||||
#[serde(skip_deserializing)]
|
||||
c: (),
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct S2 {
|
||||
/// Expected error on "alias c", because this is a name of other field after
|
||||
/// applying rename rules
|
||||
#[serde(alias = "b", alias = "c")]
|
||||
a: (),
|
||||
|
||||
#[serde(rename = "c")]
|
||||
b: (),
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
#[serde(rename_all = "UPPERCASE")]
|
||||
struct S3 {
|
||||
/// Expected error on "alias B", because this is a name of field after
|
||||
/// applying rename rules
|
||||
#[serde(alias = "B", alias = "c")]
|
||||
a: (),
|
||||
b: (),
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,35 @@
|
||||
error: alias `b` conflicts with deserialization name of other field
|
||||
--> tests/ui/conflict/alias.rs:5:5
|
||||
|
|
||||
5 | / /// Expected error on "alias b", because this is a name of other field
|
||||
6 | | /// Error on "alias a" is not expected because this is a name of this field
|
||||
7 | | /// Error on "alias c" is not expected because field `c` is skipped
|
||||
8 | | #[serde(alias = "a", alias = "b", alias = "c")]
|
||||
9 | | a: (),
|
||||
| |_________^
|
||||
|
||||
error: alias `c` already used by field a
|
||||
--> tests/ui/conflict/alias.rs:11:5
|
||||
|
|
||||
11 | / /// Expected error on "alias c", because it is already used as alias of `a`
|
||||
12 | | #[serde(alias = "c")]
|
||||
13 | | b: (),
|
||||
| |_________^
|
||||
|
||||
error: alias `c` conflicts with deserialization name of other field
|
||||
--> tests/ui/conflict/alias.rs:21:5
|
||||
|
|
||||
21 | / /// Expected error on "alias c", because this is a name of other field after
|
||||
22 | | /// applying rename rules
|
||||
23 | | #[serde(alias = "b", alias = "c")]
|
||||
24 | | a: (),
|
||||
| |_________^
|
||||
|
||||
error: alias `B` conflicts with deserialization name of other field
|
||||
--> tests/ui/conflict/alias.rs:33:5
|
||||
|
|
||||
33 | / /// Expected error on "alias B", because this is a name of field after
|
||||
34 | | /// applying rename rules
|
||||
35 | | #[serde(alias = "B", alias = "c")]
|
||||
36 | | a: (),
|
||||
| |_________^
|
||||
Reference in New Issue
Block a user