From 34866e20a832950188105a2ac51f1636007bf509 Mon Sep 17 00:00:00 2001 From: Flaise Date: Sun, 28 Jul 2019 09:12:29 -0500 Subject: [PATCH 1/2] Add support for NonZeroI* types --- serde/src/de/impls.rs | 7 ++++++- serde/src/ser/impls.rs | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index 9e72aad23..5244c65bd 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -2404,12 +2404,16 @@ macro_rules! nonzero_integers { } nonzero_integers! { - // Not including signed NonZeroI* since they might be removed NonZeroU8, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroUsize, + NonZeroI8, + NonZeroI16, + NonZeroI32, + NonZeroI64, + NonZeroIsize, } // Currently 128-bit integers do not work on Emscripten targets so we need an @@ -2417,6 +2421,7 @@ nonzero_integers! { serde_if_integer128! { nonzero_integers! { NonZeroU128, + NonZeroI128, } } diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index caf48e89d..e0549ddc2 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -481,12 +481,16 @@ macro_rules! nonzero_integers { } nonzero_integers! { - // Not including signed NonZeroI* since they might be removed NonZeroU8, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroUsize, + NonZeroI8, + NonZeroI16, + NonZeroI32, + NonZeroI64, + NonZeroIsize, } // Currently 128-bit integers do not work on Emscripten targets so we need an @@ -494,6 +498,7 @@ nonzero_integers! { serde_if_integer128! { nonzero_integers! { NonZeroU128, + NonZeroI128, } } From 78c7f09e28df6550c8bae5e04c86a1b5202d6a1e Mon Sep 17 00:00:00 2001 From: Flaise Date: Sun, 28 Jul 2019 11:44:31 -0500 Subject: [PATCH 2/2] Add build gate for nonzero signed integers so rustc <1.34 still works --- serde/build.rs | 3 ++- serde/src/de/impls.rs | 8 ++++++++ serde/src/ser/impls.rs | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/serde/build.rs b/serde/build.rs index 2d985b1c4..e36ed62f5 100644 --- a/serde/build.rs +++ b/serde/build.rs @@ -69,11 +69,12 @@ fn main() { println!("cargo:rustc-cfg=num_nonzero"); } - // TryFrom and Atomic types stabilized in Rust 1.34: + // TryFrom, Atomic types, and non-zero signed integers stabilized in Rust 1.34: // https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html#tryfrom-and-tryinto // https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html#library-stabilizations if minor >= 34 { println!("cargo:rustc-cfg=core_try_from"); + println!("cargo:rustc-cfg=num_nonzero_signed"); // Whitelist of archs that support std::sync::atomic module. Ideally we // would use #[cfg(target_has_atomic = "...")] but it is not stable yet. diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index 5244c65bd..e96314809 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -2409,6 +2409,10 @@ nonzero_integers! { NonZeroU32, NonZeroU64, NonZeroUsize, +} + +#[cfg(num_nonzero_signed)] +nonzero_integers! { NonZeroI8, NonZeroI16, NonZeroI32, @@ -2421,6 +2425,10 @@ nonzero_integers! { serde_if_integer128! { nonzero_integers! { NonZeroU128, + } + + #[cfg(num_nonzero_signed)] + nonzero_integers! { NonZeroI128, } } diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index e0549ddc2..0ac667dbf 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -486,6 +486,10 @@ nonzero_integers! { NonZeroU32, NonZeroU64, NonZeroUsize, +} + +#[cfg(num_nonzero_signed)] +nonzero_integers! { NonZeroI8, NonZeroI16, NonZeroI32, @@ -498,6 +502,10 @@ nonzero_integers! { serde_if_integer128! { nonzero_integers! { NonZeroU128, + } + + #[cfg(num_nonzero_signed)] + nonzero_integers! { NonZeroI128, } }