Skip to content

Commit

Permalink
Implement AsPrimitive for NonZero*
Browse files Browse the repository at this point in the history
  • Loading branch information
acrrd committed Sep 17, 2024
1 parent acb1a26 commit 7f6c0e5
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -934,3 +934,33 @@ impl_as_primitive!(f32 => { f32, f64 });
impl_as_primitive!(f64 => { f32, f64 });
impl_as_primitive!(char => { char });
impl_as_primitive!(bool => {});

macro_rules! impl_as_primitive_non_zero {
(@ $T: ty => $(#[$cfg:meta])* impl $U: ty ) => {
$(#[$cfg])*
impl AsPrimitive<$U> for $T {
#[inline] fn as_(self) -> $U { self.get() as $U }
}
};
(@ $T: ty => { $( $U: ty ),* } ) => {$(
impl_as_primitive_non_zero!(@ $T => impl $U);
)*};
($T: ty => { $( $U: ty ),* } ) => {
impl_as_primitive_non_zero!(@ $T => { $( $U ),* });
impl_as_primitive_non_zero!(@ $T => { u8, u16, u32, u64, u128, usize });
impl_as_primitive_non_zero!(@ $T => { i8, i16, i32, i64, i128, isize });
};
}

impl_as_primitive_non_zero!(NonZeroU8 => { char, f32, f64 });
impl_as_primitive_non_zero!(NonZeroI8 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroU16 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroI16 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroU32 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroI32 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroU64 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroI64 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroU128 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroI128 => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroUsize => { f32, f64 });
impl_as_primitive_non_zero!(NonZeroIsize => { f32, f64 });

0 comments on commit 7f6c0e5

Please sign in to comment.