Skip to content

Commit 2b9af3d

Browse files
committed
Implement ToPrimitive for NonZero*
1 parent 22ce2dc commit 2b9af3d

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

src/cast.rs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
use core::mem::size_of;
22
use core::num::Wrapping;
3+
use core::num::{
4+
NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128,
5+
NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize,
6+
};
37
use core::{f32, f64};
48
use core::{i128, i16, i32, i64, i8, isize};
59
use core::{u128, u16, u32, u64, u8, usize};
@@ -266,6 +270,61 @@ impl_to_primitive_uint!(u32);
266270
impl_to_primitive_uint!(u64);
267271
impl_to_primitive_uint!(u128);
268272

273+
macro_rules! impl_to_primitive_nonzero_to_method {
274+
($SrcT:ident : $( $(#[$cfg:meta])* fn $method:ident -> $DstT:ident ; )*) => {$(
275+
#[inline]
276+
$(#[$cfg])*
277+
fn $method(&self) -> Option<$DstT> {
278+
self.get().$method()
279+
}
280+
)*}
281+
}
282+
283+
macro_rules! impl_to_primitive_nonzero {
284+
($T:ident) => {
285+
impl ToPrimitive for $T {
286+
impl_to_primitive_nonzero_to_method! { $T:
287+
fn to_isize -> isize;
288+
fn to_i8 -> i8;
289+
fn to_i16 -> i16;
290+
fn to_i32 -> i32;
291+
fn to_i64 -> i64;
292+
fn to_i128 -> i128;
293+
294+
fn to_usize -> usize;
295+
fn to_u8 -> u8;
296+
fn to_u16 -> u16;
297+
fn to_u32 -> u32;
298+
fn to_u64 -> u64;
299+
fn to_u128 -> u128;
300+
}
301+
302+
#[inline]
303+
fn to_f32(&self) -> Option<f32> {
304+
Some(self.get() as f32)
305+
}
306+
#[inline]
307+
fn to_f64(&self) -> Option<f64> {
308+
Some(self.get() as f64)
309+
}
310+
}
311+
};
312+
}
313+
314+
impl_to_primitive_nonzero!(NonZeroUsize);
315+
impl_to_primitive_nonzero!(NonZeroU8);
316+
impl_to_primitive_nonzero!(NonZeroU16);
317+
impl_to_primitive_nonzero!(NonZeroU32);
318+
impl_to_primitive_nonzero!(NonZeroU64);
319+
impl_to_primitive_nonzero!(NonZeroU128);
320+
321+
impl_to_primitive_nonzero!(NonZeroIsize);
322+
impl_to_primitive_nonzero!(NonZeroI8);
323+
impl_to_primitive_nonzero!(NonZeroI16);
324+
impl_to_primitive_nonzero!(NonZeroI32);
325+
impl_to_primitive_nonzero!(NonZeroI64);
326+
impl_to_primitive_nonzero!(NonZeroI128);
327+
269328
macro_rules! impl_to_primitive_float_to_float {
270329
($SrcT:ident : $( fn $method:ident -> $DstT:ident ; )*) => {$(
271330
#[inline]

0 commit comments

Comments
 (0)