@@ -485,3 +485,49 @@ nzint_impl_try_from_int! { i32, NonZeroI32, #[stable(feature = "nzint_try_from_i
485485nzint_impl_try_from_int ! { i64 , NonZeroI64 , #[ stable( feature = "nzint_try_from_int_conv" , since = "1.46.0" ) ] }
486486nzint_impl_try_from_int ! { i128 , NonZeroI128 , #[ stable( feature = "nzint_try_from_int_conv" , since = "1.46.0" ) ] }
487487nzint_impl_try_from_int ! { isize , NonZeroIsize , #[ stable( feature = "nzint_try_from_int_conv" , since = "1.46.0" ) ] }
488+
489+ macro_rules! nzint_impl_try_from_nzint {
490+ ( $From: ty => $To: ty, $doc: expr) => {
491+ #[ stable( feature = "nzint_try_from_nzint_conv" , since = "1.49.0" ) ]
492+ #[ doc = $doc]
493+ impl TryFrom <$From> for $To {
494+ type Error = TryFromIntError ;
495+
496+ #[ inline]
497+ fn try_from( value: $From) -> Result <Self , Self :: Error > {
498+ TryFrom :: try_from( value. get( ) ) . map( |v| {
499+ // SAFETY: $From is a NonZero type, so v is not zero.
500+ unsafe { Self :: new_unchecked( v) }
501+ } )
502+ }
503+ }
504+ } ;
505+ ( $To: ty: $( $From: ty) ,* ) => { $(
506+ nzint_impl_try_from_nzint!(
507+ $From => $To,
508+ concat!(
509+ "Attempts to convert `" ,
510+ stringify!( $From) ,
511+ "` to `" ,
512+ stringify!( $To) ,
513+ "`." ,
514+ )
515+ ) ;
516+ ) * } ;
517+ }
518+
519+ // Non-zero int -> non-zero unsigned int
520+ nzint_impl_try_from_nzint ! { NonZeroU8 : NonZeroI8 , NonZeroU16 , NonZeroI16 , NonZeroU32 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
521+ nzint_impl_try_from_nzint ! { NonZeroU16 : NonZeroI8 , NonZeroI16 , NonZeroU32 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
522+ nzint_impl_try_from_nzint ! { NonZeroU32 : NonZeroI8 , NonZeroI16 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
523+ nzint_impl_try_from_nzint ! { NonZeroU64 : NonZeroI8 , NonZeroI16 , NonZeroI32 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
524+ nzint_impl_try_from_nzint ! { NonZeroU128 : NonZeroI8 , NonZeroI16 , NonZeroI32 , NonZeroI64 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
525+ nzint_impl_try_from_nzint ! { NonZeroUsize : NonZeroI8 , NonZeroI16 , NonZeroU32 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroIsize }
526+
527+ // Non-zero int -> non-zero signed int
528+ nzint_impl_try_from_nzint ! { NonZeroI8 : NonZeroU8 , NonZeroU16 , NonZeroI16 , NonZeroU32 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
529+ nzint_impl_try_from_nzint ! { NonZeroI16 : NonZeroU16 , NonZeroU32 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
530+ nzint_impl_try_from_nzint ! { NonZeroI32 : NonZeroU32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
531+ nzint_impl_try_from_nzint ! { NonZeroI64 : NonZeroU64 , NonZeroU128 , NonZeroI128 , NonZeroUsize , NonZeroIsize }
532+ nzint_impl_try_from_nzint ! { NonZeroI128 : NonZeroU128 , NonZeroUsize , NonZeroIsize }
533+ nzint_impl_try_from_nzint ! { NonZeroIsize : NonZeroU16 , NonZeroU32 , NonZeroI32 , NonZeroU64 , NonZeroI64 , NonZeroU128 , NonZeroI128 , NonZeroUsize }
0 commit comments