@@ -988,3 +988,104 @@ macro_rules! nonzero_unsigned_is_power_of_two {
988
988
}
989
989
990
990
nonzero_unsigned_is_power_of_two ! { NonZeroU8 NonZeroU16 NonZeroU32 NonZeroU64 NonZeroU128 NonZeroUsize }
991
+
992
+ macro_rules! nonzero_min_max_unsigned {
993
+ ( $( $Ty: ident( $Int: ident) ; ) + ) => {
994
+ $(
995
+ impl $Ty {
996
+ /// The smallest value that can be represented by this non-zero
997
+ /// integer type, 1.
998
+ ///
999
+ /// Note: While most integer types are defined for every whole
1000
+ /// number between `MIN` and `MAX`, signed non-zero integers are
1001
+ /// a special case. They have a "gap" at 0.
1002
+ ///
1003
+ /// # Examples
1004
+ ///
1005
+ /// ```
1006
+ /// #![feature(nonzero_min_max)]
1007
+ #[ doc = concat!( "# use std::num::" , stringify!( $Ty) , ";" ) ]
1008
+ ///
1009
+ #[ doc = concat!( "assert_eq!(" , stringify!( $Ty) , "::MIN.get(), 1" , stringify!( $Int) , ");" ) ]
1010
+ /// ```
1011
+ #[ unstable( feature = "nonzero_min_max" , issue = "89065" ) ]
1012
+ pub const MIN : Self = Self :: new( 1 ) . unwrap( ) ;
1013
+
1014
+ /// The largest value that can be represented by this non-zero
1015
+ /// integer type,
1016
+ #[ doc = concat!( "equal to [`" , stringify!( $Int) , "::MAX`]." ) ]
1017
+ ///
1018
+ /// Note: While most integer types are defined for every whole
1019
+ /// number between `MIN` and `MAX`, signed non-zero integers are
1020
+ /// a special case. They have a "gap" at 0.
1021
+ ///
1022
+ /// # Examples
1023
+ ///
1024
+ /// ```
1025
+ /// #![feature(nonzero_min_max)]
1026
+ #[ doc = concat!( "# use std::num::" , stringify!( $Ty) , ";" ) ]
1027
+ ///
1028
+ #[ doc = concat!( "assert_eq!(" , stringify!( $Ty) , "::MAX.get(), " , stringify!( $Int) , "::MAX);" ) ]
1029
+ /// ```
1030
+ #[ unstable( feature = "nonzero_min_max" , issue = "89065" ) ]
1031
+ pub const MAX : Self = Self :: new( <$Int>:: MAX ) . unwrap( ) ;
1032
+ }
1033
+ ) +
1034
+ }
1035
+ }
1036
+
1037
+ macro_rules! nonzero_min_max_signed {
1038
+ ( $( $Ty: ident( $Int: ident) ; ) + ) => {
1039
+ $(
1040
+ impl $Ty {
1041
+ /// The smallest value that can be represented by this non-zero
1042
+ /// integer type,
1043
+ #[ doc = concat!( "equal to [`" , stringify!( $Int) , "::MIN`]." ) ]
1044
+ ///
1045
+ /// # Examples
1046
+ ///
1047
+ /// ```
1048
+ /// #![feature(nonzero_min_max)]
1049
+ #[ doc = concat!( "# use std::num::" , stringify!( $Ty) , ";" ) ]
1050
+ ///
1051
+ #[ doc = concat!( "assert_eq!(" , stringify!( $Ty) , "::MIN.get(), " , stringify!( $Int) , "::MIN);" ) ]
1052
+ /// ```
1053
+ #[ unstable( feature = "nonzero_min_max" , issue = "89065" ) ]
1054
+ pub const MIN : Self = Self :: new( <$Int>:: MIN ) . unwrap( ) ;
1055
+
1056
+ /// The largest value that can be represented by this non-zero
1057
+ /// integer type,
1058
+ #[ doc = concat!( "equal to [`" , stringify!( $Int) , "::MAX`]." ) ]
1059
+ ///
1060
+ /// # Examples
1061
+ ///
1062
+ /// ```
1063
+ /// #![feature(nonzero_min_max)]
1064
+ #[ doc = concat!( "# use std::num::" , stringify!( $Ty) , ";" ) ]
1065
+ ///
1066
+ #[ doc = concat!( "assert_eq!(" , stringify!( $Ty) , "::MAX.get(), " , stringify!( $Int) , "::MAX);" ) ]
1067
+ /// ```
1068
+ #[ unstable( feature = "nonzero_min_max" , issue = "89065" ) ]
1069
+ pub const MAX : Self = Self :: new( <$Int>:: MAX ) . unwrap( ) ;
1070
+ }
1071
+ ) +
1072
+ }
1073
+ }
1074
+
1075
+ nonzero_min_max_unsigned ! {
1076
+ NonZeroU8 ( u8 ) ;
1077
+ NonZeroU16 ( u16 ) ;
1078
+ NonZeroU32 ( u32 ) ;
1079
+ NonZeroU64 ( u64 ) ;
1080
+ NonZeroU128 ( u128 ) ;
1081
+ NonZeroUsize ( usize ) ;
1082
+ }
1083
+
1084
+ nonzero_min_max_signed ! {
1085
+ NonZeroI8 ( i8 ) ;
1086
+ NonZeroI16 ( i16 ) ;
1087
+ NonZeroI32 ( i32 ) ;
1088
+ NonZeroI64 ( i64 ) ;
1089
+ NonZeroI128 ( i128 ) ;
1090
+ NonZeroIsize ( isize ) ;
1091
+ }
0 commit comments