Skip to content

Commit 7f6c0e5

Browse files
committed
Implement AsPrimitive for NonZero*
1 parent acb1a26 commit 7f6c0e5

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

src/cast.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,3 +934,33 @@ impl_as_primitive!(f32 => { f32, f64 });
934934
impl_as_primitive!(f64 => { f32, f64 });
935935
impl_as_primitive!(char => { char });
936936
impl_as_primitive!(bool => {});
937+
938+
macro_rules! impl_as_primitive_non_zero {
939+
(@ $T: ty => $(#[$cfg:meta])* impl $U: ty ) => {
940+
$(#[$cfg])*
941+
impl AsPrimitive<$U> for $T {
942+
#[inline] fn as_(self) -> $U { self.get() as $U }
943+
}
944+
};
945+
(@ $T: ty => { $( $U: ty ),* } ) => {$(
946+
impl_as_primitive_non_zero!(@ $T => impl $U);
947+
)*};
948+
($T: ty => { $( $U: ty ),* } ) => {
949+
impl_as_primitive_non_zero!(@ $T => { $( $U ),* });
950+
impl_as_primitive_non_zero!(@ $T => { u8, u16, u32, u64, u128, usize });
951+
impl_as_primitive_non_zero!(@ $T => { i8, i16, i32, i64, i128, isize });
952+
};
953+
}
954+
955+
impl_as_primitive_non_zero!(NonZeroU8 => { char, f32, f64 });
956+
impl_as_primitive_non_zero!(NonZeroI8 => { f32, f64 });
957+
impl_as_primitive_non_zero!(NonZeroU16 => { f32, f64 });
958+
impl_as_primitive_non_zero!(NonZeroI16 => { f32, f64 });
959+
impl_as_primitive_non_zero!(NonZeroU32 => { f32, f64 });
960+
impl_as_primitive_non_zero!(NonZeroI32 => { f32, f64 });
961+
impl_as_primitive_non_zero!(NonZeroU64 => { f32, f64 });
962+
impl_as_primitive_non_zero!(NonZeroI64 => { f32, f64 });
963+
impl_as_primitive_non_zero!(NonZeroU128 => { f32, f64 });
964+
impl_as_primitive_non_zero!(NonZeroI128 => { f32, f64 });
965+
impl_as_primitive_non_zero!(NonZeroUsize => { f32, f64 });
966+
impl_as_primitive_non_zero!(NonZeroIsize => { f32, f64 });

0 commit comments

Comments
 (0)