diff --git a/src/lib.rs b/src/lib.rs index 7f1762e..9086300 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,6 +11,8 @@ #[cfg(any(doc, test))] extern crate alloc; +use core::num::*; + #[cfg(any(doc, test))] use alloc::string::ToString; @@ -79,39 +81,39 @@ impl ToArrayString for bool { impl_float!(ToArrayString<16> for f32); impl_float!(ToArrayString<24> for f64); -impl_int!(ToArrayString<3> for u8); -impl_int!(ToArrayString<4> for i8); -impl_int!(ToArrayString<5> for u16); -impl_int!(ToArrayString<6> for i16); -impl_int!(ToArrayString<10> for u32); -impl_int!(ToArrayString<11> for i32); -impl_int!(ToArrayString<20> for u64); -impl_int!(ToArrayString<21> for i64); -impl_int!(ToArrayString<39> for u128); -impl_int!(ToArrayString<40> for i128); +impl_int!(ToArrayString<3> for (u8, NonZeroU8)); +impl_int!(ToArrayString<4> for (i8, NonZeroI8)); +impl_int!(ToArrayString<5> for (u16, NonZeroU16)); +impl_int!(ToArrayString<6> for (i16, NonZeroI16)); +impl_int!(ToArrayString<10> for (u32, NonZeroU32)); +impl_int!(ToArrayString<11> for (i32, NonZeroI32)); +impl_int!(ToArrayString<20> for (u64, NonZeroU64)); +impl_int!(ToArrayString<21> for (i64, NonZeroI64)); +impl_int!(ToArrayString<39> for (u128, NonZeroU128)); +impl_int!(ToArrayString<40> for (i128, NonZeroI128)); #[cfg(target_pointer_width = "16")] mod usize_impls { use super::*; - impl_int!(ToArrayString<5> for usize); - impl_int!(ToArrayString<6> for isize); + impl_int!(ToArrayString<5> for (usize, NonZeroUsize)); + impl_int!(ToArrayString<6> for (isize, NonZeroIsize)); } #[cfg(target_pointer_width = "32")] mod usize_impls { use super::*; - impl_int!(ToArrayString<10> for usize); - impl_int!(ToArrayString<11> for isize); + impl_int!(ToArrayString<10> for (usize, NonZeroUsize)); + impl_int!(ToArrayString<11> for (isize, NonZeroIsize)); } #[cfg(target_pointer_width = "64")] mod usize_impls { use super::*; - impl_int!(ToArrayString<20> for usize); - impl_int!(ToArrayString<21> for isize); + impl_int!(ToArrayString<20> for (usize, NonZeroUsize)); + impl_int!(ToArrayString<21> for (isize, NonZeroIsize)); } #[cfg(test)] @@ -124,4 +126,18 @@ mod tests { } crate::macros::generate_test!(u8, i8, u16, i16, u32, i32, u64, i64, u128, i128, usize, isize); + crate::macros::generate_test!( + NonZeroU8, + NonZeroI8, + NonZeroU16, + NonZeroI16, + NonZeroU32, + NonZeroI32, + NonZeroU64, + NonZeroI64, + NonZeroU128, + NonZeroI128, + NonZeroUsize, + NonZeroIsize + ); } diff --git a/src/macros.rs b/src/macros.rs index f05bd35..4fb4a02 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -13,7 +13,7 @@ gen_fmt_to_buf!(fmt_int_to_buf(itoa::Integer)); gen_fmt_to_buf!(fmt_float_to_buf(ryu::Float)); macro_rules! impl_int { - (ToArrayString<$len:literal> for $type:ty) => { + (ToArrayString<$len:literal> for ($type:ty, $non_zero:ty)) => { impl ToArrayString for $type { const MAX_LENGTH: usize = $len; type ArrayString = ArrayString<$len>; @@ -24,7 +24,7 @@ macro_rules! impl_int { } } - impl ToArrayString for core::num::NonZero<$type> { + impl ToArrayString for $non_zero { const MAX_LENGTH: usize = $len; type ArrayString = ArrayString<$len>; @@ -54,9 +54,8 @@ macro_rules! generate_test { ($($type:ident),*) => { paste::paste!($( #[test] - fn []() { + fn []() { test_impl($type::MIN, $type::MAX); - test_impl(core::num::NonZero::<$type>::MIN, core::num::NonZero::<$type>::MAX); } )*); };