Compare commits

...

36 Commits

Author SHA1 Message Date
David Tolnay 1c1eecabc0 Release 1.0.94 2019-06-27 10:55:12 -07:00
David Tolnay abd3fd004e Merge pull request #1559 from dtolnay/ignore-enum
Accept enums in IgnoredAny
2019-06-27 10:54:22 -07:00
David Tolnay 15ee353488 IgnoredAny::visit_enum for old compilers 2019-06-27 10:45:18 -07:00
David Tolnay e75efbfd31 Support ignoring enum with IgnoredAny 2019-06-27 10:29:55 -07:00
David Tolnay 1c97a7ecb3 Add comprehensive test for deserializing IgnoredAny from enum 2019-06-27 10:23:39 -07:00
David Tolnay fccd3e9fba Add deserialization tests for IgnoredAny 2019-06-27 10:07:06 -07:00
David Tolnay 4cb13b33e0 Release 1.0.93 2019-06-23 12:50:17 -07:00
David Tolnay 629802f2ab Merge pull request #1555 from serde-rs/int
Allow integer key in untagged flattened map
2019-06-23 12:49:21 -07:00
David Tolnay afb1754528 Allow integer key in untagged flattened map 2019-06-23 12:09:15 -07:00
David Tolnay dbd67c6c89 Clippy const_static_lifetime lint has been renamed 2019-06-19 01:34:13 -07:00
David Tolnay ed01bdb9dd Remove fixed cast_precision_loss lint 2019-06-15 10:13:05 -07:00
David Tolnay b54821d8ab Alloc feature has been stabilized
warning: the feature `alloc` has been stable since 1.36.0 and no longer requires an attribute to enable
      --> serde/src/lib.rs:84:40
       |
    84 | #![cfg_attr(feature = "alloc", feature(alloc))]
       |                                        ^^^^^
       |
       = note: #[warn(stable_features)] on by default
2019-05-31 21:26:43 -07:00
David Tolnay 89c6a79b6e Suppress a new pedantic lint 2019-05-31 21:25:36 -07:00
David Tolnay cd0412bddc Release 1.0.92 2019-05-31 13:44:01 -07:00
David Tolnay e42262f0f5 Provide ToString for re-export by serde::export 2019-05-31 13:42:22 -07:00
David Tolnay 0a3eeab273 Merge pull request #1543 from jplatte/alloc-de-compile-fix
Fix a compile error in derive(Deserialize) with no_std + alloc
2019-05-31 13:41:07 -07:00
Jonas Platte e4e110e28f Fix a compile error in derive(Deserialize) with no_std + alloc 2019-05-31 22:16:40 +02:00
David Tolnay 0726623389 Ignore bare_trait_objects lint to support old compilers 2019-05-31 11:34:18 -07:00
David Tolnay fd9d334d01 Smaller format for license section 2019-05-18 17:35:47 -07:00
David Tolnay 840eb14121 Merge pull request #1528 from est31/no_variable_names
Don't use variable names
2019-05-17 08:57:14 -07:00
est31 8fef196ee4 Don't use variable names
They aren't needed. This makes the macro a bit simpler
2019-05-17 16:50:41 +02:00
David Tolnay 9c756f1ec0 Disable ui tests on emscripten
These hit a strange error in our Emscripten builder in Travis as well as
locally through cargo web:

    ERROR: failed to execute cargo: Resource temporarily unavailable (os error 11)
2019-05-12 00:28:22 -07:00
David Tolnay 6dd2b4607f Switch to SPDX 2.1 license expression 2019-05-09 15:21:20 -07:00
David Tolnay 1e9ae88f53 Work around "failed to select a version for serde_test_suite"
Without this:

    error: failed to select a version for `serde_test_suite`.
        ... required by package `serde_test_suite-tests v0.0.0`
    versions that meet the requirements `= 0.0.0` are: 0.0.0

    the package `serde_test_suite-tests` depends on `serde_test_suite`, with features: `serde` but `serde_test_suite` does not have these features.

    failed to select a version for `serde_test_suite` which could resolve this conflict

Seems like a Cargo bug -- I will minimize and report.
2019-05-06 22:53:38 -07:00
David Tolnay 5cc3902ab9 Release 1.0.91 2019-05-06 16:27:04 -07:00
David Tolnay c8e09e2d6d Merge pull request #1522 from dtolnay/enum
Support deserializing enum out of MapAccessDeserializer
2019-05-06 16:26:43 -07:00
David Tolnay e2a2ba116c Remove old instructions intended for compiletest 2019-05-06 16:17:30 -07:00
David Tolnay 0a9d24a218 Support deserializing enum out of MapAccessDeserializer 2019-05-06 16:11:28 -07:00
David Tolnay c222183669 Merge pull request #1521 from serde-rs/trybuild
Switch ui tests to trybuild
2019-05-06 10:44:25 -07:00
David Tolnay 140f9beee7 Switch ui tests to trybuild 2019-05-06 10:25:47 -07:00
David Tolnay 28ce892617 Disable compiletest in appveyor
error[E0464]: multiple matching crates for `serde`
      --> $DIR/wrong_getter.rs:15:10
       |
    15 | #[derive(Serialize)]
       |          ^^^^^^^^^
       |
       = note: candidates:
               crate `serde`: /?/C:/projects/serde/test_suite/deps/target/debug/deps/libserde-a1a28acc73b0edde.rlib
               crate `serde`: /?/C:/Users/appveyor/.
2019-04-22 23:18:21 -07:00
David Tolnay 1e6d3ff99b Merge pull request #1512 from dtolnay/off
Temporarily disable compiletest testing in CI
2019-04-22 23:05:54 -07:00
David Tolnay fba1b92cbf Temporarily disable compiletest testing in CI
The nightly compiler just added a dependency on serde so libserde ends
up in the sysroot, breaking crate resolution inside of compiletest. We
will need to figure out how else to run these tests.

    error[E0464]: multiple matching crates for `serde`
      --> $DIR/wrong_ser.rs:9:10
       |
     9 | #[derive(Serialize)]
       |          ^^^^^^^^^
       |
       = note: candidates:
               crate `serde`: /rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libserde-2b75907288aa7c40.rlib
               crate `serde`: /serde/test_suite/deps/target/debug/deps/libserde-33e0a319242344ce.rlib
