Compare commits

...

32 Commits

Author SHA1 Message Date
David Tolnay 2ef60b62ac Release 1.0.115 2020-08-10 15:51:19 -07:00
David Tolnay e6f086d85e Merge pull request #1874 from dtolnay/flatunit
Support flattening a Unit
2020-08-10 15:50:30 -07:00
David Tolnay bf76f50294 Support deserializing flattened unit 2020-08-10 15:06:52 -07:00
David Tolnay ba07075590 Support serializing flattened unit 2020-08-10 15:06:47 -07:00
David Tolnay 26186bddd1 Add test for flattened unit 2020-08-10 15:06:34 -07:00
David Tolnay 53b9871b17 Quote no longer requires high recursion 2020-07-16 10:49:16 -07:00
David Tolnay f8787c3ca8 Suppress match_like_matches_macro clippy lint 2020-07-14 18:57:26 -07:00
David Tolnay 3022064f84 Suppress option_if_let_else clippy pedantic lint 2020-07-14 18:57:24 -07:00
David Tolnay 9e140a2071 Tweak yaml format blurb 2020-07-05 20:00:33 -07:00
David Tolnay 24e6acbfae Drop 'help or discussion' issue template
Per https://github.com/serde-rs/serde#getting-help we're steering these
to Discord / Stack Overflow / Reddit / etc.

