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 9e72aad23..e96314809 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -2404,7 +2404,6 @@ macro_rules! nonzero_integers { } nonzero_integers! { - // Not including signed NonZeroI* since they might be removed NonZeroU8, NonZeroU16, NonZeroU32, @@ -2412,12 +2411,26 @@ nonzero_integers! { NonZeroUsize, } +#[cfg(num_nonzero_signed)] +nonzero_integers! { + NonZeroI8, + NonZeroI16, + NonZeroI32, + NonZeroI64, + NonZeroIsize, +} + // Currently 128-bit integers do not work on Emscripten targets so we need an // additional `#[cfg]` 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 caf48e89d..0ac667dbf 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -481,7 +481,6 @@ macro_rules! nonzero_integers { } nonzero_integers! { - // Not including signed NonZeroI* since they might be removed NonZeroU8, NonZeroU16, NonZeroU32, @@ -489,12 +488,26 @@ nonzero_integers! { NonZeroUsize, } +#[cfg(num_nonzero_signed)] +nonzero_integers! { + NonZeroI8, + NonZeroI16, + NonZeroI32, + NonZeroI64, + NonZeroIsize, +} + // Currently 128-bit integers do not work on Emscripten targets so we need an // additional `#[cfg]` serde_if_integer128! { nonzero_integers! { NonZeroU128, } + + #[cfg(num_nonzero_signed)] + nonzero_integers! { + NonZeroI128, + } } impl Serialize for Cell