@@ -5250,3 +5250,73 @@ impl_from! { u32, f64, #[stable(feature = "lossless_float_conv", since = "1.6.0"
5250
5250
5251
5251
// Float -> Float
5252
5252
impl_from ! { f32 , f64 , #[ stable( feature = "lossless_float_conv" , since = "1.6.0" ) ] }
5253
+
5254
+ // Conversion traits for non-zero integer types
5255
+ macro_rules! nzint_impl_from {
5256
+ ( $Small: ty, $Large: ty, #[ $attr: meta] , $doc: expr) => {
5257
+ #[ $attr]
5258
+ #[ doc = $doc]
5259
+ impl From <$Small> for $Large {
5260
+ /// Widens a non-zero integer without checking the value is zero.
5261
+ ///
5262
+ /// # Safety
5263
+ ///
5264
+ /// The value is assumed to be non-zero.
5265
+ #[ inline]
5266
+ fn from( small: $Small) -> $Large {
5267
+ unsafe {
5268
+ <$Large>:: new_unchecked( small. get( ) . into( ) )
5269
+ }
5270
+ }
5271
+ }
5272
+ } ;
5273
+ ( $Small: ty, $Large: ty, #[ $attr: meta] ) => {
5274
+ nzint_impl_from!( $Small,
5275
+ $Large,
5276
+ #[ $attr] ,
5277
+ concat!( "Converts `" ,
5278
+ stringify!( $Small) ,
5279
+ "` to `" ,
5280
+ stringify!( $Large) ,
5281
+ "` losslessly." ) ) ;
5282
+ }
5283
+ }
5284
+
5285
+ // Non-zero Unsigned -> Non-zero Unsigned
5286
+ nzint_impl_from ! { NonZeroU8 , NonZeroU16 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5287
+ nzint_impl_from ! { NonZeroU8 , NonZeroU32 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5288
+ nzint_impl_from ! { NonZeroU8 , NonZeroU64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5289
+ nzint_impl_from ! { NonZeroU8 , NonZeroU128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5290
+ nzint_impl_from ! { NonZeroU8 , NonZeroUsize , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5291
+ nzint_impl_from ! { NonZeroU16 , NonZeroU32 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5292
+ nzint_impl_from ! { NonZeroU16 , NonZeroU64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5293
+ nzint_impl_from ! { NonZeroU16 , NonZeroU128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5294
+ nzint_impl_from ! { NonZeroU32 , NonZeroU64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5295
+ nzint_impl_from ! { NonZeroU32 , NonZeroU128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5296
+ nzint_impl_from ! { NonZeroU64 , NonZeroU128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5297
+
5298
+ // Non-zero Signed -> Non-zero Signed
5299
+ nzint_impl_from ! { NonZeroI8 , NonZeroI16 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5300
+ nzint_impl_from ! { NonZeroI8 , NonZeroI32 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5301
+ nzint_impl_from ! { NonZeroI8 , NonZeroI64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5302
+ nzint_impl_from ! { NonZeroI8 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5303
+ nzint_impl_from ! { NonZeroI8 , NonZeroIsize , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5304
+ nzint_impl_from ! { NonZeroI16 , NonZeroI32 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5305
+ nzint_impl_from ! { NonZeroI16 , NonZeroI64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5306
+ nzint_impl_from ! { NonZeroI16 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5307
+ nzint_impl_from ! { NonZeroI32 , NonZeroI64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5308
+ nzint_impl_from ! { NonZeroI32 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5309
+ nzint_impl_from ! { NonZeroI64 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5310
+
5311
+ // NonZero UnSigned -> Non-zero Signed
5312
+ nzint_impl_from ! { NonZeroU8 , NonZeroI16 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5313
+ nzint_impl_from ! { NonZeroU8 , NonZeroI32 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5314
+ nzint_impl_from ! { NonZeroU8 , NonZeroI64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5315
+ nzint_impl_from ! { NonZeroU8 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5316
+ nzint_impl_from ! { NonZeroU8 , NonZeroIsize , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5317
+ nzint_impl_from ! { NonZeroU16 , NonZeroI32 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5318
+ nzint_impl_from ! { NonZeroU16 , NonZeroI64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5319
+ nzint_impl_from ! { NonZeroU16 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5320
+ nzint_impl_from ! { NonZeroU32 , NonZeroI64 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5321
+ nzint_impl_from ! { NonZeroU32 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
5322
+ nzint_impl_from ! { NonZeroU64 , NonZeroI128 , #[ unstable( feature = "lossless_non_zero_int_conv" , issue = "66196" ) ] }
0 commit comments