Can reconsider when GitHub Discussions is out of beta
(https://github.com/vercel/next.js/discussions).
2020-07-04 20:44:22 -07:00
David Tolnay 29c5a50935 Suppress unused_attributes warning in test suite
This test has multiple #[ignore] attributes in some configurations.

    $ cargo +beta check --test expandtest
    warning: unused attribute
     --> test_suite/tests/expandtest.rs:2:29
      |
    2 | #[cfg_attr(not(expandtest), ignore)]
      |                             ^^^^^^
      |
      = note: `#[warn(unused_attributes)]` on by default
2020-06-26 21:37:30 -07:00
David Tolnay c619b2a7c4 Suppress unknown_lints warning in test suite
When building with beta and older rustc:

    error: unknown lint: `mixed_script_confusables`
     --> test_suite/tests/test_gen.rs:7:10
      |
    7 | #![allow(mixed_script_confusables, clippy::trivially_copy_pass_by_ref)]
      |          ^^^^^^^^^^^^^^^^^^^^^^^^
      |
    note: the lint level is defined here
     --> test_suite/tests/test_gen.rs:5:9
      |
    5 | #![deny(warnings)]
      |         ^^^^^^^^
      = note: `#[deny(unknown_lints)]` implied by `#[deny(warnings)]`
2020-06-26 21:37:26 -07:00
David Tolnay 764ebd9b17 Suppress mixed_script_confusables in test suite
error: The usage of Script Group `Greek` in this crate consists solely of mixed script confusables
       --> test_suite/tests/test_gen.rs:269:9
        |
    269 |         σ: f64,
        |         ^
        |
    note: the lint level is defined here
       --> test_suite/tests/test_gen.rs:5:9
        |
    5   | #![deny(warnings)]
        |         ^^^^^^^^
        = note: `#[deny(mixed_script_confusables)]` implied by `#[deny(warnings)]`
        = note: The usage includes 'σ' (U+03C3).
        = note: Please recheck to make sure their usages are indeed what you want.
2020-06-26 19:06:13 -07:00
David Tolnay 9c6f0c3a0e Release 1.0.114 2020-06-21 17:31:02 -07:00
David Tolnay a9f8ea0a1e Simplify search for packed repr attr 2020-06-21 17:22:07 -07:00
David Tolnay 04faac962a Remove error_on_line_overflow rustfmt setting
No longer seeing warnings on this from rustfmt.
2020-06-21 16:48:22 -07:00
Tanner Rogalsky 7e5701ad2b add alignment specific packed repr tests 2020-06-21 16:46:27 -07:00
Tanner Rogalsky 1cd10a7d09 Improved packed repr matching. 2020-06-21 16:46:27 -07:00
Tanner Rogalsky d5e6436b28 Add tests validating Serialize derivation for packed structs. 2020-06-21 16:46:27 -07:00
David Tolnay 8ff11dc234 Merge pull request #1841 from dtolnay/lenhint
Remove len hint specialization
2020-06-20 19:08:34 -07:00
David Tolnay 6b3777b617 Remove len hint specialization 2020-06-20 19:02:26 -07:00
David Tolnay 7350b58f5c Release 1.0.113 2020-06-19 13:31:38 -07:00
David Tolnay 7351e0e55a Link to feature announcements where available 2020-06-19 13:30:14 -07:00
David Tolnay b3ff7e43ef Merge pull request #1827 from taiki-e/underscore_consts
Use underscore consts on Rust 1.37+
2020-06-19 13:27:33 -07:00
Taiki Endo a50e1c20e9 Use underscore consts on Rust 1.37+ 2020-06-19 15:55:43 +09:00
David Tolnay 6980727d74 Merge pull request #1840 from rw/patch-1
Add FlexBuffers to serde ecosystem list
2020-06-18 22:57:59 -07:00
Robert Winslow bb1dedf04d Add FlexBuffers to serde ecosystem list
Add FlexBuffers to serde ecosystem list
2020-06-16 13:36:14 -07:00
David Tolnay f3520e526b Release 1.0.112 2020-06-14 11:16:04 -07:00
David Tolnay e8fd2c85c3 Merge pull request #1839 from dtolnay/entry
Forward serialize_entry on flattened maps
2020-06-14 11:15:26 -07:00
David Tolnay 97962d51e2 Forward serialize_entry on flattened maps 2020-06-14 11:10:18 -07:00
David Tolnay 95b1a5d3d9 Ignore unnested_or_patterns suggesting unstable code
Clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704
2020-06-10 19:41:16 -07:00
David Tolnay 0856a2c101 No need to specify Cargo.toml in package.include
Cargo.toml is always included in the published crate.
2020-06-10 01:21:19 -07:00
33 changed files with 173 additions and 91 deletions
-7
View File
@@ -1,7 +0,0 @@
---
name: Help or discussion
about: This is the right place
---
-1
View File
@@ -1 +0,0 @@
error_on_line_overflow = false
+3 -3
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "serde" name = "serde"
version = "1.0.111" # remember to update html_root_url and serde_derive dependency version = "1.0.115" # remember to update html_root_url and serde_derive dependency
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 OR Apache-2.0" license = "MIT OR Apache-2.0"
description = "A generic serialization/deserialization framework" description = "A generic serialization/deserialization framework"
@@ -10,11 +10,11 @@ documentation = "https://docs.serde.rs/serde/"
keywords = ["serde", "serialization", "no_std"] keywords = ["serde", "serialization", "no_std"]
categories = ["encoding"] categories = ["encoding"]
readme = "crates-io.md" readme = "crates-io.md"
include = ["Cargo.toml", "build.rs", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] include = ["build.rs", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"]
build = "build.rs" build = "build.rs"
[dependencies] [dependencies]
serde_derive = { version = "=1.0.111", optional = true, path = "../serde_derive" } serde_derive = { version = "=1.0.115", optional = true, path = "../serde_derive" }
[dev-dependencies] [dev-dependencies]
serde_derive = { version = "1.0", path = "../serde_derive" } serde_derive = { version = "1.0", path = "../serde_derive" }
+1 -1
View File
@@ -66,7 +66,7 @@ fn main() {
} }
// Non-zero integers stabilized in Rust 1.28: // Non-zero integers stabilized in Rust 1.28:
// https://github.com/rust-lang/rust/pull/50808 // https://blog.rust-lang.org/2018/08/02/Rust-1.28.html#library-stabilizations
if minor >= 28 { if minor >= 28 {
println!("cargo:rustc-cfg=num_nonzero"); println!("cargo:rustc-cfg=num_nonzero");
} }
+9 -4
View File
@@ -37,8 +37,8 @@
//! used for IPC within the Servo rendering engine. //! used for IPC within the Servo rendering engine.
//! - [CBOR], a Concise Binary Object Representation designed for small message //! - [CBOR], a Concise Binary Object Representation designed for small message
//! size without the need for version negotiation. //! size without the need for version negotiation.
//! - [YAML], a popular human-friendly configuration language that ain't markup //! - [YAML], a self-proclaimed human-friendly configuration language that ain't
//! language. //! markup language.
//! - [MessagePack], an efficient binary format that resembles a compact JSON. //! - [MessagePack], an efficient binary format that resembles a compact JSON.
//! - [TOML], a minimal configuration format used by [Cargo]. //! - [TOML], a minimal configuration format used by [Cargo].
//! - [Pickle], a format common in the Python world. //! - [Pickle], a format common in the Python world.
@@ -56,6 +56,7 @@
//! - [S-expressions], the textual representation of code and data used by the //! - [S-expressions], the textual representation of code and data used by the
//! Lisp language family. //! Lisp language family.
//! - [D-Bus]'s binary wire format. //! - [D-Bus]'s binary wire format.
//! - [FlexBuffers], the schemaless cousin of Google's FlatBuffers zero-copy serialization format.
//! //!
//! [JSON]: https://github.com/serde-rs/json //! [JSON]: https://github.com/serde-rs/json
//! [Bincode]: https://github.com/TyOverby/bincode //! [Bincode]: https://github.com/TyOverby/bincode
@@ -76,18 +77,19 @@
//! [AWS Parameter Store]: https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html //! [AWS Parameter Store]: https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html
//! [S-expressions]: https://github.com/rotty/lexpr-rs //! [S-expressions]: https://github.com/rotty/lexpr-rs
//! [D-Bus]: https://docs.rs/zvariant //! [D-Bus]: https://docs.rs/zvariant
//! [FlexBuffers]: https://github.com/google/flatbuffers/tree/master/rust/flexbuffers
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// 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.111")] #![doc(html_root_url = "https://docs.rs/serde/1.0.115")]
// 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
// discussion of these features please refer to this issue: // discussion of these features please refer to this issue:
// //
// 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(never_type))]
#![allow(unknown_lints, bare_trait_objects, deprecated)] #![allow(unknown_lints, bare_trait_objects, deprecated)]
#![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))]
@@ -95,6 +97,8 @@
#![cfg_attr( #![cfg_attr(
feature = "cargo-clippy", feature = "cargo-clippy",
allow( allow(
// clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704
unnested_or_patterns,
// not available in our oldest supported compiler // not available in our oldest supported compiler
checked_conversions, checked_conversions,
empty_enum, empty_enum,
@@ -107,6 +111,7 @@
// things are often more readable this way // things are often more readable this way
cast_lossless, cast_lossless,
module_name_repetitions, module_name_repetitions,
option_if_let_else,
single_match_else, single_match_else,
type_complexity, type_complexity,
use_self, use_self,
+7 -1
View File
@@ -2763,6 +2763,13 @@ where
} }
} }
fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
visitor.visit_unit()
}
forward_to_deserialize_other! { forward_to_deserialize_other! {
deserialize_bool() deserialize_bool()
deserialize_i8() deserialize_i8()
@@ -2780,7 +2787,6 @@ where
deserialize_string() deserialize_string()
deserialize_bytes() deserialize_bytes()
deserialize_byte_buf() deserialize_byte_buf()
deserialize_unit()
deserialize_unit_struct(&'static str) deserialize_unit_struct(&'static str)
deserialize_seq() deserialize_seq()
deserialize_tuple(usize) deserialize_tuple(usize)
+13 -1
View File
@@ -1124,7 +1124,7 @@ where
} }
fn serialize_unit(self) -> Result<Self::Ok, Self::Error> { fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
Err(Self::bad_type(Unsupported::Unit)) Ok(())
} }
fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> { fn serialize_unit_struct(self, _: &'static str) -> Result<Self::Ok, Self::Error> {
@@ -1243,6 +1243,18 @@ where
self.0.serialize_value(value) self.0.serialize_value(value)
} }
fn serialize_entry<K: ?Sized, V: ?Sized>(
&mut self,
key: &K,
value: &V,
) -> Result<(), Self::Error>
where
K: Serialize,
V: Serialize,
{
self.0.serialize_entry(key, value)
}
fn end(self) -> Result<(), Self::Error> { fn end(self) -> Result<(), Self::Error> {
Ok(()) Ok(())
} }
+2 -31
View File
@@ -1278,7 +1278,7 @@ pub trait Serializer: Sized {
<I as IntoIterator>::Item: Serialize, <I as IntoIterator>::Item: Serialize,
{ {
let iter = iter.into_iter(); let iter = iter.into_iter();
let mut serializer = try!(self.serialize_seq(iter.len_hint())); let mut serializer = try!(self.serialize_seq(iterator_len_hint(&iter)));
for item in iter { for item in iter {
try!(serializer.serialize_element(&item)); try!(serializer.serialize_element(&item));
} }
@@ -1318,7 +1318,7 @@ pub trait Serializer: Sized {
I: IntoIterator<Item = (K, V)>, I: IntoIterator<Item = (K, V)>,
{ {
let iter = iter.into_iter(); let iter = iter.into_iter();
let mut serializer = try!(self.serialize_map(iter.len_hint())); let mut serializer = try!(self.serialize_map(iterator_len_hint(&iter)));
for (key, value) in iter { for (key, value) in iter {
try!(serializer.serialize_entry(&key, &value)); try!(serializer.serialize_entry(&key, &value));
} }
@@ -1953,35 +1953,6 @@ pub trait SerializeStructVariant {
fn end(self) -> Result<Self::Ok, Self::Error>; fn end(self) -> Result<Self::Ok, Self::Error>;
} }
trait LenHint: Iterator {
fn len_hint(&self) -> Option<usize>;
}
impl<I> LenHint for I
where
I: Iterator,
{
#[cfg(not(feature = "unstable"))]
fn len_hint(&self) -> Option<usize> {
iterator_len_hint(self)
}
#[cfg(feature = "unstable")]
default fn len_hint(&self) -> Option<usize> {
iterator_len_hint(self)
}
}
#[cfg(feature = "unstable")]
impl<I> LenHint for I
where
I: ExactSizeIterator,
{
fn len_hint(&self) -> Option<usize> {
Some(self.len())
}
}
fn iterator_len_hint<I>(iter: &I) -> Option<usize> fn iterator_len_hint<I>(iter: &I) -> Option<usize>
where where
I: Iterator, I: Iterator,
+3 -3
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "serde_derive" name = "serde_derive"
version = "1.0.111" # remember to update html_root_url version = "1.0.115" # 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 OR 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)]"
@@ -9,7 +9,7 @@ repository = "https://github.com/serde-rs/serde"
documentation = "https://serde.rs/derive.html" documentation = "https://serde.rs/derive.html"
keywords = ["serde", "serialization", "no_std"] keywords = ["serde", "serialization", "no_std"]
readme = "crates-io.md" readme = "crates-io.md"
include = ["Cargo.toml", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] include = ["build.rs", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"]
[features] [features]
default = [] default = []
@@ -22,7 +22,7 @@ proc-macro = true
[dependencies] [dependencies]
proc-macro2 = "1.0" proc-macro2 = "1.0"
quote = "1.0" quote = "1.0"
syn = { version = "1.0", features = ["visit"] } syn = { version = "1.0.33", features = ["visit"] }
[dev-dependencies] [dev-dependencies]
serde = { version = "1.0", path = "../serde" } serde = { version = "1.0", path = "../serde" }
+30
View File
@@ -0,0 +1,30 @@
use std::env;
use std::process::Command;
use std::str;
// The rustc-cfg strings below are *not* public API. Please let us know by
// opening a GitHub issue if your build environment requires some way to enable
// these cfgs other than by executing our build script.
fn main() {
let minor = match rustc_minor_version() {
Some(minor) => minor,
None => return,
};
// Underscore const names stabilized in Rust 1.37:
// https://blog.rust-lang.org/2019/08/15/Rust-1.37.0.html#using-unnamed-const-items-for-macros
if minor >= 37 {
println!("cargo:rustc-cfg=underscore_consts");
}
}
fn rustc_minor_version() -> Option<u32> {
let rustc = env::var_os("RUSTC")?;
let output = Command::new(rustc).arg("--version").output().ok()?;
let version = str::from_utf8(&output.stdout).ok()?;
let mut pieces = version.split('.');
if pieces.next() != Some("rustc 1") {
return None;
}
pieces.next()?.parse().ok()
}
+7 -5
View File
@@ -1,4 +1,5 @@
use proc_macro2::{Ident, Span, TokenStream}; use proc_macro2::{Ident, TokenStream};
use quote::format_ident;
use syn; use syn;
use try; use try;
@@ -11,10 +12,11 @@ pub fn wrap_in_const(
) -> TokenStream { ) -> TokenStream {
let try_replacement = try::replacement(); let try_replacement = try::replacement();
let dummy_const = Ident::new( let dummy_const = if cfg!(underscore_consts) {
&format!("_IMPL_{}_FOR_{}", trait_, unraw(ty)), format_ident!("_")
Span::call_site(), } else {
); format_ident!("_IMPL_{}_FOR_{}", trait_, unraw(ty))
};
let use_serde = match serde_path { let use_serde = match serde_path {
Some(path) => quote! { Some(path) => quote! {
+5 -1
View File
@@ -597,7 +597,11 @@ impl Container {
for attr in &item.attrs { for attr in &item.attrs {
if attr.path.is_ident("repr") { if attr.path.is_ident("repr") {
let _ = attr.parse_args_with(|input: ParseStream| { let _ = attr.parse_args_with(|input: ParseStream| {
is_packed |= input.parse::<Ident>()? == "packed"; while let Some(token) = input.parse()? {
if let TokenTree::Ident(ident) = token {
is_packed |= ident == "packed";
}
}
Ok(()) Ok(())
}); });
} }
+6 -4
View File
@@ -13,18 +13,21 @@
//! //!
//! [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.111")] #![doc(html_root_url = "https://docs.rs/serde_derive/1.0.115")]
#![allow(unknown_lints, bare_trait_objects)] #![allow(unknown_lints, bare_trait_objects)]
#![deny(clippy::all, clippy::pedantic)] #![deny(clippy::all, clippy::pedantic)]
// Ignored clippy lints // Ignored clippy lints
#![allow( #![allow(
clippy::cognitive_complexity, clippy::cognitive_complexity,
clippy::enum_variant_names, clippy::enum_variant_names,
clippy::match_like_matches_macro,
clippy::needless_pass_by_value, clippy::needless_pass_by_value,
clippy::too_many_arguments, clippy::too_many_arguments,
clippy::trivially_copy_pass_by_ref, clippy::trivially_copy_pass_by_ref,
clippy::used_underscore_binding, clippy::used_underscore_binding,
clippy::wildcard_in_or_patterns clippy::wildcard_in_or_patterns,
// clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704
clippy::unnested_or_patterns,
)] )]
// Ignored clippy_pedantic lints // Ignored clippy_pedantic lints
#![allow( #![allow(
@@ -38,6 +41,7 @@
clippy::match_same_arms, clippy::match_same_arms,
clippy::module_name_repetitions, clippy::module_name_repetitions,
clippy::must_use_candidate, clippy::must_use_candidate,
clippy::option_if_let_else,
clippy::similar_names, clippy::similar_names,
clippy::single_match_else, clippy::single_match_else,
clippy::struct_excessive_bools, clippy::struct_excessive_bools,
@@ -46,8 +50,6 @@
clippy::use_self, clippy::use_self,
clippy::wildcard_imports clippy::wildcard_imports
)] )]
// The `quote!` macro requires deep recursion.
#![recursion_limit = "512"]
#[macro_use] #[macro_use]
extern crate quote; extern crate quote;
+2 -2
View File
@@ -8,7 +8,7 @@ homepage = "https://serde.rs"
repository = "https://github.com/serde-rs/serde" repository = "https://github.com/serde-rs/serde"
documentation = "https://docs.rs/serde_derive_internals" documentation = "https://docs.rs/serde_derive_internals"
keywords = ["serde", "serialization"] keywords = ["serde", "serialization"]
include = ["Cargo.toml", "lib.rs", "src/**/*.rs", "LICENSE-APACHE", "LICENSE-MIT"] include = ["lib.rs", "src/**/*.rs", "LICENSE-APACHE", "LICENSE-MIT"]
[lib] [lib]
path = "lib.rs" path = "lib.rs"
@@ -16,7 +16,7 @@ path = "lib.rs"
[dependencies] [dependencies]
proc-macro2 = "1.0" proc-macro2 = "1.0"
quote = "1.0" quote = "1.0"
syn = { version = "1.0", default-features = false, features = ["derive", "parsing", "printing", "clone-impls"] } syn = { version = "1.0.33", default-features = false, features = ["derive", "parsing", "printing", "clone-impls"] }
[package.metadata.docs.rs] [package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"] targets = ["x86_64-unknown-linux-gnu"]
+3 -1
View File
@@ -7,7 +7,9 @@
cognitive_complexity, cognitive_complexity,
redundant_field_names, redundant_field_names,
trivially_copy_pass_by_ref, trivially_copy_pass_by_ref,
wildcard_in_or_patterns wildcard_in_or_patterns,
// clippy bug: https://github.com/rust-lang/rust-clippy/issues/5704
unnested_or_patterns,
) )
)] )]
+2 -2
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "serde_test" name = "serde_test"
version = "1.0.111" # remember to update html_root_url version = "1.0.115" # 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 OR 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"
@@ -9,7 +9,7 @@ repository = "https://github.com/serde-rs/serde"
documentation = "https://docs.serde.rs/serde_test/" documentation = "https://docs.serde.rs/serde_test/"
keywords = ["serde", "serialization"] keywords = ["serde", "serialization"]
readme = "crates-io.md" readme = "crates-io.md"
include = ["Cargo.toml", "src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"] include = ["src/**/*.rs", "crates-io.md", "README.md", "LICENSE-APACHE", "LICENSE-MIT"]
[dependencies] [dependencies]
serde = { version = "1.0.60", path = "../serde" } serde = { version = "1.0.60", path = "../serde" }
+1 -1
View File
@@ -144,7 +144,7 @@
//! # } //! # }
//! ``` //! ```
#![doc(html_root_url = "https://docs.rs/serde_test/1.0.111")] #![doc(html_root_url = "https://docs.rs/serde_test/1.0.115")]
#![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
+2 -2
View File
@@ -9,7 +9,7 @@ enum DeEnum<B, C, D> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_DeEnum: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -261,7 +261,7 @@ const _IMPL_SERIALIZE_FOR_DeEnum: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_DeEnum: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -10,7 +10,7 @@ struct DefaultTyParam<T: AssociatedType<X = i32> = i32> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_DefaultTyParam: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -45,7 +45,7 @@ const _IMPL_SERIALIZE_FOR_DefaultTyParam: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_DefaultTyParam: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -7,7 +7,7 @@ pub enum GenericEnum<T, U> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_GenericEnum: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -110,7 +110,7 @@ const _IMPL_SERIALIZE_FOR_GenericEnum: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_GenericEnum: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -4,7 +4,7 @@ pub struct GenericStruct<T> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_GenericStruct: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -38,7 +38,7 @@ const _IMPL_SERIALIZE_FOR_GenericStruct: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_GenericStruct: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -400,7 +400,7 @@ const _IMPL_DESERIALIZE_FOR_GenericStruct: () = {
pub struct GenericNewTypeStruct<T>(T); pub struct GenericNewTypeStruct<T>(T);
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_GenericNewTypeStruct: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -422,7 +422,7 @@ const _IMPL_SERIALIZE_FOR_GenericNewTypeStruct: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_GenericNewTypeStruct: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
pub struct GenericTupleStruct<T, U>(T, U); pub struct GenericTupleStruct<T, U>(T, U);
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_GenericTupleStruct: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -7,7 +7,7 @@ enum Lifetimes<'a> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_Lifetimes: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -91,7 +91,7 @@ const _IMPL_SERIALIZE_FOR_Lifetimes: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_Lifetimes: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -6,7 +6,7 @@ struct SerNamedMap<'a, 'b, A: 'a, B: 'b, C> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_SerNamedMap: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -59,7 +59,7 @@ struct DeNamedMap<A, B, C> {
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_DeNamedMap: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
struct SerNamedTuple<'a, 'b, A: 'a, B: 'b, C>(&'a A, &'b mut B, C); struct SerNamedTuple<'a, 'b, A: 'a, B: 'b, C>(&'a A, &'b mut B, C);
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_SerNamedTuple: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -51,7 +51,7 @@ const _IMPL_SERIALIZE_FOR_SerNamedTuple: () = {
struct DeNamedTuple<A, B, C>(A, B, C); struct DeNamedTuple<A, B, C>(A, B, C);
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_DeNamedTuple: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
struct NamedUnit; struct NamedUnit;
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_NamedUnit: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -17,7 +17,7 @@ const _IMPL_SERIALIZE_FOR_NamedUnit: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_NamedUnit: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
+1 -1
View File
@@ -12,7 +12,7 @@ where
} }
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_SerEnum: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
+2 -2
View File
@@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize};
enum Void {} enum Void {}
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_SERIALIZE_FOR_Void: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
@@ -17,7 +17,7 @@ const _IMPL_SERIALIZE_FOR_Void: () = {
}; };
#[doc(hidden)] #[doc(hidden)]
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] #[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_Void: () = { const _: () = {
#[allow(rust_2018_idioms, clippy::useless_attribute)] #[allow(rust_2018_idioms, clippy::useless_attribute)]
extern crate serde as _serde; extern crate serde as _serde;
#[automatically_derived] #[automatically_derived]
+1
View File
@@ -1,6 +1,7 @@
#[cfg_attr(target_os = "emscripten", ignore)] #[cfg_attr(target_os = "emscripten", ignore)]
#[cfg_attr(not(expandtest), ignore)] #[cfg_attr(not(expandtest), ignore)]
#[rustversion::attr(not(nightly), ignore)] #[rustversion::attr(not(nightly), ignore)]
#[allow(unused_attributes)]
#[test] #[test]
fn expandtest() { fn expandtest() {
macrotest::expand("tests/expand/*.rs"); macrotest::expand("tests/expand/*.rs");
+23
View File
@@ -1967,6 +1967,29 @@ fn test_flatten_map_twice() {
); );
} }
#[test]
fn test_flatten_unit() {
#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Response<T> {
#[serde(flatten)]
data: T,
status: usize,
}
assert_tokens(
&Response {
data: (),
status: 0,
},
&[
Token::Map { len: None },
Token::Str("status"),
Token::U64(0),
Token::MapEnd,
],
);
}
#[test] #[test]
fn test_flatten_unsupported_type() { fn test_flatten_unsupported_type() {
#[derive(Debug, PartialEq, Serialize, Deserialize)] #[derive(Debug, PartialEq, Serialize, Deserialize)]
+5 -1
View File
@@ -4,7 +4,11 @@
#![deny(warnings)] #![deny(warnings)]
#![cfg_attr(feature = "unstable", feature(non_ascii_idents))] #![cfg_attr(feature = "unstable", feature(non_ascii_idents))]
#![allow(clippy::trivially_copy_pass_by_ref)] #![allow(
unknown_lints,
mixed_script_confusables,
clippy::trivially_copy_pass_by_ref
)]
use serde::de::DeserializeOwned; use serde::de::DeserializeOwned;
use serde::{Deserialize, Deserializer, Serialize, Serializer}; use serde::{Deserialize, Deserializer, Serialize, Serializer};
+28
View File
@@ -1878,3 +1878,31 @@ fn test_internally_tagged_newtype_variant_containing_unit_struct() {
], ],
); );
} }
#[deny(safe_packed_borrows)]
#[test]
fn test_packed_struct_can_derive_serialize() {
#[derive(Copy, Clone, Serialize)]
#[repr(packed, C)]
struct PackedC {
t: f32,
}
#[derive(Copy, Clone, Serialize)]
#[repr(C, packed)]
struct CPacked {
t: f32,
}
#[derive(Copy, Clone, Serialize)]
#[repr(C, packed(2))]
struct CPacked2 {
t: f32,
}
#[derive(Copy, Clone, Serialize)]
#[repr(packed(2), C)]
struct Packed2C {
t: f32,
}
}