2019-04-22 22:42:36 -07:00
David Tolnay ce1686379d Update test suite to nightly-2019-04-20 2019-04-19 22:54:59 -07:00
David Tolnay 79a20e9e33 Resolve option_map_unwrap_or_else lint 2019-04-10 22:57:47 -07:00
David Tolnay e9cd73f78e Remove link to hjson
This project has still not been updated to Serde 1.0.
2019-04-08 10:39:55 -07:00
119 changed files with 430 additions and 444 deletions
+1 -3
View File
@@ -26,10 +26,8 @@ matrix:
- cargo build --no-default-features --features alloc - cargo build --no-default-features --features alloc
- cargo build --no-default-features --features rc,alloc - cargo build --no-default-features --features rc,alloc
- cargo test --features derive,rc,unstable - cargo test --features derive,rc,unstable
- cd "${TRAVIS_BUILD_DIR}/test_suite/deps"
- cargo build
- cd "${TRAVIS_BUILD_DIR}/test_suite" - cd "${TRAVIS_BUILD_DIR}/test_suite"
- cargo test --features compiletest,unstable - cargo test --features unstable
- cd "${TRAVIS_BUILD_DIR}/test_suite/no_std" - cd "${TRAVIS_BUILD_DIR}/test_suite/no_std"
- cargo build - cargo build
+9 -9
View File
@@ -81,19 +81,19 @@ good response, we are happy to respond to [GitHub issues][issues] as well.
[irc]: https://wiki.mozilla.org/IRC [irc]: https://wiki.mozilla.org/IRC
[issues]: https://github.com/serde-rs/serde/issues/new/choose [issues]: https://github.com/serde-rs/serde/issues/new/choose
## License <br>
Serde is licensed under either of #### License
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or <sup>
http://www.apache.org/licenses/LICENSE-2.0) Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
* MIT license ([LICENSE-MIT](LICENSE-MIT) or 2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
http://opensource.org/licenses/MIT) </sup>
at your option. <br>
### Contribution
<sub>
Unless you explicitly state otherwise, any contribution intentionally submitted Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in Serde by you, as defined in the Apache-2.0 license, shall be for inclusion in Serde by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions. dual licensed as above, without any additional terms or conditions.
</sub>
+1 -3
View File
@@ -35,7 +35,5 @@ for:
- cargo build --no-default-features --features alloc - cargo build --no-default-features --features alloc
- cargo build --no-default-features --features rc,alloc - cargo build --no-default-features --features rc,alloc
- cargo test --features derive,rc,unstable - cargo test --features derive,rc,unstable
- cd %APPVEYOR_BUILD_FOLDER%\test_suite\deps
- cargo build
- cd %APPVEYOR_BUILD_FOLDER%\test_suite - cd %APPVEYOR_BUILD_FOLDER%\test_suite
- cargo test --features compiletest,unstable - cargo test --features unstable
+2 -2
View File
@@ -1,8 +1,8 @@
[package] [package]
name = "serde" name = "serde"
version = "1.0.90" # remember to update html_root_url version = "1.0.94" # remember to update html_root_url
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"] authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"]
license = "MIT/Apache-2.0" license = "MIT OR Apache-2.0"
description = "A generic serialization/deserialization framework" description = "A generic serialization/deserialization framework"
homepage = "https://serde.rs" homepage = "https://serde.rs"
repository = "https://github.com/serde-rs/serde" repository = "https://github.com/serde-rs/serde"
+10 -1
View File
@@ -1,6 +1,8 @@
use lib::*; use lib::*;
use de::{Deserialize, Deserializer, Error, MapAccess, SeqAccess, Visitor}; use de::{
Deserialize, Deserializer, EnumAccess, Error, MapAccess, SeqAccess, VariantAccess, Visitor,
};
/// An efficient way of discarding data from a deserializer. /// An efficient way of discarding data from a deserializer.
/// ///
@@ -205,6 +207,13 @@ impl<'de> Visitor<'de> for IgnoredAny {
let _ = bytes; let _ = bytes;
Ok(IgnoredAny) Ok(IgnoredAny)
} }
fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
where
A: EnumAccess<'de>,
{
data.variant::<IgnoredAny>()?.1.newtype_variant()
}
} }
impl<'de> Deserialize<'de> for IgnoredAny { impl<'de> Deserialize<'de> for IgnoredAny {
+37 -39
View File
@@ -965,7 +965,7 @@ impl<'de, T> Deserialize<'de> for [T; 0] {
} }
macro_rules! array_impls { macro_rules! array_impls {
($($len:expr => ($($n:tt $name:ident)+))+) => { ($($len:expr => ($($n:tt)+))+) => {
$( $(
impl<'de, T> Visitor<'de> for ArrayVisitor<[T; $len]> impl<'de, T> Visitor<'de> for ArrayVisitor<[T; $len]>
where where
@@ -982,14 +982,12 @@ macro_rules! array_impls {
where where
A: SeqAccess<'de>, A: SeqAccess<'de>,
{ {
$( Ok([$(
let $name = match try!(seq.next_element()) { match try!(seq.next_element()) {
Some(val) => val, Some(val) => val,
None => return Err(Error::invalid_length($n, &self)), None => return Err(Error::invalid_length($n, &self)),
}; }
)+ ),+])
Ok([$($name),+])
} }
} }
@@ -1045,38 +1043,38 @@ macro_rules! array_impls {
} }
array_impls! { array_impls! {
1 => (0 a) 1 => (0)
2 => (0 a 1 b) 2 => (0 1)
3 => (0 a 1 b 2 c) 3 => (0 1 2)
4 => (0 a 1 b 2 c 3 d) 4 => (0 1 2 3)
5 => (0 a 1 b 2 c 3 d 4 e) 5 => (0 1 2 3 4)
6 => (0 a 1 b 2 c 3 d 4 e 5 f) 6 => (0 1 2 3 4 5)
7 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g) 7 => (0 1 2 3 4 5 6)
8 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h) 8 => (0 1 2 3 4 5 6 7)
9 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i) 9 => (0 1 2 3 4 5 6 7 8)
10 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j) 10 => (0 1 2 3 4 5 6 7 8 9)
11 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k) 11 => (0 1 2 3 4 5 6 7 8 9 10)
12 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l) 12 => (0 1 2 3 4 5 6 7 8 9 10 11)
13 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m) 13 => (0 1 2 3 4 5 6 7 8 9 10 11 12)
14 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n) 14 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13)
15 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o) 15 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14)
16 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p) 16 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)
17 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q) 17 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
18 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r) 18 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17)
19 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s) 19 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18)
20 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t) 20 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)
21 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u) 21 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
22 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v) 22 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21)
23 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w) 23 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22)
24 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x) 24 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23)
25 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y) 25 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24)
26 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z) 26 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25)
27 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z 26 aa) 27 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26)
28 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z 26 aa 27 ab) 28 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27)
29 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z 26 aa 27 ab 28 ac) 29 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28)
30 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z 26 aa 27 ab 28 ac 29 ad) 30 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29)
31 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z 26 aa 27 ab 28 ac 29 ad 30 ae) 31 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30)
32 => (0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 i 9 j 10 k 11 l 12 m 13 n 14 o 15 p 16 q 17 r 18 s 19 t 20 u 21 v 22 w 23 x 24 y 25 z 26 aa 27 ab 28 ac 29 ad 30 ae 31 af) 32 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
+118 -2
View File
@@ -1287,10 +1287,40 @@ where
visitor.visit_map(self.map) visitor.visit_map(self.map)
} }
fn deserialize_enum<V>(
self,
_name: &str,
_variants: &'static [&'static str],
visitor: V,
) -> Result<V::Value, Self::Error>
where
V: de::Visitor<'de>,
{
visitor.visit_enum(self)
}
forward_to_deserialize_any! { forward_to_deserialize_any! {
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
bytes byte_buf option unit unit_struct newtype_struct seq tuple bytes byte_buf option unit unit_struct newtype_struct seq tuple
tuple_struct map struct enum identifier ignored_any tuple_struct map struct identifier ignored_any
}
}
impl<'de, A> de::EnumAccess<'de> for MapAccessDeserializer<A>
where
A: de::MapAccess<'de>,
{
type Error = A::Error;
type Variant = private::MapAsEnum<A>;
fn variant_seed<T>(mut self, seed: T) -> Result<(T::Value, Self::Variant), Self::Error>
where
T: de::DeserializeSeed<'de>,
{
match self.map.next_key_seed(seed)? {
Some(key) => Ok((key, private::map_as_enum(self.map))),
None => Err(de::Error::invalid_type(de::Unexpected::Map, &"enum")),
}
} }
} }
@@ -1299,7 +1329,7 @@ where
mod private { mod private {
use lib::*; use lib::*;
use de::{self, Unexpected}; use de::{self, DeserializeSeed, Deserializer, MapAccess, Unexpected, VariantAccess, Visitor};
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct UnitOnly<E> { pub struct UnitOnly<E> {
@@ -1360,6 +1390,92 @@ mod private {
} }
} }
#[derive(Clone, Debug)]
pub struct MapAsEnum<A> {
map: A,
}
pub fn map_as_enum<A>(map: A) -> MapAsEnum<A> {
MapAsEnum { map: map }
}
impl<'de, A> VariantAccess<'de> for MapAsEnum<A>
where
A: MapAccess<'de>,
{
type Error = A::Error;
fn unit_variant(mut self) -> Result<(), Self::Error> {
self.map.next_value()
}
fn newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error>
where
T: DeserializeSeed<'de>,
{
self.map.next_value_seed(seed)
}
fn tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
self.map.next_value_seed(SeedTupleVariant {
len: len,
visitor: visitor,
})
}
fn struct_variant<V>(
mut self,
_fields: &'static [&'static str],
visitor: V,
) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
self.map
.next_value_seed(SeedStructVariant { visitor: visitor })
}
}
struct SeedTupleVariant<V> {
len: usize,
visitor: V,
}
impl<'de, V> DeserializeSeed<'de> for SeedTupleVariant<V>
where
V: Visitor<'de>,
{
type Value = V::Value;
fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_tuple(self.len, self.visitor)
}
}
struct SeedStructVariant<V> {
visitor: V,
}
impl<'de, V> DeserializeSeed<'de> for SeedStructVariant<V>
where
V: Visitor<'de>,
{
type Value = V::Value;
fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error>
where
D: Deserializer<'de>,
{
deserializer.deserialize_map(self.visitor)
}
}
/// Avoid having to restate the generic types on `MapDeserializer`. The /// Avoid having to restate the generic types on `MapDeserializer`. The
/// `Iterator::Item` contains enough information to figure out K and V. /// `Iterator::Item` contains enough information to figure out K and V.
pub trait Pair { pub trait Pair {
+1 -1
View File
@@ -9,7 +9,7 @@ pub use lib::result::Result::{self, Err, Ok};
pub use self::string::from_utf8_lossy; pub use self::string::from_utf8_lossy;
#[cfg(any(feature = "alloc", feature = "std"))] #[cfg(any(feature = "alloc", feature = "std"))]
pub use lib::Vec; pub use lib::{ToString, Vec};
mod string { mod string {
use lib::*; use lib::*;
+5 -7
View File
@@ -46,7 +46,6 @@
//! - [BSON], the data storage and network transfer format used by MongoDB. //! - [BSON], the data storage and network transfer format used by MongoDB.
//! - [Avro], a binary format used within Apache Hadoop, with support for schema //! - [Avro], a binary format used within Apache Hadoop, with support for schema
//! definition. //! definition.
//! - [Hjson], a variant of JSON designed to be readable and writable by humans.
//! - [JSON5], A superset of JSON including some productions from ES5. //! - [JSON5], A superset of JSON including some productions from ES5.
//! - [URL], the x-www-form-urlencoded format. //! - [URL], the x-www-form-urlencoded format.
//! - [Envy], a way to deserialize environment variables into Rust structs. //! - [Envy], a way to deserialize environment variables into Rust structs.
@@ -64,7 +63,6 @@
//! [RON]: https://github.com/ron-rs/ron //! [RON]: https://github.com/ron-rs/ron
//! [BSON]: https://github.com/zonyitoo/bson-rs //! [BSON]: https://github.com/zonyitoo/bson-rs
//! [Avro]: https://github.com/flavray/avro-rs //! [Avro]: https://github.com/flavray/avro-rs
//! [Hjson]: https://github.com/laktak/hjson-rust
//! [JSON5]: https://github.com/callum-oakley/json5-rs //! [JSON5]: https://github.com/callum-oakley/json5-rs
//! [URL]: https://github.com/nox/serde_urlencoded //! [URL]: https://github.com/nox/serde_urlencoded
//! [Envy]: https://github.com/softprops/envy //! [Envy]: https://github.com/softprops/envy
@@ -75,7 +73,7 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Serde types in rustdoc of other crates get linked to here. // Serde types in rustdoc of other crates get linked to here.
#![doc(html_root_url = "https://docs.rs/serde/1.0.90")] #![doc(html_root_url = "https://docs.rs/serde/1.0.94")]
// Support using Serde without the standard library! // Support using Serde without the standard library!
#![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(not(feature = "std"), no_std)]
// Unstable functionality only if the user asks for it. For tracking and // Unstable functionality only if the user asks for it. For tracking and
@@ -83,7 +81,7 @@
// //
// https://github.com/serde-rs/serde/issues/812 // https://github.com/serde-rs/serde/issues/812
#![cfg_attr(feature = "unstable", feature(specialization, never_type))] #![cfg_attr(feature = "unstable", feature(specialization, never_type))]
#![cfg_attr(feature = "alloc", feature(alloc))] #![allow(unknown_lints, bare_trait_objects)]
#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))] #![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
#![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))] #![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))]
// Ignored clippy and clippy_pedantic lints // Ignored clippy and clippy_pedantic lints
@@ -91,13 +89,13 @@
feature = "cargo-clippy", feature = "cargo-clippy",
allow( allow(
// not available in our oldest supported compiler // not available in our oldest supported compiler
const_static_lifetime, checked_conversions,
empty_enum, empty_enum,
redundant_field_names, redundant_field_names,
redundant_static_lifetimes,
// integer and float ser/de requires these sorts of casts // integer and float ser/de requires these sorts of casts
cast_possible_truncation, cast_possible_truncation,
cast_possible_wrap, cast_possible_wrap,
cast_precision_loss,
cast_sign_loss, cast_sign_loss,
// things are often more readable this way // things are often more readable this way
cast_lossless, cast_lossless,
@@ -155,7 +153,7 @@ mod lib {
#[cfg(all(feature = "alloc", not(feature = "std")))] #[cfg(all(feature = "alloc", not(feature = "std")))]
pub use alloc::string::{String, ToString}; pub use alloc::string::{String, ToString};
#[cfg(feature = "std")] #[cfg(feature = "std")]
pub use std::string::String; pub use std::string::{String, ToString};
#[cfg(all(feature = "alloc", not(feature = "std")))] #[cfg(all(feature = "alloc", not(feature = "std")))]
pub use alloc::vec::Vec; pub use alloc::vec::Vec;
+2
View File
@@ -1420,6 +1420,7 @@ mod content {
Content::ByteBuf(v) => visitor.visit_byte_buf(v), Content::ByteBuf(v) => visitor.visit_byte_buf(v),
Content::Bytes(v) => visitor.visit_borrowed_bytes(v), Content::Bytes(v) => visitor.visit_borrowed_bytes(v),
Content::U8(v) => visitor.visit_u8(v), Content::U8(v) => visitor.visit_u8(v),
Content::U64(v) => visitor.visit_u64(v),
_ => Err(self.invalid_type(&visitor)), _ => Err(self.invalid_type(&visitor)),
} }
} }
@@ -2123,6 +2124,7 @@ mod content {
Content::ByteBuf(ref v) => visitor.visit_bytes(v), Content::ByteBuf(ref v) => visitor.visit_bytes(v),
Content::Bytes(v) => visitor.visit_borrowed_bytes(v), Content::Bytes(v) => visitor.visit_borrowed_bytes(v),
Content::U8(v) => visitor.visit_u8(v), Content::U8(v) => visitor.visit_u8(v),
Content::U64(v) => visitor.visit_u64(v),
_ => Err(self.invalid_type(&visitor)), _ => Err(self.invalid_type(&visitor)),
} }
} }
+2 -2
View File
@@ -1,8 +1,8 @@
[package] [package]
name = "serde_derive" name = "serde_derive"
version = "1.0.90" # remember to update html_root_url version = "1.0.94" # remember to update html_root_url
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"] authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"]
license = "MIT/Apache-2.0" license = "MIT OR Apache-2.0"
description = "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]" description = "Macros 1.1 implementation of #[derive(Serialize, Deserialize)]"
homepage = "https://serde.rs" homepage = "https://serde.rs"
repository = "https://github.com/serde-rs/serde" repository = "https://github.com/serde-rs/serde"
+1 -1
View File
@@ -2059,7 +2059,7 @@ fn deserialize_identifier(
) = if collect_other_fields { ) = if collect_other_fields {
( (
Some(quote! { Some(quote! {
let __value = _serde::private::de::Content::String(__value.to_string()); let __value = _serde::private::de::Content::String(_serde::export::ToString::to_string(__value));
}), }),
Some(quote! { Some(quote! {
let __value = _serde::private::de::Content::Str(__value); let __value = _serde::private::de::Content::Str(__value);
+1 -2
View File
@@ -689,8 +689,7 @@ impl Container {
pub fn serde_path(&self) -> Cow<syn::Path> { pub fn serde_path(&self) -> Cow<syn::Path> {
self.custom_serde_path() self.custom_serde_path()
.map(Cow::Borrowed) .map_or_else(|| Cow::Owned(parse_quote!(_serde)), Cow::Borrowed)
.unwrap_or_else(|| Cow::Owned(parse_quote!(_serde)))
} }
} }
+3 -1
View File
@@ -13,7 +13,8 @@
//! //!
//! [https://serde.rs/derive.html]: https://serde.rs/derive.html //! [https://serde.rs/derive.html]: https://serde.rs/derive.html
#![doc(html_root_url = "https://docs.rs/serde_derive/1.0.90")] #![doc(html_root_url = "https://docs.rs/serde_derive/1.0.94")]
#![allow(unknown_lints, bare_trait_objects)]
#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))] #![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
#![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))] #![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))]
// Ignored clippy lints // Ignored clippy lints
@@ -34,6 +35,7 @@
feature = "cargo-clippy", feature = "cargo-clippy",
allow( allow(
cast_possible_truncation, cast_possible_truncation,
checked_conversions,
doc_markdown, doc_markdown,
enum_glob_use, enum_glob_use,
filter_map, filter_map,
+1 -1
View File
@@ -2,7 +2,7 @@
name = "serde_derive_internals" name = "serde_derive_internals"
version = "0.24.1" # remember to update html_root_url version = "0.24.1" # remember to update html_root_url
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"] authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"]
license = "MIT/Apache-2.0" license = "MIT OR Apache-2.0"
description = "AST representation used by Serde derive macros. Unstable." description = "AST representation used by Serde derive macros. Unstable."
homepage = "https://serde.rs" homepage = "https://serde.rs"
repository = "https://github.com/serde-rs/serde" repository = "https://github.com/serde-rs/serde"
+1
View File
@@ -1,4 +1,5 @@
#![doc(html_root_url = "https://docs.rs/serde_derive_internals/0.24.1")] #![doc(html_root_url = "https://docs.rs/serde_derive_internals/0.24.1")]
#![allow(unknown_lints, bare_trait_objects)]
#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))] #![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
#![cfg_attr( #![cfg_attr(
feature = "cargo-clippy", feature = "cargo-clippy",
+2 -2
View File
@@ -1,8 +1,8 @@
[package] [package]
name = "serde_test" name = "serde_test"
version = "1.0.90" # remember to update html_root_url version = "1.0.94" # remember to update html_root_url
authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"] authors = ["Erick Tryzelaar <erick.tryzelaar@gmail.com>", "David Tolnay <dtolnay@gmail.com>"]
license = "MIT/Apache-2.0" license = "MIT OR Apache-2.0"
description = "Token De/Serializer for testing De/Serialize implementations" description = "Token De/Serializer for testing De/Serialize implementations"
homepage = "https://serde.rs" homepage = "https://serde.rs"
repository = "https://github.com/serde-rs/serde" repository = "https://github.com/serde-rs/serde"
+1 -1
View File
@@ -144,7 +144,7 @@
//! # } //! # }
//! ``` //! ```
#![doc(html_root_url = "https://docs.rs/serde_test/1.0.90")] #![doc(html_root_url = "https://docs.rs/serde_test/1.0.94")]
#![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))] #![cfg_attr(feature = "cargo-clippy", allow(renamed_and_removed_lints))]
#![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))] #![cfg_attr(feature = "cargo-clippy", deny(clippy, clippy_pedantic))]
// Ignored clippy lints // Ignored clippy lints
+5 -4
View File
@@ -7,14 +7,15 @@ publish = false
[features] [features]
unstable = ["serde/unstable"] unstable = ["serde/unstable"]
compiletest = ["compiletest_rs"]
[dependencies]
serde = { path = "../serde" }
[dev-dependencies] [dev-dependencies]
fnv = "1.0" fnv = "1.0"
rustc-serialize = "0.3.16" rustc-serialize = "0.3.16"
select-rustc = "0.1"
serde = { path = "../serde", features = ["rc", "derive"] } serde = { path = "../serde", features = ["rc", "derive"] }
serde_derive = { path = "../serde_derive", features = ["deserialize_in_place"] } serde_derive = { path = "../serde_derive", features = ["deserialize_in_place"] }
serde_test = { path = "../serde_test" } serde_test = { path = "../serde_test" }
trybuild = "1.0"
[dependencies]
compiletest_rs = { version = "0.3", optional = true, features = ["stable"] }
-18
View File
@@ -1,18 +0,0 @@
#### To run unit tests
```sh
cargo test
```
#### To run ui tests
```sh
(cd deps && cargo clean && cargo update && cargo build)
cargo test --features compiletest
```
#### To update goldens after running ui tests
```sh
tests/ui/update-references.sh
```
-11
View File
@@ -1,11 +0,0 @@
[package]
name = "serde_test_suite_deps"
version = "0.0.0"
authors = ["David Tolnay <dtolnay@gmail.com>"]
publish = false
[workspace]
[dependencies]
serde = { path = "../../serde" }
serde_derive = { path = "../../serde_derive" }
-3
View File
@@ -1,3 +0,0 @@
#![feature(/*=============================================]
#![=== Serde test suite requires a nightly compiler. ===]
#![====================================================*/)]
+4 -18
View File
@@ -1,21 +1,7 @@
#![cfg(feature = "compiletest")] #[cfg(not(target_os = "emscripten"))]
#[rustc::attr(not(nightly), ignore)]
use compiletest_rs as compiletest;
#[test] #[test]
fn ui() { fn ui() {
compiletest::run_tests(&compiletest::Config { let t = trybuild::TestCases::new();
mode: compiletest::common::Mode::Ui, t.compile_fail("tests/ui/**/*.rs");
src_base: std::path::PathBuf::from("tests/ui"),
target_rustcflags: Some(String::from(
"\
--edition=2018 \
-L deps/target/debug/deps \
-Z unstable-options \
--extern serde_derive \
",
)),
build_base: std::path::PathBuf::from("../target/ui"),
..Default::default()
});
} }
+28
View File
@@ -124,6 +124,19 @@ enum EnumOther {
Other, Other,
} }
#[derive(PartialEq, Debug)]
struct IgnoredAny;
impl<'de> Deserialize<'de> for IgnoredAny {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
serde::de::IgnoredAny::deserialize(deserializer)?;
Ok(IgnoredAny)
}
}
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
macro_rules! declare_tests { macro_rules! declare_tests {
@@ -929,6 +942,21 @@ declare_tests! {
Token::SeqEnd, Token::SeqEnd,
], ],
} }
test_ignored_any {
IgnoredAny => &[
Token::Str("s"),
],
IgnoredAny => &[
Token::Seq { len: Some(1) },
Token::Bool(true),
Token::SeqEnd,
],
IgnoredAny => &[
Token::Enum { name: "E" },
Token::Str("Rust"),
Token::Unit,
],
}
} }
declare_tests! { declare_tests! {
+104
View File
@@ -0,0 +1,104 @@
use serde::de::value::{Error, MapDeserializer, SeqDeserializer};
use serde::de::{
DeserializeSeed, EnumAccess, IgnoredAny, IntoDeserializer, VariantAccess, Visitor,
};
use serde::{forward_to_deserialize_any, Deserialize, Deserializer};
#[derive(PartialEq, Debug, Deserialize)]
enum Target {
Unit,
Newtype(i32),
Tuple(i32, i32),
Struct { a: i32 },
}
struct Enum(&'static str);
impl<'de> Deserializer<'de> for Enum {
type Error = Error;
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
visitor.visit_enum(self)
}
forward_to_deserialize_any! {
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
bytes byte_buf option unit unit_struct newtype_struct seq tuple
tuple_struct map struct enum identifier ignored_any
}
}
impl<'de> EnumAccess<'de> for Enum {
type Error = Error;
type Variant = Self;
fn variant_seed<V>(self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error>
where
V: DeserializeSeed<'de>,
{
let v = seed.deserialize(self.0.into_deserializer())?;
Ok((v, self))
}
}
impl<'de> VariantAccess<'de> for Enum {
type Error = Error;
fn unit_variant(self) -> Result<(), Self::Error> {
Ok(())
}
fn newtype_variant_seed<T>(self, seed: T) -> Result<T::Value, Self::Error>
where
T: DeserializeSeed<'de>,
{
seed.deserialize(10i32.into_deserializer())
}
fn tuple_variant<V>(self, _len: usize, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
let seq = SeqDeserializer::new(vec![1i32, 2].into_iter());
visitor.visit_seq(seq)
}
fn struct_variant<V>(
self,
_fields: &'static [&'static str],
visitor: V,
) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
let map = MapDeserializer::new(vec![("a", 10i32)].into_iter());
visitor.visit_map(map)
}
}
#[test]
fn test_deserialize_enum() {
// First just make sure the Deserializer impl works
assert_eq!(Target::Unit, Target::deserialize(Enum("Unit")).unwrap());
assert_eq!(
Target::Newtype(10),
Target::deserialize(Enum("Newtype")).unwrap()
);
assert_eq!(
Target::Tuple(1, 2),
Target::deserialize(Enum("Tuple")).unwrap()
);
assert_eq!(
Target::Struct { a: 10 },
Target::deserialize(Enum("Struct")).unwrap()
);
// Now try IgnoredAny
IgnoredAny::deserialize(Enum("Unit")).unwrap();
IgnoredAny::deserialize(Enum("Newtype")).unwrap();
IgnoredAny::deserialize(Enum("Tuple")).unwrap();
IgnoredAny::deserialize(Enum("Struct")).unwrap();
}
+28
View File
@@ -1466,6 +1466,34 @@ fn test_internally_tagged_struct_with_flattened_field() {
); );
} }
#[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,
],
);
}
#[test] #[test]
fn test_enum_in_untagged_enum() { fn test_enum_in_untagged_enum() {
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
+62 -2
View File
@@ -1,5 +1,8 @@
use serde::de::{value, IntoDeserializer}; use serde::de::value::{self, MapAccessDeserializer};
use serde::Deserialize; use serde::de::{IntoDeserializer, MapAccess, Visitor};
use serde::{Deserialize, Deserializer};
use serde_test::{assert_de_tokens, Token};
use std::fmt;
#[test] #[test]
fn test_u32_to_enum() { fn test_u32_to_enum() {
@@ -32,3 +35,60 @@ fn test_integer128() {
// i128 to i128 // i128 to i128
assert_eq!(1i128, i128::deserialize(de_i128).unwrap()); assert_eq!(1i128, i128::deserialize(de_i128).unwrap());
} }
#[test]
fn test_map_access_to_enum() {
#[derive(PartialEq, Debug)]
struct Potential(PotentialKind);
#[derive(PartialEq, Debug, Deserialize)]
enum PotentialKind {
Airebo(Airebo),
}
#[derive(PartialEq, Debug, Deserialize)]
struct Airebo {
lj_sigma: f64,
}
impl<'de> Deserialize<'de> for Potential {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
struct PotentialVisitor;
impl<'de> Visitor<'de> for PotentialVisitor {
type Value = Potential;
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(formatter, "a map")
}
fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error>
where
A: MapAccess<'de>,
{
Deserialize::deserialize(MapAccessDeserializer::new(map)).map(Potential)
}
}
deserializer.deserialize_any(PotentialVisitor)
}
}
let expected = Potential(PotentialKind::Airebo(Airebo { lj_sigma: 14.0 }));
assert_de_tokens(
&expected,
&[
Token::Map { len: Some(1) },
Token::Str("Airebo"),
Token::Map { len: Some(1) },
Token::Str("lj_sigma"),
Token::F64(14.0),
Token::MapEnd,
Token::MapEnd,
],
);
}
@@ -3,6 +3,3 @@ error: failed to parse borrowed lifetimes: "zzz"
| |
5 | #[serde(borrow = "zzz")] 5 | #[serde(borrow = "zzz")]
| ^^^^^ | ^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate borrowed lifetime `'a`
| |
5 | #[serde(borrow = "'a + 'a")] 5 | #[serde(borrow = "'a + 'a")]
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate serde attribute `borrow`
| |
8 | #[serde(borrow)] 8 | #[serde(borrow)]
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: at least one lifetime must be borrowed
| |
5 | #[serde(borrow = "")] 5 | #[serde(borrow = "")]
| ^^ | ^^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: field `s` has no lifetimes to borrow
5 | / #[serde(borrow)] 5 | / #[serde(borrow)]
6 | | s: String, 6 | | s: String,
| |_____________^ | |_____________^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(borrow)] may only be used on newtype variants
8 | / #[serde(borrow)] 8 | / #[serde(borrow)]
9 | | S { s: Str<'a> }, 9 | | S { s: Str<'a> },
| |____________________^ | |____________________^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: field `s` does not have lifetime 'b
5 | / #[serde(borrow = "'b")] 5 | / #[serde(borrow = "'b")]
6 | | s: &'a str, 6 | | s: &'a str,
| |______________^ | |______________^
error: aborting due to previous error
@@ -7,6 +7,3 @@ error: enum tags `conflict` for type and content conflict with each other
7 | | B, 7 | | B,
8 | | } 8 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(flatten)] cannot be used on newtype structs
| |
6 | struct Foo(#[serde(flatten)] HashMap<String, String>); 6 | struct Foo(#[serde(flatten)] HashMap<String, String>);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(flatten)] cannot be used on tuple structs
| |
6 | struct Foo(u32, #[serde(flatten)] HashMap<String, String>); 6 | struct Foo(u32, #[serde(flatten)] HashMap<String, String>);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
@@ -9,6 +9,3 @@ error: variant field name `conflict` conflicts with internal tag
9 | | }, 9 | | },
10 | | } 10 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -9,6 +9,3 @@ error: variant field name `conflict` conflicts with internal tag
9 | | }, 9 | | },
10 | | } 10 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(default)] can only be used on structs with named fields
| |
5 | enum E { 5 | enum E {
| ^^^^ | ^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(default = "...")] can only be used on structs with named fields
| |
5 | enum E { 5 | enum E {
| ^^^^ | ^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(default)] can only be used on structs with named fields
| |
5 | struct T(u8, u8); 5 | struct T(u8, u8);
| ^^^^^^^^ | ^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(default = "...")] can only be used on structs with named fields
| |
5 | struct T(u8, u8); 5 | struct T(u8, u8);
| ^^^^^^^^ | ^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: unknown serde field attribute `serialize`
| |
5 | #[serde(rename = "x", serialize = "y")] 5 | #[serde(rename = "x", serialize = "y")]
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate serde attribute `rename`
| |
5 | #[serde(rename(serialize = "x"), rename(serialize = "y"))] 5 | #[serde(rename(serialize = "x"), rename(serialize = "y"))]
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate serde attribute `rename`
| |
6 | #[serde(rename = "y")] 6 | #[serde(rename = "y")]
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate serde attribute `rename`
| |
5 | #[serde(rename(serialize = "x", serialize = "y"))] 5 | #[serde(rename(serialize = "x", serialize = "y"))]
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate serde attribute `rename`
| |
6 | #[serde(rename(serialize = "y"))] 6 | #[serde(rename(serialize = "y"))]
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: duplicate serde attribute `serialize_with`
| |
5 | #[serde(with = "w", serialize_with = "s")] 5 | #[serde(with = "w", serialize_with = "s")]
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(tag = "...", content = "...")] must be used together
| |
4 | #[serde(content = "c")] 4 | #[serde(content = "c")]
| ^^^^^^^ | ^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(tag = "...")] cannot be used with tuple variants
| |
6 | Tuple(u8, u8), 6 | Tuple(u8, u8),
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
error: aborting due to previous error
@@ -15,6 +15,3 @@ error: untagged enum cannot have #[serde(tag = "...", content = "...")]
| |
5 | #[serde(tag = "t", content = "c")] 5 | #[serde(tag = "t", content = "c")]
| ^^^^^^^ | ^^^^^^^
error: aborting due to 3 previous errors
@@ -9,6 +9,3 @@ error: untagged enum cannot have #[serde(content = "...")]
| |
5 | #[serde(content = "c")] 5 | #[serde(content = "c")]
| ^^^^^^^ | ^^^^^^^
error: aborting due to 2 previous errors
@@ -9,6 +9,3 @@ error: enum cannot be both untagged and internally tagged
| |
5 | #[serde(tag = "type")] 5 | #[serde(tag = "type")]
| ^^^ | ^^^
error: aborting due to 2 previous errors
@@ -3,6 +3,3 @@ error: #[serde(untagged)] can only be used on enums
| |
5 | struct S; 5 | struct S;
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: expected serde rename attribute to be a string: `rename = "..."`
| |
5 | #[serde(rename = true)] 5 | #[serde(rename = true)]
| ^^^^ | ^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: expected serde rename attribute to be a string: `rename = "..."`
| |
5 | #[serde(rename = b'a')] 5 | #[serde(rename = b'a')]
| ^^^^ | ^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: expected serde rename attribute to be a string: `rename = "..."`
| |
5 | #[serde(rename = b"byte string")] 5 | #[serde(rename = b"byte string")]
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: expected serde rename attribute to be a string: `rename = "..."`
| |
5 | #[serde(rename = 'a')] 5 | #[serde(rename = 'a')]
| ^^^ | ^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: expected serde rename attribute to be a string: `rename = "..."`
| |
5 | #[serde(rename = 3.14)] 5 | #[serde(rename = 3.14)]
| ^^^^ | ^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: expected serde rename attribute to be a string: `rename = "..."`
| |
5 | #[serde(rename = 100)] 5 | #[serde(rename = 100)]
| ^^^ | ^^^
error: aborting due to previous error
@@ -9,6 +9,3 @@ error: #[serde(field_identifier)] and #[serde(variant_identifier)] cannot both b
| |
4 | #[serde(field_identifier, variant_identifier)] 4 | #[serde(field_identifier, variant_identifier)]
| ^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors
@@ -3,6 +3,3 @@ error: #[serde(field_identifier)] can only be used on an enum
| |
5 | struct S; 5 | struct S;
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(field_identifier)] may only contain unit variants
| |
7 | B(u8, u8), 7 | B(u8, u8),
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: `Other` must be the last variant
| |
7 | Other(String), 7 | Other(String),
| ^^^^^^^^^^^^^ | ^^^^^^^^^^^^^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(other)] must be on a unit variant
7 | / #[serde(other)] 7 | / #[serde(other)]
8 | | Other(u8, u8), 8 | | Other(u8, u8),
| |_________________^ | |_________________^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(other)] must be on the last variant
7 | / #[serde(other)] 7 | / #[serde(other)]
8 | | Other, 8 | | Other,
| |_________^ | |_________^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(other)] cannot appear on untagged enum
6 | / #[serde(other)] 6 | / #[serde(other)]
7 | | Other, 7 | | Other,
| |_________^ | |_________^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(other)] may not be used on a variant identifier
6 | / #[serde(other)] 6 | / #[serde(other)]
7 | | Other, 7 | | Other,
| |_________^ | |_________^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(variant_identifier)] can only be used on an enum
| |
5 | struct S; 5 | struct S;
| ^^^^^^ | ^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(variant_identifier)] may only contain unit variants
| |
7 | B(u8, u8), 7 | B(u8, u8),
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: malformed bound attribute, expected `bound(serialize = ..., deserialize =
| |
5 | #[serde(bound(unknown))] 5 | #[serde(bound(unknown))]
| ^^^^^^^ | ^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: malformed rename attribute, expected `rename(serialize = ..., deserialize
| |
5 | #[serde(rename(unknown))] 5 | #[serde(rename(unknown))]
| ^^^^^^^ | ^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: cannot deserialize when there is a lifetime parameter called 'de
| |
4 | struct S<'de> { 4 | struct S<'de> {
| ^^^ | ^^^
error: aborting due to previous error
@@ -6,6 +6,3 @@ error: cannot deserialize a dynamically sized struct
6 | | slice: [u8], 6 | | slice: [u8],
7 | | } 7 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -7,6 +7,3 @@ error: field identifiers cannot be serialized
7 | | B, 7 | | B,
8 | | } 8 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -7,6 +7,3 @@ error: variant identifiers cannot be serialized
7 | | B, 7 | | B,
8 | | } 8 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: failed to parse path: "~~~"
| |
12 | #[serde(getter = "~~~")] 12 | #[serde(getter = "~~~")]
| ^^^^^ | ^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: failed to parse path: "~~~"
| |
10 | #[serde(remote = "~~~")] 10 | #[serde(remote = "~~~")]
| ^^^^^ | ^^^^^
error: aborting due to previous error
@@ -9,6 +9,3 @@ error: #[serde(getter = "...")] is not allowed in an enum
15 | | }, 15 | | },
16 | | } 16 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -4,6 +4,4 @@ error[E0063]: missing field `b` in initializer of `remote::S`
11 | #[serde(remote = "remote::S")] 11 | #[serde(remote = "remote::S")]
| ^^^^^^^^^^^ missing `b` | ^^^^^^^^^^^ missing `b`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0063`. For more information about this error, try `rustc --explain E0063`.
@@ -6,6 +6,3 @@ error: #[serde(getter = "...")] can only be used in structs that have #[serde(re
6 | | a: u8, 6 | | a: u8,
7 | | } 7 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -10,7 +10,5 @@ error[E0560]: struct `remote::S` has no field named `b`
12 | b: u8, 12 | b: u8,
| ^ help: a field with a similar name exists: `a` | ^ help: a field with a similar name exists: `a`
error: aborting due to 2 previous errors Some errors have detailed explanations: E0560, E0609.
Some errors occurred: E0560, E0609.
For more information about an error, try `rustc --explain E0560`. For more information about an error, try `rustc --explain E0560`.
@@ -3,11 +3,5 @@ error[E0308]: mismatched types
| |
7 | #[derive(Deserialize)] 7 | #[derive(Deserialize)]
| ^^^^^^^^^^^ expected u16, found u8 | ^^^^^^^^^^^ expected u16, found u8
help: you can cast an `u8` to `u16`, which will zero-extend the source value
|
7 | #[derive(Deserialize.into())]
| ^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`. For more information about this error, try `rustc --explain E0308`.
@@ -7,6 +7,4 @@ error[E0308]: mismatched types
= note: expected type `&u8` = note: expected type `&u8`
found type `&u16` found type `&u16`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`. For more information about this error, try `rustc --explain E0308`.
@@ -7,6 +7,4 @@ error[E0308]: mismatched types
= note: expected type `&u8` = note: expected type `&u8`
found type `&u16` found type `&u16`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0308`. For more information about this error, try `rustc --explain E0308`.
@@ -3,6 +3,3 @@ error: unknown rename rule for #[serde(rename_all = "abc")]
| |
4 | #[serde(rename_all = "abc")] 4 | #[serde(rename_all = "abc")]
| ^^^^^ | ^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: unknown rename rule for #[serde(rename_all = "abc")]
| |
5 | #[serde(rename_all = "abc")] 5 | #[serde(rename_all = "abc")]
| ^^^^^ | ^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(tag = "...")] can only be used on enums and structs with named fi
| |
5 | struct S(u8, u8); 5 | struct S(u8, u8);
| ^^^^^^^^ | ^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: #[serde(tag = "...")] can only be used on enums and structs with named fi
| |
3 | #[derive(Serialize)] 3 | #[derive(Serialize)]
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error
@@ -7,6 +7,3 @@ error: #[serde(transparent)] requires struct to have at most one transparent fie
7 | | b: u8, 7 | | b: u8,
8 | | } 8 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -9,6 +9,3 @@ error: #[serde(transparent)] requires at least one field that is neither skipped
9 | | b: u8, 9 | | b: u8,
10 | | } 10 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(transparent)] is not allowed on an enum
4 | / #[serde(transparent)] 4 | / #[serde(transparent)]
5 | | enum E {} 5 | | enum E {}
| |_________^ | |_________^
error: aborting due to previous error
@@ -7,6 +7,3 @@ error: #[serde(transparent)] requires at least one field that is not skipped
7 | | a: u8, 7 | | a: u8,
8 | | } 8 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -4,6 +4,3 @@ error: #[serde(transparent)] is not allowed on a unit struct
4 | / #[serde(transparent)] 4 | / #[serde(transparent)]
5 | | struct S; 5 | | struct S;
| |_________^ | |_________^
error: aborting due to previous error
@@ -6,6 +6,3 @@ error: #[serde(transparent)] is not allowed with #[serde(from = "...")]
6 | | a: u8, 6 | | a: u8,
7 | | } 7 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -6,6 +6,3 @@ error: #[serde(transparent)] is not allowed with #[serde(into = "...")]
6 | | a: u8, 6 | | a: u8,
7 | | } 7 | | }
| |_^ | |_^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: failed to parse type: from = "Option<T"
| |
4 | #[serde(from = "Option<T")] 4 | #[serde(from = "Option<T")]
| ^^^^^^^^^^ | ^^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: failed to parse type: into = "Option<T"
| |
4 | #[serde(into = "Option<T")] 4 | #[serde(into = "Option<T")]
| ^^^^^^^^^^ | ^^^^^^^^^^
error: aborting due to previous error
@@ -3,6 +3,3 @@ error: unexpected literal in serde container attribute
| |
4 | #[serde("literal")] 4 | #[serde("literal")]
| ^^^^^^^^^ | ^^^^^^^^^
error: aborting due to previous error

Some files were not shown because too many files have changed in this diff Show More