@@ -485,3 +485,49 @@ nzint_impl_try_from_int! { i32, NonZeroI32, #[stable(feature = "nzint_try_from_i
485
485
nzint_impl_try_from_int ! { i64 , NonZeroI64 , #[ stable( feature = "nzint_try_from_int_conv" , since = "1.46.0" ) ] }
486
486
nzint_impl_try_from_int ! { i128 , NonZeroI128 , #[ stable( feature = "nzint_try_from_int_conv" , since = "1.46.0" ) ] }
487
487
nzint_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