2017-09-09 14:37:00 -05:00
|
|
|
#![deny(trivial_numeric_casts)]
|
2021-11-04 22:21:43 -05:00
|
|
|
#![allow(
|
Ignore derive_partial_eq_without_eq clippy lint
error: you are deriving `PartialEq` and can implement `Eq`
--> serde/src/de/value.rs:51:17
|
51 | #[derive(Clone, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= note: `-D clippy::derive-partial-eq-without-eq` implied by `-D clippy::all`
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> serde_derive/src/internals/case.rs:13:23
|
13 | #[derive(Copy, Clone, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/unstable/mod.rs:6:21
|
6 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_ignored_any.rs:7:10
|
7 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_identifier.rs:7:34
|
7 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_identifier.rs:24:34
|
24 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_identifier.rs:41:34
|
41 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_identifier.rs:59:34
|
59 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_ser.rs:46:10
|
46 | #[derive(PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_value.rs:11:34
|
11 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de_error.rs:15:23
|
15 | #[derive(Copy, Clone, PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de_error.rs:18:10
|
18 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de_error.rs:26:10
|
26 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de_error.rs:34:10
|
34 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de_error.rs:41:19
|
41 | #[derive(Default, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de_error.rs:60:10
|
60 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_borrow.rs:70:34
|
70 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_borrow.rs:97:34
|
97 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_borrow.rs:106:34
|
106 | #[derive(Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:43:23
|
43 | #[derive(Copy, Clone, PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:46:10
|
46 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:49:10
|
49 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:52:10
|
52 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:76:10
|
76 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:82:10
|
82 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:102:10
|
102 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:109:19
|
109 | #[derive(Default, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:128:10
|
128 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:135:10
|
135 | #[derive(PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_de.rs:185:14
|
185 | #[derive(PartialEq, Debug, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:25:17
|
25 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:110:17
|
110 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:580:21
|
580 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:607:21
|
607 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:681:21
|
681 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:684:21
|
684 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:816:21
|
816 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:976:21
|
976 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1027:21
|
1027 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1273:21
|
1273 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1342:21
|
1342 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1413:21
|
1413 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1450:21
|
1450 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1474:21
|
1474 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1509:21
|
1509 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1543:21
|
1543 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1601:21
|
1601 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1743:45
|
1743 | #[derive(Serialize, Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1763:45
|
1763 | #[derive(Serialize, Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1770:45
|
1770 | #[derive(Serialize, Deserialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1870:21
|
1870 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_macros.rs:1888:21
|
1888 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:108:17
|
108 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:124:17
|
124 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:147:17
|
147 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:344:17
|
344 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:394:17
|
394 | #[derive(Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:413:17
|
413 | #[derive(Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:458:17
|
458 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:512:17
|
512 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:520:17
|
520 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:528:17
|
528 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:647:17
|
647 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_gen.rs:835:17
|
835 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:675:17
|
675 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1047:17
|
1047 | #[derive(Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1050:17
|
1050 | #[derive(Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1196:17
|
1196 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1514:17
|
1514 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1548:41
|
1548 | #[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1566:41
|
1566 | #[derive(Clone, Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1600:30
|
1600 | #[derive(Clone, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1803:21
|
1803 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1843:21
|
1843 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1852:21
|
1852 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:1947:21
|
1947 | #[derive(Debug, PartialEq, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2003:21
|
2003 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2037:21
|
2037 | #[derive(Debug, PartialEq, Serialize, Deserialize)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2074:45
|
2074 | #[derive(Deserialize, Serialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2080:45
|
2080 | #[derive(Deserialize, Serialize, Debug, PartialEq)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2157:38
|
2157 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2193:38
|
2193 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2200:38
|
2200 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2240:38
|
2240 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2279:38
|
2279 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2316:38
|
2316 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2359:38
|
2359 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2390:38
|
2390 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2421:38
|
2421 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2426:38
|
2426 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2483:38
|
2483 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2507:38
|
2507 | #[derive(Serialize, Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2521:27
|
2521 | #[derive(Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2552:27
|
2552 | #[derive(Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2558:27
|
2558 | #[derive(Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2586:14
|
2586 | #[derive(PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2624:27
|
2624 | #[derive(Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
error: you are deriving `PartialEq` and can implement `Eq`
--> test_suite/tests/test_annotations.rs:2647:27
|
2647 | #[derive(Deserialize, PartialEq, Debug)]
| ^^^^^^^^^ help: consider deriving `Eq` as well: `PartialEq, Eq`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derive_partial_eq_without_eq
2022-05-21 22:36:25 -05:00
|
|
|
clippy::derive_partial_eq_without_eq,
|
2021-11-04 22:21:43 -05:00
|
|
|
clippy::enum_variant_names,
|
|
|
|
clippy::redundant_field_names,
|
|
|
|
clippy::too_many_lines
|
|
|
|
)]
|
2018-01-13 16:28:12 -06:00
|
|
|
|
2018-04-19 11:52:27 -05:00
|
|
|
mod bytes;
|
|
|
|
|
2023-07-19 10:54:11 -05:00
|
|
|
use serde_derive::{Deserialize, Serialize};
|
2018-12-31 20:44:24 -06:00
|
|
|
use serde_test::{
|
2018-05-05 02:56:12 -05:00
|
|
|
assert_de_tokens, assert_de_tokens_error, assert_ser_tokens, assert_tokens, Token,
|
|
|
|
};
|
2017-02-02 14:10:07 -06:00
|
|
|
use std::collections::BTreeMap;
|
2016-06-28 23:47:54 -05:00
|
|
|
use std::marker::PhantomData;
|
2015-02-20 10:21:15 -06:00
|
|
|
|
2016-03-30 08:33:02 -05:00
|
|
|
// That tests that the derived Serialize implementation doesn't trigger
|
|
|
|
// any warning about `serializer` not being used, in case of empty enums.
|
|
|
|
#[derive(Serialize)]
|
|
|
|
#[allow(dead_code)]
|
|
|
|
#[deny(unused_variables)]
|
|
|
|
enum Void {}
|
|
|
|
|
2015-03-19 09:49:42 -05:00
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2015-03-03 22:29:59 -06:00
|
|
|
struct NamedUnit;
|
|
|
|
|
2015-03-19 09:49:42 -05:00
|
|
|
#[derive(Debug, PartialEq, Serialize)]
|
2015-03-15 19:47:25 -05:00
|
|
|
struct SerNamedTuple<'a, 'b, A: 'a, B: 'b, C>(&'a A, &'b mut B, C);
|
|
|
|
|
2015-03-19 09:49:42 -05:00
|
|
|
#[derive(Debug, PartialEq, Deserialize)]
|
2015-03-15 19:47:25 -05:00
|
|
|
struct DeNamedTuple<A, B, C>(A, B, C);
|
|
|
|
|
2015-03-19 09:49:42 -05:00
|
|
|
#[derive(Debug, PartialEq, Serialize)]
|
2015-03-15 19:47:25 -05:00
|
|
|
struct SerNamedMap<'a, 'b, A: 'a, B: 'b, C> {
|
|
|
|
a: &'a A,
|
|
|
|
b: &'b mut B,
|
|
|
|
c: C,
|
|
|
|
}
|
|
|
|
|
2015-03-19 09:49:42 -05:00
|
|
|
#[derive(Debug, PartialEq, Deserialize)]
|
2015-03-15 19:47:25 -05:00
|
|
|
struct DeNamedMap<A, B, C> {
|
|
|
|
a: A,
|
|
|
|
b: B,
|
|
|
|
c: C,
|
|
|
|
}
|
|
|
|
|
2015-03-19 09:49:42 -05:00
|
|
|
#[derive(Debug, PartialEq, Serialize)]
|
2017-04-13 14:28:23 -05:00
|
|
|
enum SerEnum<'a, B: 'a, C: 'a, D>
|
|
|
|
where
|
|
|
|
D: 'a,
|
|
|
|
{
|
2015-02-20 10:21:15 -06:00
|
|
|
Unit,
|
2017-04-13 14:28:23 -05:00
|
|
|
Seq(i8, B, &'a C, &'a mut D),
|
|
|
|
Map { a: i8, b: B, c: &'a C, d: &'a mut D },
|
2015-03-14 01:44:18 -05:00
|
|
|
|
|
|
|
// Make sure we can support more than one variant.
|
|
|
|
_Unit2,
|
2017-04-13 14:28:23 -05:00
|
|
|
_Seq2(i8, B, &'a C, &'a mut D),
|
|
|
|
_Map2 { a: i8, b: B, c: &'a C, d: &'a mut D },
|
2015-02-20 10:21:15 -06:00
|
|
|
}
|
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2016-07-17 23:09:44 -05:00
|
|
|
enum DeEnum<B, C, D> {
|
2015-03-08 21:07:23 -05:00
|
|
|
Unit,
|
2017-04-13 14:28:23 -05:00
|
|
|
Seq(i8, B, C, D),
|
|
|
|
Map { a: i8, b: B, c: C, d: D },
|
2015-03-14 01:44:18 -05:00
|
|
|
|
|
|
|
// Make sure we can support more than one variant.
|
|
|
|
_Unit2,
|
2017-04-13 14:28:23 -05:00
|
|
|
_Seq2(i8, B, C, D),
|
|
|
|
_Map2 { a: i8, b: B, c: C, d: D },
|
2015-03-08 21:07:23 -05:00
|
|
|
}
|
|
|
|
|
2015-06-18 10:45:03 -05:00
|
|
|
#[derive(Serialize)]
|
|
|
|
enum Lifetimes<'a> {
|
|
|
|
LifetimeSeq(&'a i32),
|
|
|
|
NoLifetimeSeq(i32),
|
|
|
|
LifetimeMap { a: &'a i32 },
|
|
|
|
NoLifetimeMap { a: i32 },
|
|
|
|
}
|
|
|
|
|
2015-07-23 09:25:27 -05:00
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
pub struct GenericStruct<T> {
|
|
|
|
x: T,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2016-02-13 00:05:02 -06:00
|
|
|
pub struct GenericNewTypeStruct<T>(T);
|
2015-07-23 09:25:27 -05:00
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2015-07-30 11:38:09 -05:00
|
|
|
pub struct GenericTupleStruct<T, U>(T, U);
|
2015-07-23 09:25:27 -05:00
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2015-07-30 11:38:09 -05:00
|
|
|
pub enum GenericEnum<T, U> {
|
|
|
|
Unit,
|
2016-02-13 00:05:02 -06:00
|
|
|
NewType(T),
|
2015-07-30 11:38:09 -05:00
|
|
|
Seq(T, U),
|
|
|
|
Map { x: T, y: U },
|
2015-07-23 09:25:27 -05:00
|
|
|
}
|
|
|
|
|
2016-04-14 01:51:04 -05:00
|
|
|
trait AssociatedType {
|
|
|
|
type X;
|
|
|
|
}
|
|
|
|
|
|
|
|
impl AssociatedType for i32 {
|
|
|
|
type X = i32;
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2017-04-13 14:28:23 -05:00
|
|
|
struct DefaultTyParam<T: AssociatedType<X = i32> = i32> {
|
|
|
|
phantom: PhantomData<T>,
|
2016-04-14 01:51:04 -05:00
|
|
|
}
|
|
|
|
|
2015-03-03 11:50:57 -06:00
|
|
|
#[test]
|
2015-03-06 21:11:47 -06:00
|
|
|
fn test_named_unit() {
|
2017-04-19 15:06:31 -05:00
|
|
|
assert_tokens(&NamedUnit, &[Token::UnitStruct { name: "NamedUnit" }]);
|
2015-03-06 21:11:47 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2015-03-08 13:39:20 -05:00
|
|
|
fn test_ser_named_tuple() {
|
2015-03-06 21:11:47 -06:00
|
|
|
let a = 5;
|
|
|
|
let mut b = 6;
|
|
|
|
let c = 7;
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&SerNamedTuple(&a, &mut b, c),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleStruct {
|
|
|
|
name: "SerNamedTuple",
|
|
|
|
len: 3,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::I32(5),
|
|
|
|
Token::I32(6),
|
|
|
|
Token::I32(7),
|
2016-02-23 07:15:44 -06:00
|
|
|
Token::TupleStructEnd,
|
2015-08-27 22:01:09 -05:00
|
|
|
],
|
2015-03-06 21:11:47 -06:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-03-08 13:39:20 -05:00
|
|
|
#[test]
|
|
|
|
fn test_de_named_tuple() {
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_de_tokens(
|
|
|
|
&DeNamedTuple(5, 6, 7),
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Seq { len: Some(3) },
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::I32(5),
|
|
|
|
Token::I32(6),
|
|
|
|
Token::I32(7),
|
|
|
|
Token::SeqEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-03-08 13:39:20 -05:00
|
|
|
);
|
2016-02-13 00:05:02 -06:00
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&DeNamedTuple(5, 6, 7),
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleStruct {
|
|
|
|
name: "DeNamedTuple",
|
|
|
|
len: 3,
|
|
|
|
},
|
2016-02-13 00:05:02 -06:00
|
|
|
Token::I32(5),
|
|
|
|
Token::I32(6),
|
|
|
|
Token::I32(7),
|
2016-02-23 07:15:44 -06:00
|
|
|
Token::TupleStructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2016-02-13 00:05:02 -06:00
|
|
|
);
|
2015-03-08 13:39:20 -05:00
|
|
|
}
|
|
|
|
|
2015-03-07 00:14:13 -06:00
|
|
|
#[test]
|
2015-03-08 20:46:41 -05:00
|
|
|
fn test_ser_named_map() {
|
2015-03-07 00:14:13 -06:00
|
|
|
let a = 5;
|
|
|
|
let mut b = 6;
|
|
|
|
let c = 7;
|
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&SerNamedMap {
|
2017-12-23 22:13:08 -06:00
|
|
|
a: &a,
|
|
|
|
b: &mut b,
|
|
|
|
c: c,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "SerNamedMap",
|
|
|
|
len: 3,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::I32(5),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::I32(6),
|
|
|
|
Token::Str("c"),
|
|
|
|
Token::I32(7),
|
2016-02-13 00:05:02 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-03-07 00:14:13 -06:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-03-08 20:46:41 -05:00
|
|
|
#[test]
|
|
|
|
fn test_de_named_map() {
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_de_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&DeNamedMap { a: 5, b: 6, c: 7 },
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "DeNamedMap",
|
|
|
|
len: 3,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::I32(5),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::I32(6),
|
|
|
|
Token::Str("c"),
|
|
|
|
Token::I32(7),
|
2016-02-13 00:05:02 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
2015-03-08 20:46:41 -05:00
|
|
|
}
|
|
|
|
|
2015-03-06 21:11:47 -06:00
|
|
|
#[test]
|
2015-03-08 21:07:23 -05:00
|
|
|
fn test_ser_enum_unit() {
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&SerEnum::Unit::<u32, u32, u32>,
|
2018-04-30 03:41:22 -05:00
|
|
|
&[Token::UnitVariant {
|
|
|
|
name: "SerEnum",
|
|
|
|
variant: "Unit",
|
|
|
|
}],
|
2015-03-06 21:11:47 -06:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2015-03-08 21:07:23 -05:00
|
|
|
fn test_ser_enum_seq() {
|
2015-03-06 21:11:47 -06:00
|
|
|
let a = 1;
|
|
|
|
let b = 2;
|
|
|
|
let c = 3;
|
2016-07-17 23:09:44 -05:00
|
|
|
let mut d = 4;
|
2015-03-06 21:11:47 -06:00
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&SerEnum::Seq(a, b, &c, &mut d),
|
2015-08-27 22:01:09 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleVariant {
|
|
|
|
name: "SerEnum",
|
|
|
|
variant: "Seq",
|
|
|
|
len: 4,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::I8(1),
|
|
|
|
Token::I32(2),
|
|
|
|
Token::I32(3),
|
2016-07-17 23:09:44 -05:00
|
|
|
Token::I32(4),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::TupleVariantEnd,
|
2015-08-27 22:01:09 -05:00
|
|
|
],
|
2015-03-06 21:11:47 -06:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
2015-03-08 21:07:23 -05:00
|
|
|
fn test_ser_enum_map() {
|
2015-03-06 21:11:47 -06:00
|
|
|
let a = 1;
|
|
|
|
let b = 2;
|
|
|
|
let c = 3;
|
2016-07-17 23:09:44 -05:00
|
|
|
let mut d = 4;
|
2015-03-06 21:11:47 -06:00
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&SerEnum::Map {
|
2017-12-23 22:13:08 -06:00
|
|
|
a: a,
|
|
|
|
b: b,
|
|
|
|
c: &c,
|
|
|
|
d: &mut d,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "SerEnum",
|
|
|
|
variant: "Map",
|
|
|
|
len: 4,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::I8(1),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::I32(2),
|
|
|
|
Token::Str("c"),
|
|
|
|
Token::I32(3),
|
2016-07-17 23:09:44 -05:00
|
|
|
Token::Str("d"),
|
|
|
|
Token::I32(4),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2015-08-27 22:01:09 -05:00
|
|
|
],
|
2015-03-06 21:11:47 -06:00
|
|
|
);
|
2015-03-03 11:50:57 -06:00
|
|
|
}
|
2015-03-08 21:07:23 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_de_enum_unit() {
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_tokens(
|
|
|
|
&DeEnum::Unit::<u32, u32, u32>,
|
2018-04-30 03:41:22 -05:00
|
|
|
&[Token::UnitVariant {
|
|
|
|
name: "DeEnum",
|
|
|
|
variant: "Unit",
|
|
|
|
}],
|
2015-03-08 21:07:23 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_de_enum_seq() {
|
|
|
|
let a = 1;
|
|
|
|
let b = 2;
|
|
|
|
let c = 3;
|
2016-07-17 23:09:44 -05:00
|
|
|
let d = 4;
|
2015-03-08 21:07:23 -05:00
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&DeEnum::Seq(a, b, c, d),
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleVariant {
|
|
|
|
name: "DeEnum",
|
|
|
|
variant: "Seq",
|
|
|
|
len: 4,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::I8(1),
|
|
|
|
Token::I32(2),
|
|
|
|
Token::I32(3),
|
2016-07-17 23:09:44 -05:00
|
|
|
Token::I32(4),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::TupleVariantEnd,
|
2015-08-27 22:01:09 -05:00
|
|
|
],
|
2015-03-08 21:07:23 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_de_enum_map() {
|
|
|
|
let a = 1;
|
|
|
|
let b = 2;
|
|
|
|
let c = 3;
|
2016-07-17 23:09:44 -05:00
|
|
|
let d = 4;
|
2015-03-08 21:07:23 -05:00
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_tokens(
|
|
|
|
&DeEnum::Map {
|
2017-12-23 22:13:08 -06:00
|
|
|
a: a,
|
|
|
|
b: b,
|
|
|
|
c: c,
|
|
|
|
d: d,
|
|
|
|
},
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "DeEnum",
|
|
|
|
variant: "Map",
|
|
|
|
len: 4,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::I8(1),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::I32(2),
|
|
|
|
Token::Str("c"),
|
|
|
|
Token::I32(3),
|
2016-07-17 23:09:44 -05:00
|
|
|
Token::Str("d"),
|
|
|
|
Token::I32(4),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2015-08-27 22:01:09 -05:00
|
|
|
],
|
2015-03-08 21:07:23 -05:00
|
|
|
);
|
|
|
|
}
|
2015-06-18 10:45:03 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_lifetimes() {
|
|
|
|
let value = 5;
|
2015-08-27 22:01:09 -05:00
|
|
|
|
|
|
|
assert_ser_tokens(
|
|
|
|
&Lifetimes::LifetimeSeq(&value),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::NewtypeVariant {
|
|
|
|
name: "Lifetimes",
|
|
|
|
variant: "LifetimeSeq",
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::I32(5),
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-06-18 10:45:03 -05:00
|
|
|
);
|
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&Lifetimes::NoLifetimeSeq(5),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::NewtypeVariant {
|
|
|
|
name: "Lifetimes",
|
|
|
|
variant: "NoLifetimeSeq",
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::I32(5),
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-06-18 10:45:03 -05:00
|
|
|
);
|
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&Lifetimes::LifetimeMap { a: &value },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "Lifetimes",
|
|
|
|
variant: "LifetimeMap",
|
|
|
|
len: 1,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::I32(5),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-06-18 10:45:03 -05:00
|
|
|
);
|
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
assert_ser_tokens(
|
|
|
|
&Lifetimes::NoLifetimeMap { a: 5 },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "Lifetimes",
|
|
|
|
variant: "NoLifetimeMap",
|
|
|
|
len: 1,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::I32(5),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-06-18 10:45:03 -05:00
|
|
|
);
|
|
|
|
}
|
2015-07-23 09:25:27 -05:00
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
#[test]
|
|
|
|
fn test_generic_struct() {
|
|
|
|
assert_tokens(
|
|
|
|
&GenericStruct { x: 5u32 },
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "GenericStruct",
|
|
|
|
len: 1,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("x"),
|
|
|
|
Token::U32(5),
|
2016-02-13 00:05:02 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
2015-07-30 11:38:09 -05:00
|
|
|
}
|
2015-07-23 09:25:27 -05:00
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
#[test]
|
|
|
|
fn test_generic_newtype_struct() {
|
|
|
|
assert_tokens(
|
2016-02-13 00:05:02 -06:00
|
|
|
&GenericNewTypeStruct(5u32),
|
2017-12-23 22:13:08 -06:00
|
|
|
&[
|
|
|
|
Token::NewtypeStruct {
|
|
|
|
name: "GenericNewTypeStruct",
|
|
|
|
},
|
|
|
|
Token::U32(5),
|
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2018-04-23 12:51:49 -05:00
|
|
|
#[test]
|
|
|
|
fn test_untagged_newtype_struct() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
enum E {
|
|
|
|
Newtype(GenericNewTypeStruct<u32>),
|
|
|
|
Null,
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&E::Newtype(GenericNewTypeStruct(5u32)),
|
|
|
|
&[
|
|
|
|
Token::NewtypeStruct {
|
|
|
|
name: "GenericNewTypeStruct",
|
|
|
|
},
|
|
|
|
Token::U32(5),
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_adjacently_tagged_newtype_struct() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "t", content = "c")]
|
|
|
|
enum E {
|
|
|
|
Newtype(GenericNewTypeStruct<u32>),
|
|
|
|
Null,
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&E::Newtype(GenericNewTypeStruct(5u32)),
|
|
|
|
&[
|
2018-04-30 03:41:22 -05:00
|
|
|
Token::Struct { name: "E", len: 2 },
|
2018-04-23 12:51:49 -05:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::NewtypeStruct {
|
|
|
|
name: "GenericNewTypeStruct",
|
|
|
|
},
|
|
|
|
Token::U32(5),
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "E",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Newtype",
|
|
|
|
},
|
2018-04-23 12:51:49 -05:00
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2015-08-27 22:01:09 -05:00
|
|
|
#[test]
|
|
|
|
fn test_generic_tuple_struct() {
|
|
|
|
assert_tokens(
|
|
|
|
&GenericTupleStruct(5u32, 6u32),
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleStruct {
|
|
|
|
name: "GenericTupleStruct",
|
|
|
|
len: 2,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::U32(5),
|
|
|
|
Token::U32(6),
|
2016-02-23 07:15:44 -06:00
|
|
|
Token::TupleStructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_generic_enum_unit() {
|
|
|
|
assert_tokens(
|
|
|
|
&GenericEnum::Unit::<u32, u32>,
|
2018-04-30 03:41:22 -05:00
|
|
|
&[Token::UnitVariant {
|
|
|
|
name: "GenericEnum",
|
|
|
|
variant: "Unit",
|
|
|
|
}],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_generic_enum_newtype() {
|
|
|
|
assert_tokens(
|
2016-02-13 00:05:02 -06:00
|
|
|
&GenericEnum::NewType::<u32, u32>(5),
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::NewtypeVariant {
|
|
|
|
name: "GenericEnum",
|
|
|
|
variant: "NewType",
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::U32(5),
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_generic_enum_seq() {
|
|
|
|
assert_tokens(
|
|
|
|
&GenericEnum::Seq::<u32, u32>(5, 6),
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleVariant {
|
|
|
|
name: "GenericEnum",
|
|
|
|
variant: "Seq",
|
|
|
|
len: 2,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::U32(5),
|
|
|
|
Token::U32(6),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::TupleVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_generic_enum_map() {
|
|
|
|
assert_tokens(
|
|
|
|
&GenericEnum::Map::<u32, u32> { x: 5, y: 6 },
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "GenericEnum",
|
|
|
|
variant: "Map",
|
|
|
|
len: 2,
|
|
|
|
},
|
2015-08-27 22:01:09 -05:00
|
|
|
Token::Str("x"),
|
|
|
|
Token::U32(5),
|
|
|
|
Token::Str("y"),
|
|
|
|
Token::U32(6),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2015-08-27 22:01:09 -05:00
|
|
|
);
|
2015-07-23 09:25:27 -05:00
|
|
|
}
|
2016-04-14 01:51:04 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_default_ty_param() {
|
|
|
|
assert_tokens(
|
2017-12-23 22:13:08 -06:00
|
|
|
&DefaultTyParam::<i32> {
|
|
|
|
phantom: PhantomData,
|
|
|
|
},
|
2016-06-29 01:50:19 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "DefaultTyParam",
|
|
|
|
len: 1,
|
|
|
|
},
|
2016-04-14 01:51:04 -05:00
|
|
|
Token::Str("phantom"),
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::UnitStruct {
|
|
|
|
name: "PhantomData",
|
|
|
|
},
|
2016-04-14 01:51:04 -05:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2016-04-14 01:51:04 -05:00
|
|
|
);
|
|
|
|
}
|
2016-09-26 23:09:13 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_enum_state_field() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
enum SomeEnum {
|
|
|
|
Key { key: char, state: bool },
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&SomeEnum::Key {
|
2017-12-23 22:13:08 -06:00
|
|
|
key: 'a',
|
|
|
|
state: true,
|
|
|
|
},
|
2016-09-26 23:09:13 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "SomeEnum",
|
|
|
|
variant: "Key",
|
|
|
|
len: 2,
|
|
|
|
},
|
2016-09-26 23:09:13 -05:00
|
|
|
Token::Str("key"),
|
|
|
|
Token::Char('a'),
|
|
|
|
Token::Str("state"),
|
|
|
|
Token::Bool(true),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2016-09-26 23:09:13 -05:00
|
|
|
);
|
|
|
|
}
|
2017-02-02 14:10:07 -06:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_untagged_enum() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
enum Untagged {
|
2017-04-13 14:28:23 -05:00
|
|
|
A { a: u8 },
|
|
|
|
B { b: u8 },
|
2017-02-02 14:10:07 -06:00
|
|
|
C,
|
|
|
|
D(u8),
|
|
|
|
E(String),
|
|
|
|
F(u8, u8),
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Untagged::A { a: 1 },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("a"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Untagged::B { b: 2 },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("b"),
|
|
|
|
Token::U8(2),
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
2019-11-24 17:59:08 -06:00
|
|
|
// Serializes to unit, deserializes from either depending on format's
|
|
|
|
// preference.
|
2017-04-13 14:28:23 -05:00
|
|
|
assert_tokens(&Untagged::C, &[Token::Unit]);
|
2019-11-24 17:59:08 -06:00
|
|
|
assert_de_tokens(&Untagged::C, &[Token::None]);
|
2017-02-02 14:10:07 -06:00
|
|
|
|
2017-04-13 14:28:23 -05:00
|
|
|
assert_tokens(&Untagged::D(4), &[Token::U8(4)]);
|
|
|
|
assert_tokens(&Untagged::E("e".to_owned()), &[Token::Str("e")]);
|
2017-02-02 14:10:07 -06:00
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Untagged::F(1, 2),
|
2017-12-23 22:13:08 -06:00
|
|
|
&[
|
|
|
|
Token::Tuple { len: 2 },
|
|
|
|
Token::U8(1),
|
|
|
|
Token::U8(2),
|
|
|
|
Token::TupleEnd,
|
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens_error::<Untagged>(
|
2017-04-19 15:06:31 -05:00
|
|
|
&[Token::Tuple { len: 1 }, Token::U8(1), Token::TupleEnd],
|
2017-04-19 13:38:57 -05:00
|
|
|
"data did not match any variant of untagged enum Untagged",
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
2017-02-03 00:12:07 -06:00
|
|
|
|
|
|
|
assert_de_tokens_error::<Untagged>(
|
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Tuple { len: 3 },
|
2017-02-03 00:12:07 -06:00
|
|
|
Token::U8(1),
|
|
|
|
Token::U8(2),
|
|
|
|
Token::U8(3),
|
|
|
|
Token::TupleEnd,
|
|
|
|
],
|
2017-04-19 13:38:57 -05:00
|
|
|
"data did not match any variant of untagged enum Untagged",
|
2017-02-03 00:12:07 -06:00
|
|
|
);
|
2017-02-02 14:10:07 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_enum() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
struct Newtype(BTreeMap<String, String>);
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
struct Struct {
|
|
|
|
f: u8,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
enum InternallyTagged {
|
2017-04-13 14:28:23 -05:00
|
|
|
A { a: u8 },
|
2017-09-17 15:45:07 -05:00
|
|
|
B,
|
|
|
|
C(BTreeMap<String, String>),
|
|
|
|
D(Newtype),
|
|
|
|
E(Struct),
|
2017-02-02 14:10:07 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&InternallyTagged::A { a: 1 },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "InternallyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("A"),
|
|
|
|
Token::Str("a"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
2017-09-17 15:45:07 -05:00
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::A { a: 1 },
|
2017-02-02 14:10:07 -06:00
|
|
|
&[
|
2017-09-17 15:45:07 -05:00
|
|
|
Token::Seq { len: Some(2) },
|
|
|
|
Token::Str("A"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::SeqEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-09-17 15:45:07 -05:00
|
|
|
&InternallyTagged::B,
|
2017-02-02 14:10:07 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "InternallyTagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("type"),
|
2017-09-17 15:45:07 -05:00
|
|
|
Token::Str("B"),
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
2017-09-17 15:45:07 -05:00
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::B,
|
2017-12-23 22:13:08 -06:00
|
|
|
&[Token::Seq { len: Some(1) }, Token::Str("B"), Token::SeqEnd],
|
2017-09-17 15:45:07 -05:00
|
|
|
);
|
|
|
|
|
2017-02-02 14:10:07 -06:00
|
|
|
assert_tokens(
|
2017-09-17 15:45:07 -05:00
|
|
|
&InternallyTagged::C(BTreeMap::new()),
|
2017-02-02 14:10:07 -06:00
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(1) },
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("type"),
|
2017-09-17 15:45:07 -05:00
|
|
|
Token::Str("C"),
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
2017-02-02 14:10:07 -06:00
|
|
|
|
2017-09-17 15:45:07 -05:00
|
|
|
assert_de_tokens_error::<InternallyTagged>(
|
|
|
|
&[
|
|
|
|
Token::Seq { len: Some(2) },
|
|
|
|
Token::Str("C"),
|
|
|
|
Token::Map { len: Some(0) },
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::MapEnd,
|
2017-09-17 15:45:07 -05:00
|
|
|
Token::SeqEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-09-17 15:45:07 -05:00
|
|
|
"invalid type: sequence, expected a map",
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-09-17 15:45:07 -05:00
|
|
|
&InternallyTagged::D(Newtype(BTreeMap::new())),
|
2017-02-02 14:10:07 -06:00
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(1) },
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("type"),
|
2017-09-17 15:45:07 -05:00
|
|
|
Token::Str("D"),
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::MapEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-09-17 15:45:07 -05:00
|
|
|
&InternallyTagged::E(Struct { f: 6 }),
|
2017-02-02 14:10:07 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Struct",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("type"),
|
2017-09-17 15:45:07 -05:00
|
|
|
Token::Str("E"),
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("f"),
|
|
|
|
Token::U8(6),
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
2017-09-17 15:45:07 -05:00
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::E(Struct { f: 6 }),
|
|
|
|
&[
|
|
|
|
Token::Seq { len: Some(2) },
|
|
|
|
Token::Str("E"),
|
|
|
|
Token::U8(6),
|
|
|
|
Token::SeqEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
2017-02-02 14:10:07 -06:00
|
|
|
assert_de_tokens_error::<InternallyTagged>(
|
2017-04-19 15:06:31 -05:00
|
|
|
&[Token::Map { len: Some(0) }, Token::MapEnd],
|
2017-04-19 13:38:57 -05:00
|
|
|
"missing field `type`",
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens_error::<InternallyTagged>(
|
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(1) },
|
2017-02-02 14:10:07 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Z"),
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
2017-09-17 15:45:07 -05:00
|
|
|
"unknown variant `Z`, expected one of `A`, `B`, `C`, `D`, `E`",
|
2017-02-02 14:10:07 -06:00
|
|
|
);
|
|
|
|
}
|
2017-02-17 23:44:15 -06:00
|
|
|
|
2023-11-06 05:11:02 -06:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_enum_with_untagged_variant() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "kind")]
|
|
|
|
enum InternallyTagged {
|
|
|
|
Tagged {
|
|
|
|
a: u8,
|
|
|
|
},
|
|
|
|
#[serde(untagged)]
|
|
|
|
Untagged {
|
|
|
|
kind: String,
|
|
|
|
b: u8,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Tagged { a: 1 },
|
|
|
|
&[
|
|
|
|
Token::Map { len: Some(2) },
|
|
|
|
Token::Str("kind"),
|
|
|
|
Token::Str("Tagged"),
|
|
|
|
Token::Str("a"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&InternallyTagged::Tagged { a: 1 },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "InternallyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("kind"),
|
|
|
|
Token::Str("Tagged"),
|
|
|
|
Token::Str("a"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Untagged {
|
|
|
|
kind: "Foo".to_owned(),
|
|
|
|
b: 2,
|
|
|
|
},
|
|
|
|
&[
|
|
|
|
Token::Map { len: Some(2) },
|
|
|
|
Token::Str("kind"),
|
|
|
|
Token::Str("Foo"),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::U8(2),
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&InternallyTagged::Untagged {
|
|
|
|
kind: "Foo".to_owned(),
|
|
|
|
b: 2,
|
|
|
|
},
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "InternallyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("kind"),
|
|
|
|
Token::Str("Foo"),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::U8(2),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&InternallyTagged::Untagged {
|
|
|
|
kind: "Tagged".to_owned(),
|
|
|
|
b: 2,
|
|
|
|
},
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "InternallyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("kind"),
|
|
|
|
Token::Str("Tagged"),
|
|
|
|
Token::Str("b"),
|
|
|
|
Token::U8(2),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2018-04-19 11:52:27 -05:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_bytes() {
|
|
|
|
#[derive(Debug, PartialEq, Deserialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
enum InternallyTagged {
|
|
|
|
String {
|
|
|
|
string: String,
|
|
|
|
},
|
|
|
|
Bytes {
|
|
|
|
#[serde(with = "bytes")]
|
|
|
|
bytes: Vec<u8>,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&InternallyTagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "String",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("String"),
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::Str("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&InternallyTagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "String",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("String"),
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::String("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&InternallyTagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "String",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("String"),
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::Bytes(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&InternallyTagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "String",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("String"),
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::ByteBuf(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Bytes",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Bytes"),
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::Str("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Bytes",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Bytes"),
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::String("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Bytes",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Bytes"),
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::Bytes(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Bytes",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Bytes"),
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::ByteBuf(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&InternallyTagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Bytes",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Bytes"),
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::Seq { len: Some(1) },
|
|
|
|
Token::U8(0),
|
|
|
|
Token::SeqEnd,
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-05-14 14:21:00 -05:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_struct_variant_containing_unit_variant() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
pub enum Level {
|
|
|
|
Info,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "action")]
|
|
|
|
pub enum Message {
|
|
|
|
Log { level: Level },
|
|
|
|
}
|
|
|
|
|
2023-08-07 10:33:12 -05:00
|
|
|
assert_de_tokens(
|
|
|
|
&Level::Info,
|
|
|
|
&[
|
|
|
|
Token::Enum { name: "Level" },
|
|
|
|
Token::BorrowedStr("Info"),
|
|
|
|
Token::Unit,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
2017-05-14 14:21:00 -05:00
|
|
|
assert_de_tokens(
|
|
|
|
&Message::Log { level: Level::Info },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Message",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-05-14 14:21:00 -05:00
|
|
|
Token::Str("action"),
|
|
|
|
Token::Str("Log"),
|
|
|
|
Token::Str("level"),
|
Use correct tokens in test to represent an enum variant
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933. This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-06 16:53:24 -05:00
|
|
|
Token::Enum { name: "Level" },
|
2017-05-14 14:21:00 -05:00
|
|
|
Token::BorrowedStr("Info"),
|
Use correct tokens in test to represent an enum variant
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933. This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-06 16:53:24 -05:00
|
|
|
Token::Unit,
|
2017-05-14 14:21:00 -05:00
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
2020-11-03 10:37:02 -06:00
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Message::Log { level: Level::Info },
|
|
|
|
&[
|
|
|
|
Token::Map { len: Some(2) },
|
|
|
|
Token::Str("action"),
|
|
|
|
Token::Str("Log"),
|
|
|
|
Token::Str("level"),
|
Use correct tokens in test to represent an enum variant
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933. This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-06 16:53:24 -05:00
|
|
|
Token::Enum { name: "Level" },
|
2020-11-03 10:37:02 -06:00
|
|
|
Token::BorrowedStr("Info"),
|
Use correct tokens in test to represent an enum variant
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933. This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-06 16:53:24 -05:00
|
|
|
Token::Unit,
|
2020-11-03 10:37:02 -06:00
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Message::Log { level: Level::Info },
|
|
|
|
&[
|
|
|
|
Token::Seq { len: Some(2) },
|
|
|
|
Token::Str("Log"),
|
Use correct tokens in test to represent an enum variant
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933. This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-06 16:53:24 -05:00
|
|
|
Token::Enum { name: "Level" },
|
2020-11-03 10:37:02 -06:00
|
|
|
Token::BorrowedStr("Info"),
|
Use correct tokens in test to represent an enum variant
Unit variant of externally tagged enum cannot be deserialized from the string
token by itself. It is ContentDeserializer + serde_test::Deserializer that makes
this possible, because serde_test::Deserializer produces Content::Str() from
Token::BorrowedStr() and ContentDeserializer produces unit variant from Content::Str().
The following tokens all produces Content::String(variant):
- Token::String(variant)
- Token::Str(variant)
- Token::UnitVariant { variant, .. }
Token::BorrowedStr(variant) produces Content::Str(variant) that was the real purpose to
use it in test in #933. This actually makes this test testing `Content` rather than type itself.
Correct way to represent enum one of:
- [xxxVariant { .. }]
- [Enum { .. }, xxxVariant { variant, .. }]
- [Enum { .. }, String(variant), <variant content>]
- [Enum { .. }, Str(variant), <variant content>]
- [Enum { .. }, BorrowedStr(variant), <variant content>]
2023-08-06 16:53:24 -05:00
|
|
|
Token::Unit,
|
2020-11-03 10:37:02 -06:00
|
|
|
Token::SeqEnd,
|
|
|
|
],
|
|
|
|
);
|
2017-05-14 14:21:00 -05:00
|
|
|
}
|
|
|
|
|
2017-05-10 21:56:05 -05:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_borrow() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
pub enum Input<'a> {
|
|
|
|
Package { name: &'a str },
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Input::Package { name: "borrowed" },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Input",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-05-10 21:56:05 -05:00
|
|
|
Token::BorrowedStr("type"),
|
|
|
|
Token::BorrowedStr("Package"),
|
|
|
|
Token::BorrowedStr("name"),
|
|
|
|
Token::BorrowedStr("borrowed"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-02-17 23:44:15 -06:00
|
|
|
#[test]
|
|
|
|
fn test_adjacently_tagged_enum() {
|
2017-02-19 18:04:50 -06:00
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2017-02-19 18:04:39 -06:00
|
|
|
#[serde(tag = "t", content = "c")]
|
2017-02-19 18:04:50 -06:00
|
|
|
enum AdjacentlyTagged<T> {
|
2017-02-19 18:04:39 -06:00
|
|
|
Unit,
|
2017-02-19 18:04:50 -06:00
|
|
|
Newtype(T),
|
2017-02-19 18:04:39 -06:00
|
|
|
Tuple(u8, u8),
|
|
|
|
Struct { f: u8 },
|
2017-02-17 23:44:15 -06:00
|
|
|
}
|
|
|
|
|
2017-02-19 18:04:50 -06:00
|
|
|
// unit with no content
|
2017-11-12 11:52:39 -06:00
|
|
|
assert_ser_tokens(
|
2017-02-19 18:04:50 -06:00
|
|
|
&AdjacentlyTagged::Unit::<u8>,
|
2017-02-17 23:44:15 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-02-17 23:44:15 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-17 23:44:15 -06:00
|
|
|
);
|
|
|
|
|
2017-11-12 11:52:39 -06:00
|
|
|
// unit with no content
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Unit::<u8>,
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-11-12 11:52:39 -06:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-11-12 11:52:39 -06:00
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
2017-02-19 18:04:50 -06:00
|
|
|
// unit with tag first
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Unit::<u8>,
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-19 18:04:50 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
// unit with content first
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Unit::<u8>,
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-19 18:04:50 -06:00
|
|
|
);
|
|
|
|
|
2017-04-27 13:24:09 -05:00
|
|
|
// unit with excess content (f, g, h)
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Unit::<u8>,
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-04-27 13:24:09 -05:00
|
|
|
Token::Str("f"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-04-27 13:24:09 -05:00
|
|
|
Token::Str("g"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Str("c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Str("h"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
2017-02-19 18:04:50 -06:00
|
|
|
// newtype with tag first
|
|
|
|
assert_tokens(
|
|
|
|
&AdjacentlyTagged::Newtype::<u8>(1),
|
2017-02-17 23:44:15 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Newtype",
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("c"),
|
2017-02-17 23:44:15 -06:00
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-17 23:44:15 -06:00
|
|
|
);
|
|
|
|
|
2017-02-19 18:04:50 -06:00
|
|
|
// newtype with content first
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Newtype::<u8>(1),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Newtype",
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-19 18:04:50 -06:00
|
|
|
);
|
|
|
|
|
2020-05-09 22:58:28 -05:00
|
|
|
// optional newtype with no content field
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Newtype::<Option<u8>>(None),
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Newtype",
|
|
|
|
},
|
2020-05-09 22:58:28 -05:00
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
2017-02-19 18:04:50 -06:00
|
|
|
// tuple with tag first
|
|
|
|
assert_tokens(
|
|
|
|
&AdjacentlyTagged::Tuple::<u8>(1, 1),
|
2017-02-17 23:44:15 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Tuple",
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("c"),
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Tuple { len: 2 },
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::U8(1),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::TupleEnd,
|
2017-02-17 23:44:15 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-17 23:44:15 -06:00
|
|
|
);
|
|
|
|
|
2017-02-19 18:04:50 -06:00
|
|
|
// tuple with content first
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Tuple::<u8>(1, 1),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("c"),
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Tuple { len: 2 },
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::U8(1),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::TupleEnd,
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Tuple",
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-19 18:04:50 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
// struct with tag first
|
|
|
|
assert_tokens(
|
|
|
|
&AdjacentlyTagged::Struct::<u8> { f: 1 },
|
2017-02-17 23:44:15 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Struct",
|
|
|
|
},
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::Str("c"),
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Struct",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-17 23:44:15 -06:00
|
|
|
Token::Str("f"),
|
2017-02-19 18:04:39 -06:00
|
|
|
Token::U8(1),
|
2017-02-17 23:44:15 -06:00
|
|
|
Token::StructEnd,
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-17 23:44:15 -06:00
|
|
|
);
|
2017-02-19 18:04:50 -06:00
|
|
|
|
|
|
|
// struct with content first
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Struct::<u8> { f: 1 },
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("c"),
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Struct",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::Str("f"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Struct",
|
|
|
|
},
|
2017-02-19 18:04:50 -06:00
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-19 18:04:50 -06:00
|
|
|
);
|
2023-06-12 08:27:28 -05:00
|
|
|
|
2023-07-08 20:17:41 -05:00
|
|
|
// integer field keys
|
2023-06-12 08:27:28 -05:00
|
|
|
assert_de_tokens(
|
2023-07-08 20:17:41 -05:00
|
|
|
&AdjacentlyTagged::Newtype::<u8>(1),
|
2023-06-12 08:27:28 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2023-06-12 10:17:15 -05:00
|
|
|
Token::U64(1), // content field
|
2023-06-12 08:27:28 -05:00
|
|
|
Token::U8(1),
|
2023-06-12 10:17:15 -05:00
|
|
|
Token::U64(0), // tag field
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Newtype",
|
|
|
|
},
|
2023-06-12 08:27:28 -05:00
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
2023-07-08 20:17:41 -05:00
|
|
|
// byte-array field keys
|
2023-06-12 08:27:28 -05:00
|
|
|
assert_de_tokens(
|
2023-07-08 20:17:41 -05:00
|
|
|
&AdjacentlyTagged::Newtype::<u8>(1),
|
2023-06-12 08:27:28 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Bytes(b"c"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::Bytes(b"t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Newtype",
|
|
|
|
},
|
2023-06-12 08:27:28 -05:00
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
2017-02-17 23:44:15 -06:00
|
|
|
}
|
2017-02-24 15:48:03 -06:00
|
|
|
|
2017-04-27 14:21:32 -05:00
|
|
|
#[test]
|
|
|
|
fn test_adjacently_tagged_enum_deny_unknown_fields() {
|
|
|
|
#[derive(Debug, PartialEq, Deserialize)]
|
|
|
|
#[serde(tag = "t", content = "c", deny_unknown_fields)]
|
|
|
|
enum AdjacentlyTagged {
|
|
|
|
Unit,
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&AdjacentlyTagged::Unit,
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-04-27 14:21:32 -05:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-04-27 14:21:32 -05:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens_error::<AdjacentlyTagged>(
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-04-27 14:21:32 -05:00
|
|
|
Token::Str("t"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2017-04-27 14:21:32 -05:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Str("h"),
|
|
|
|
],
|
2017-12-23 22:13:08 -06:00
|
|
|
r#"invalid value: string "h", expected "t" or "c""#,
|
2017-04-27 14:21:32 -05:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens_error::<AdjacentlyTagged>(
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-04-27 14:21:32 -05:00
|
|
|
Token::Str("h"),
|
|
|
|
],
|
2017-12-23 22:13:08 -06:00
|
|
|
r#"invalid value: string "h", expected "t" or "c""#,
|
2017-04-27 14:21:32 -05:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens_error::<AdjacentlyTagged>(
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-04-27 14:21:32 -05:00
|
|
|
Token::Str("c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Str("h"),
|
|
|
|
],
|
2017-12-23 22:13:08 -06:00
|
|
|
r#"invalid value: string "h", expected "t" or "c""#,
|
2017-04-27 14:21:32 -05:00
|
|
|
);
|
2023-06-12 08:27:28 -05:00
|
|
|
|
|
|
|
assert_de_tokens_error::<AdjacentlyTagged>(
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
2023-06-12 10:17:15 -05:00
|
|
|
Token::U64(0), // tag field
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "AdjacentlyTagged",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "Unit",
|
|
|
|
},
|
2023-06-12 08:27:28 -05:00
|
|
|
Token::U64(3),
|
|
|
|
],
|
2023-07-08 20:02:16 -05:00
|
|
|
r#"invalid value: integer `3`, expected "t" or "c""#,
|
2023-06-12 08:27:28 -05:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens_error::<AdjacentlyTagged>(
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "AdjacentlyTagged",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Bytes(b"c"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::Bytes(b"h"),
|
|
|
|
],
|
2023-07-08 20:02:16 -05:00
|
|
|
r#"invalid value: byte array, expected "t" or "c""#,
|
2017-04-27 14:21:32 -05:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-02-24 15:48:03 -06:00
|
|
|
#[test]
|
|
|
|
fn test_enum_in_internally_tagged_enum() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
enum Outer {
|
|
|
|
Inner(Inner),
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
enum Inner {
|
|
|
|
Unit,
|
|
|
|
Newtype(u8),
|
|
|
|
Tuple(u8, u8),
|
|
|
|
Struct { f: u8 },
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Unit),
|
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(2) },
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Inner"),
|
|
|
|
Token::Str("Unit"),
|
|
|
|
Token::Unit,
|
|
|
|
Token::MapEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Newtype(1)),
|
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(2) },
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Inner"),
|
|
|
|
Token::Str("Newtype"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::MapEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
|
2023-05-09 03:02:44 -05:00
|
|
|
// Reaches crate::private::de::content::VariantDeserializer::tuple_variant
|
|
|
|
// Content::Seq case
|
|
|
|
// via ContentDeserializer::deserialize_enum
|
2017-02-24 15:48:03 -06:00
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Tuple(1, 1)),
|
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(2) },
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Inner"),
|
|
|
|
Token::Str("Tuple"),
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleStruct {
|
|
|
|
name: "Tuple",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::U8(1),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::TupleStructEnd,
|
|
|
|
Token::MapEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
|
2023-05-09 03:02:44 -05:00
|
|
|
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
|
|
|
|
// Content::Map case
|
|
|
|
// via ContentDeserializer::deserialize_enum
|
2017-02-24 15:48:03 -06:00
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Struct { f: 1 }),
|
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Map { len: Some(2) },
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Inner"),
|
|
|
|
Token::Str("Struct"),
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Struct",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::Str("f"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
|
|
|
Token::MapEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
2023-05-09 03:02:44 -05:00
|
|
|
|
|
|
|
// Reaches crate::private::de::content::VariantDeserializer::struct_variant
|
|
|
|
// Content::Seq case
|
|
|
|
// via ContentDeserializer::deserialize_enum
|
|
|
|
assert_de_tokens(
|
|
|
|
&Outer::Inner(Inner::Struct { f: 1 }),
|
|
|
|
&[
|
|
|
|
Token::Map { len: Some(2) },
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Inner"),
|
|
|
|
Token::Str("Struct"),
|
|
|
|
Token::Seq { len: Some(1) },
|
|
|
|
Token::U8(1), // f
|
|
|
|
Token::SeqEnd,
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
2017-02-24 15:48:03 -06:00
|
|
|
}
|
|
|
|
|
2018-12-27 10:57:29 -06:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_struct() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2018-12-27 18:49:08 -06:00
|
|
|
#[serde(tag = "type")]
|
2018-12-27 10:57:29 -06:00
|
|
|
pub struct Struct {
|
|
|
|
a: u8,
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
2018-12-27 18:49:08 -06:00
|
|
|
&Struct { a: 1 },
|
2018-12-27 10:57:29 -06:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Struct",
|
|
|
|
len: 2,
|
|
|
|
},
|
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("Struct"),
|
|
|
|
Token::Str("a"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Struct { a: 1 },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Struct",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("a"),
|
|
|
|
Token::U8(1),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2018-12-27 19:48:47 -06:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_braced_struct_with_zero_fields() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "type")]
|
|
|
|
struct S {}
|
|
|
|
|
|
|
|
assert_tokens(
|
2018-12-28 11:19:32 -06:00
|
|
|
&S {},
|
2018-12-27 19:48:47 -06:00
|
|
|
&[
|
2018-12-28 11:19:32 -06:00
|
|
|
Token::Struct { name: "S", len: 1 },
|
2018-12-27 19:48:47 -06:00
|
|
|
Token::Str("type"),
|
|
|
|
Token::Str("S"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-02-02 19:09:37 -06:00
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_struct_with_flattened_field() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2019-02-03 17:39:32 -06:00
|
|
|
#[serde(tag = "tag_struct")]
|
2019-02-02 19:09:37 -06:00
|
|
|
pub struct Struct {
|
|
|
|
#[serde(flatten)]
|
2019-02-03 17:39:32 -06:00
|
|
|
pub flat: Enum,
|
2019-02-02 19:09:37 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
2019-02-03 17:39:32 -06:00
|
|
|
#[serde(tag = "tag_enum", content = "content")]
|
2019-02-02 19:09:37 -06:00
|
|
|
pub enum Enum {
|
|
|
|
A(u64),
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
2019-02-03 17:39:32 -06:00
|
|
|
&Struct { flat: Enum::A(0) },
|
2019-02-02 19:09:37 -06:00
|
|
|
&[
|
|
|
|
Token::Map { len: None },
|
|
|
|
Token::Str("tag_struct"),
|
|
|
|
Token::Str("Struct"),
|
|
|
|
Token::Str("tag_enum"),
|
2023-07-31 13:53:02 -05:00
|
|
|
Token::UnitVariant {
|
2023-08-02 00:43:26 -05:00
|
|
|
name: "Enum",
|
2023-07-31 13:53:02 -05:00
|
|
|
variant: "A",
|
|
|
|
},
|
2019-02-02 19:09:37 -06:00
|
|
|
Token::Str("content"),
|
|
|
|
Token::U64(0),
|
2019-02-03 17:39:32 -06:00
|
|
|
Token::MapEnd,
|
|
|
|
],
|
2019-02-02 19:09:37 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2019-02-03 17:39:32 -06:00
|
|
|
&Struct { flat: Enum::A(0) },
|
2019-02-02 19:09:37 -06:00
|
|
|
&[
|
|
|
|
Token::Map { len: None },
|
|
|
|
Token::Str("tag_enum"),
|
|
|
|
Token::Str("A"),
|
|
|
|
Token::Str("content"),
|
|
|
|
Token::U64(0),
|
2019-02-03 17:39:32 -06:00
|
|
|
Token::MapEnd,
|
|
|
|
],
|
2019-02-02 19:09:37 -06:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2019-06-23 14:05:02 -05:00
|
|
|
#[test]
|
|
|
|
fn test_untagged_enum_with_flattened_integer_key() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
pub enum Untagged {
|
|
|
|
Variant {
|
|
|
|
#[serde(flatten)]
|
|
|
|
map: BTreeMap<u64, String>,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Untagged::Variant {
|
|
|
|
map: {
|
|
|
|
let mut map = BTreeMap::new();
|
|
|
|
map.insert(100, "BTreeMap".to_owned());
|
|
|
|
map
|
|
|
|
},
|
|
|
|
},
|
|
|
|
&[
|
|
|
|
Token::Map { len: None },
|
|
|
|
Token::U64(100),
|
|
|
|
Token::Str("BTreeMap"),
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-02-24 15:48:03 -06:00
|
|
|
#[test]
|
|
|
|
fn test_enum_in_untagged_enum() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
enum Outer {
|
|
|
|
Inner(Inner),
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
enum Inner {
|
|
|
|
Unit,
|
|
|
|
Newtype(u8),
|
|
|
|
Tuple(u8, u8),
|
|
|
|
Struct { f: u8 },
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Unit),
|
2018-04-30 03:41:22 -05:00
|
|
|
&[Token::UnitVariant {
|
|
|
|
name: "Inner",
|
|
|
|
variant: "Unit",
|
|
|
|
}],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Newtype(1)),
|
2017-12-23 22:13:08 -06:00
|
|
|
&[
|
|
|
|
Token::NewtypeVariant {
|
|
|
|
name: "Inner",
|
|
|
|
variant: "Newtype",
|
|
|
|
},
|
|
|
|
Token::U8(1),
|
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Tuple(1, 1)),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::TupleVariant {
|
|
|
|
name: "Inner",
|
|
|
|
variant: "Tuple",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::U8(1),
|
|
|
|
Token::U8(1),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::TupleVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Outer::Inner(Inner::Struct { f: 1 }),
|
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "Inner",
|
|
|
|
variant: "Struct",
|
|
|
|
len: 1,
|
|
|
|
},
|
2017-02-24 15:48:03 -06:00
|
|
|
Token::Str("f"),
|
|
|
|
Token::U8(1),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-24 15:48:03 -06:00
|
|
|
);
|
|
|
|
}
|
2017-02-25 13:58:34 -06:00
|
|
|
|
2018-04-19 11:52:27 -05:00
|
|
|
#[test]
|
|
|
|
fn test_untagged_bytes() {
|
|
|
|
#[derive(Debug, PartialEq, Deserialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
enum Untagged {
|
|
|
|
String {
|
|
|
|
string: String,
|
|
|
|
},
|
|
|
|
Bytes {
|
|
|
|
#[serde(with = "bytes")]
|
|
|
|
bytes: Vec<u8>,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&Untagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::Str("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&Untagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::String("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&Untagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::Bytes(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
2018-04-30 03:41:22 -05:00
|
|
|
&Untagged::String {
|
|
|
|
string: "\0".to_owned(),
|
|
|
|
},
|
2018-04-19 11:52:27 -05:00
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("string"),
|
|
|
|
Token::ByteBuf(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Untagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::Str("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Untagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::String("\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Untagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::Bytes(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Untagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::ByteBuf(b"\0"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Untagged::Bytes { bytes: vec![0] },
|
|
|
|
&[
|
|
|
|
Token::Struct {
|
|
|
|
name: "Untagged",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("bytes"),
|
|
|
|
Token::Seq { len: Some(1) },
|
|
|
|
Token::U8(0),
|
|
|
|
Token::SeqEnd,
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-02-25 13:58:34 -06:00
|
|
|
#[test]
|
|
|
|
fn test_rename_all() {
|
|
|
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
|
|
|
#[serde(rename_all = "snake_case")]
|
|
|
|
enum E {
|
|
|
|
#[serde(rename_all = "camelCase")]
|
|
|
|
Serialize {
|
|
|
|
serialize: bool,
|
|
|
|
serialize_seq: bool,
|
|
|
|
},
|
|
|
|
#[serde(rename_all = "kebab-case")]
|
|
|
|
SerializeSeq {
|
|
|
|
serialize: bool,
|
|
|
|
serialize_seq: bool,
|
|
|
|
},
|
|
|
|
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
|
|
|
SerializeMap {
|
|
|
|
serialize: bool,
|
|
|
|
serialize_seq: bool,
|
2017-12-23 22:13:08 -06:00
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
|
|
|
#[serde(rename_all = "PascalCase")]
|
|
|
|
struct S {
|
|
|
|
serialize: bool,
|
|
|
|
serialize_seq: bool,
|
|
|
|
}
|
|
|
|
|
2017-09-05 13:23:38 -05:00
|
|
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
|
|
|
#[serde(rename_all = "SCREAMING-KEBAB-CASE")]
|
|
|
|
struct ScreamingKebab {
|
|
|
|
serialize: bool,
|
|
|
|
serialize_seq: bool,
|
|
|
|
}
|
|
|
|
|
2017-02-25 13:58:34 -06:00
|
|
|
assert_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&E::Serialize {
|
2017-12-23 22:13:08 -06:00
|
|
|
serialize: true,
|
|
|
|
serialize_seq: true,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "E",
|
|
|
|
variant: "serialize",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
Token::Str("serialize"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("serializeSeq"),
|
|
|
|
Token::Bool(true),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-25 13:58:34 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&E::SerializeSeq {
|
2017-12-23 22:13:08 -06:00
|
|
|
serialize: true,
|
|
|
|
serialize_seq: true,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "E",
|
|
|
|
variant: "serialize_seq",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
Token::Str("serialize"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("serialize-seq"),
|
|
|
|
Token::Bool(true),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-25 13:58:34 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&E::SerializeMap {
|
2017-12-23 22:13:08 -06:00
|
|
|
serialize: true,
|
|
|
|
serialize_seq: true,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::StructVariant {
|
|
|
|
name: "E",
|
|
|
|
variant: "serialize_map",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
Token::Str("SERIALIZE"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("SERIALIZE_SEQ"),
|
|
|
|
Token::Bool(true),
|
2017-04-05 12:40:14 -05:00
|
|
|
Token::StructVariantEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-25 13:58:34 -06:00
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
2017-04-13 14:28:23 -05:00
|
|
|
&S {
|
2017-12-23 22:13:08 -06:00
|
|
|
serialize: true,
|
|
|
|
serialize_seq: true,
|
|
|
|
},
|
2017-02-25 13:58:34 -06:00
|
|
|
&[
|
2017-04-19 15:06:31 -05:00
|
|
|
Token::Struct { name: "S", len: 2 },
|
2017-02-25 13:58:34 -06:00
|
|
|
Token::Str("Serialize"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("SerializeSeq"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::StructEnd,
|
2017-04-13 14:28:23 -05:00
|
|
|
],
|
2017-02-25 13:58:34 -06:00
|
|
|
);
|
2017-09-05 13:23:38 -05:00
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&ScreamingKebab {
|
2017-12-23 22:13:08 -06:00
|
|
|
serialize: true,
|
|
|
|
serialize_seq: true,
|
|
|
|
},
|
2017-09-05 13:23:38 -05:00
|
|
|
&[
|
2017-12-23 22:13:08 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "ScreamingKebab",
|
|
|
|
len: 2,
|
|
|
|
},
|
2017-09-05 13:23:38 -05:00
|
|
|
Token::Str("SERIALIZE"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("SERIALIZE-SEQ"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::StructEnd,
|
2017-12-23 22:13:08 -06:00
|
|
|
],
|
2017-09-05 13:23:38 -05:00
|
|
|
);
|
2017-02-25 13:58:34 -06:00
|
|
|
}
|
2017-11-07 01:32:26 -06:00
|
|
|
|
2019-12-15 12:08:27 -06:00
|
|
|
#[test]
|
|
|
|
fn test_rename_all_fields() {
|
|
|
|
#[derive(Serialize, Deserialize, Debug, PartialEq)]
|
|
|
|
#[serde(rename_all_fields = "kebab-case")]
|
|
|
|
enum E {
|
|
|
|
V1,
|
|
|
|
V2(bool),
|
|
|
|
V3 {
|
|
|
|
a_field: bool,
|
|
|
|
another_field: bool,
|
|
|
|
#[serde(rename = "last-field")]
|
|
|
|
yet_another_field: bool,
|
|
|
|
},
|
|
|
|
#[serde(rename_all = "snake_case")]
|
|
|
|
V4 {
|
|
|
|
a_field: bool,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&E::V3 {
|
|
|
|
a_field: true,
|
|
|
|
another_field: true,
|
|
|
|
yet_another_field: true,
|
|
|
|
},
|
|
|
|
&[
|
|
|
|
Token::StructVariant {
|
|
|
|
name: "E",
|
|
|
|
variant: "V3",
|
|
|
|
len: 3,
|
|
|
|
},
|
|
|
|
Token::Str("a-field"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("another-field"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::Str("last-field"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::StructVariantEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&E::V4 { a_field: true },
|
|
|
|
&[
|
|
|
|
Token::StructVariant {
|
|
|
|
name: "E",
|
|
|
|
variant: "V4",
|
|
|
|
len: 1,
|
|
|
|
},
|
|
|
|
Token::Str("a_field"),
|
|
|
|
Token::Bool(true),
|
|
|
|
Token::StructVariantEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-11-07 01:32:26 -06:00
|
|
|
#[test]
|
|
|
|
fn test_untagged_newtype_variant_containing_unit_struct_not_map() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
struct Unit;
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(untagged)]
|
|
|
|
enum Message {
|
|
|
|
Unit(Unit),
|
|
|
|
Map(BTreeMap<String, String>),
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Message::Map(BTreeMap::new()),
|
2017-12-23 22:13:08 -06:00
|
|
|
&[Token::Map { len: Some(0) }, Token::MapEnd],
|
2017-11-07 01:32:26 -06:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_internally_tagged_newtype_variant_containing_unit_struct() {
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
struct Info;
|
|
|
|
|
|
|
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
#[serde(tag = "topic")]
|
|
|
|
enum Message {
|
|
|
|
Info(Info),
|
|
|
|
}
|
|
|
|
|
|
|
|
assert_tokens(
|
|
|
|
&Message::Info(Info),
|
|
|
|
&[
|
|
|
|
Token::Map { len: Some(1) },
|
|
|
|
Token::Str("topic"),
|
|
|
|
Token::Str("Info"),
|
|
|
|
Token::MapEnd,
|
|
|
|
],
|
|
|
|
);
|
2020-11-03 10:55:57 -06:00
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Message::Info(Info),
|
|
|
|
&[
|
2021-03-05 21:36:25 -06:00
|
|
|
Token::Struct {
|
|
|
|
name: "Message",
|
|
|
|
len: 1,
|
|
|
|
},
|
2020-11-03 10:55:57 -06:00
|
|
|
Token::Str("topic"),
|
|
|
|
Token::Str("Info"),
|
|
|
|
Token::StructEnd,
|
|
|
|
],
|
|
|
|
);
|
|
|
|
|
|
|
|
assert_de_tokens(
|
|
|
|
&Message::Info(Info),
|
|
|
|
&[
|
|
|
|
Token::Seq { len: Some(1) },
|
|
|
|
Token::Str("Info"),
|
|
|
|
Token::SeqEnd,
|
|
|
|
],
|
|
|
|
);
|
2017-11-07 01:32:26 -06:00
|
|
|
}
|
2020-05-17 11:14:30 -05:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_packed_struct_can_derive_serialize() {
|
|
|
|
#[derive(Copy, Clone, Serialize)]
|
|
|
|
#[repr(packed, C)]
|
2024-03-11 22:10:02 -05:00
|
|
|
#[allow(dead_code)]
|
2020-05-17 11:14:30 -05:00
|
|
|
struct PackedC {
|
|
|
|
t: f32,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Copy, Clone, Serialize)]
|
|
|
|
#[repr(C, packed)]
|
2024-03-11 22:10:02 -05:00
|
|
|
#[allow(dead_code)]
|
2020-05-17 11:14:30 -05:00
|
|
|
struct CPacked {
|
|
|
|
t: f32,
|
|
|
|
}
|
2020-05-19 15:01:41 -05:00
|
|
|
|
|
|
|
#[derive(Copy, Clone, Serialize)]
|
|
|
|
#[repr(C, packed(2))]
|
2024-03-11 22:10:02 -05:00
|
|
|
#[allow(dead_code)]
|
2020-05-19 15:01:41 -05:00
|
|
|
struct CPacked2 {
|
|
|
|
t: f32,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Copy, Clone, Serialize)]
|
|
|
|
#[repr(packed(2), C)]
|
2024-03-11 22:10:02 -05:00
|
|
|
#[allow(dead_code)]
|
2020-05-19 15:01:41 -05:00
|
|
|
struct Packed2C {
|
|
|
|
t: f32,
|
|
|
|
}
|
2020-05-17 11:14:30 -05:00
|
|
|
}
|