From cc128feb4ca97216953d3fd0da8b989e1c30b9a9 Mon Sep 17 00:00:00 2001 From: Jonas Bushart Date: Sat, 3 Dec 2022 16:00:43 +0100 Subject: [PATCH] Remove some Serialize trait bounds Containers for the most part do not have any trait requirements for iterating over them. So these bounds are unnecessary when Serializing only. This relaxation is part of Rust 1.34 --- serde/build.rs | 1 + serde/src/ser/impls.rs | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/serde/build.rs b/serde/build.rs index a1103b520..590dbb8cd 100644 --- a/serde/build.rs +++ b/serde/build.rs @@ -89,6 +89,7 @@ fn main() { println!("cargo:rustc-cfg=no_core_try_from"); println!("cargo:rustc-cfg=no_num_nonzero_signed"); println!("cargo:rustc-cfg=no_systemtime_checked_add"); + println!("cargo:rustc-cfg=no_relaxed_trait_bounds"); } // Whitelist of archs that support std::sync::atomic module. Ideally we diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index ccef4d291..1f1ad1711 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -182,7 +182,25 @@ where } } -#[cfg(any(feature = "std", feature = "alloc"))] +#[cfg(all(any(feature = "std", feature = "alloc"), not(no_relaxed_trait_bounds)))] +macro_rules! seq_impl { + ($ty:ident < T $(: $tbound1:ident $(+ $tbound2:ident)*)* $(, $typaram:ident : $bound:ident)* >) => { + impl Serialize for $ty + where + T: Serialize, + { + #[inline] + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.collect_seq(self) + } + } + } +} + +#[cfg(all(any(feature = "std", feature = "alloc"), no_relaxed_trait_bounds))] macro_rules! seq_impl { ($ty:ident < T $(: $tbound1:ident $(+ $tbound2:ident)*)* $(, $typaram:ident : $bound:ident)* >) => { impl Serialize for $ty