@@ -934,3 +934,33 @@ impl_as_primitive!(f32 => { f32, f64 });
934
934
impl_as_primitive ! ( f64 => { f32 , f64 } ) ;
935
935
impl_as_primitive ! ( char => { char } ) ;
936
936
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