4
4
5
5
#![ stable( feature = "rust1" , since = "1.0.0" ) ]
6
6
7
- use crate :: convert:: Infallible ;
8
- use crate :: fmt;
9
7
use crate :: intrinsics;
10
8
use crate :: mem;
11
9
use crate :: str:: FromStr ;
@@ -40,18 +38,31 @@ pub mod dec2flt;
40
38
pub mod diy_float;
41
39
pub mod flt2dec;
42
40
41
+ mod error;
43
42
mod nonzero;
44
43
mod wrapping;
45
44
46
45
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
47
46
pub use wrapping:: Wrapping ;
48
47
48
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
49
+ pub use dec2flt:: ParseFloatError ;
50
+
51
+ #[ stable( feature = "rust1" , since = "1.0.0" ) ]
52
+ pub use error:: ParseIntError ;
53
+
49
54
#[ stable( feature = "nonzero" , since = "1.28.0" ) ]
50
55
pub use nonzero:: { NonZeroU128 , NonZeroU16 , NonZeroU32 , NonZeroU64 , NonZeroU8 , NonZeroUsize } ;
51
56
52
57
#[ stable( feature = "signed_nonzero" , since = "1.34.0" ) ]
53
58
pub use nonzero:: { NonZeroI128 , NonZeroI16 , NonZeroI32 , NonZeroI64 , NonZeroI8 , NonZeroIsize } ;
54
59
60
+ #[ stable( feature = "try_from" , since = "1.34.0" ) ]
61
+ pub use error:: TryFromIntError ;
62
+
63
+ #[ unstable( feature = "int_error_matching" , issue = "22639" ) ]
64
+ pub use error:: IntErrorKind ;
65
+
55
66
macro_rules! usize_isize_to_xe_bytes_doc {
56
67
( ) => {
57
68
"
@@ -4904,6 +4915,16 @@ pub enum FpCategory {
4904
4915
Normal ,
4905
4916
}
4906
4917
4918
+ #[ doc( hidden) ]
4919
+ trait FromStrRadixHelper : PartialOrd + Copy {
4920
+ fn min_value ( ) -> Self ;
4921
+ fn max_value ( ) -> Self ;
4922
+ fn from_u32 ( u : u32 ) -> Self ;
4923
+ fn checked_mul ( & self , other : u32 ) -> Option < Self > ;
4924
+ fn checked_sub ( & self , other : u32 ) -> Option < Self > ;
4925
+ fn checked_add ( & self , other : u32 ) -> Option < Self > ;
4926
+ }
4927
+
4907
4928
macro_rules! from_str_radix_int_impl {
4908
4929
( $( $t: ty) * ) => { $(
4909
4930
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -4917,58 +4938,6 @@ macro_rules! from_str_radix_int_impl {
4917
4938
}
4918
4939
from_str_radix_int_impl ! { isize i8 i16 i32 i64 i128 usize u8 u16 u32 u64 u128 }
4919
4940
4920
- /// The error type returned when a checked integral type conversion fails.
4921
- #[ stable( feature = "try_from" , since = "1.34.0" ) ]
4922
- #[ derive( Debug , Copy , Clone , PartialEq , Eq ) ]
4923
- pub struct TryFromIntError ( pub ( crate ) ( ) ) ;
4924
-
4925
- impl TryFromIntError {
4926
- #[ unstable(
4927
- feature = "int_error_internals" ,
4928
- reason = "available through Error trait and this method should \
4929
- not be exposed publicly",
4930
- issue = "none"
4931
- ) ]
4932
- #[ doc( hidden) ]
4933
- pub fn __description ( & self ) -> & str {
4934
- "out of range integral type conversion attempted"
4935
- }
4936
- }
4937
-
4938
- #[ stable( feature = "try_from" , since = "1.34.0" ) ]
4939
- impl fmt:: Display for TryFromIntError {
4940
- fn fmt ( & self , fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
4941
- self . __description ( ) . fmt ( fmt)
4942
- }
4943
- }
4944
-
4945
- #[ stable( feature = "try_from" , since = "1.34.0" ) ]
4946
- impl From < Infallible > for TryFromIntError {
4947
- fn from ( x : Infallible ) -> TryFromIntError {
4948
- match x { }
4949
- }
4950
- }
4951
-
4952
- #[ unstable( feature = "never_type" , issue = "35121" ) ]
4953
- impl From < !> for TryFromIntError {
4954
- fn from ( never : !) -> TryFromIntError {
4955
- // Match rather than coerce to make sure that code like
4956
- // `From<Infallible> for TryFromIntError` above will keep working
4957
- // when `Infallible` becomes an alias to `!`.
4958
- match never { }
4959
- }
4960
- }
4961
-
4962
- #[ doc( hidden) ]
4963
- trait FromStrRadixHelper : PartialOrd + Copy {
4964
- fn min_value ( ) -> Self ;
4965
- fn max_value ( ) -> Self ;
4966
- fn from_u32 ( u : u32 ) -> Self ;
4967
- fn checked_mul ( & self , other : u32 ) -> Option < Self > ;
4968
- fn checked_sub ( & self , other : u32 ) -> Option < Self > ;
4969
- fn checked_add ( & self , other : u32 ) -> Option < Self > ;
4970
- }
4971
-
4972
4941
macro_rules! doit {
4973
4942
( $( $t: ty) * ) => ( $( impl FromStrRadixHelper for $t {
4974
4943
#[ inline]
@@ -5061,111 +5030,3 @@ fn from_str_radix<T: FromStrRadixHelper>(src: &str, radix: u32) -> Result<T, Par
5061
5030
}
5062
5031
Ok ( result)
5063
5032
}
5064
-
5065
- /// An error which can be returned when parsing an integer.
5066
- ///
5067
- /// This error is used as the error type for the `from_str_radix()` functions
5068
- /// on the primitive integer types, such as [`i8::from_str_radix`].
5069
- ///
5070
- /// # Potential causes
5071
- ///
5072
- /// Among other causes, `ParseIntError` can be thrown because of leading or trailing whitespace
5073
- /// in the string e.g., when it is obtained from the standard input.
5074
- /// Using the [`str.trim()`] method ensures that no whitespace remains before parsing.
5075
- ///
5076
- /// [`str.trim()`]: ../../std/primitive.str.html#method.trim
5077
- /// [`i8::from_str_radix`]: ../../std/primitive.i8.html#method.from_str_radix
5078
- ///
5079
- /// # Example
5080
- ///
5081
- /// ```
5082
- /// if let Err(e) = i32::from_str_radix("a12", 10) {
5083
- /// println!("Failed conversion to i32: {}", e);
5084
- /// }
5085
- /// ```
5086
- #[ derive( Debug , Clone , PartialEq , Eq ) ]
5087
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
5088
- pub struct ParseIntError {
5089
- kind : IntErrorKind ,
5090
- }
5091
-
5092
- /// Enum to store the various types of errors that can cause parsing an integer to fail.
5093
- ///
5094
- /// # Example
5095
- ///
5096
- /// ```
5097
- /// #![feature(int_error_matching)]
5098
- ///
5099
- /// # fn main() {
5100
- /// if let Err(e) = i32::from_str_radix("a12", 10) {
5101
- /// println!("Failed conversion to i32: {:?}", e.kind());
5102
- /// }
5103
- /// # }
5104
- /// ```
5105
- #[ unstable(
5106
- feature = "int_error_matching" ,
5107
- reason = "it can be useful to match errors when making error messages \
5108
- for integer parsing",
5109
- issue = "22639"
5110
- ) ]
5111
- #[ derive( Debug , Clone , PartialEq , Eq ) ]
5112
- #[ non_exhaustive]
5113
- pub enum IntErrorKind {
5114
- /// Value being parsed is empty.
5115
- ///
5116
- /// Among other causes, this variant will be constructed when parsing an empty string.
5117
- Empty ,
5118
- /// Contains an invalid digit.
5119
- ///
5120
- /// Among other causes, this variant will be constructed when parsing a string that
5121
- /// contains a letter.
5122
- InvalidDigit ,
5123
- /// Integer is too large to store in target integer type.
5124
- Overflow ,
5125
- /// Integer is too small to store in target integer type.
5126
- Underflow ,
5127
- /// Value was Zero
5128
- ///
5129
- /// This variant will be emitted when the parsing string has a value of zero, which
5130
- /// would be illegal for non-zero types.
5131
- Zero ,
5132
- }
5133
-
5134
- impl ParseIntError {
5135
- /// Outputs the detailed cause of parsing an integer failing.
5136
- #[ unstable(
5137
- feature = "int_error_matching" ,
5138
- reason = "it can be useful to match errors when making error messages \
5139
- for integer parsing",
5140
- issue = "22639"
5141
- ) ]
5142
- pub fn kind ( & self ) -> & IntErrorKind {
5143
- & self . kind
5144
- }
5145
- #[ unstable(
5146
- feature = "int_error_internals" ,
5147
- reason = "available through Error trait and this method should \
5148
- not be exposed publicly",
5149
- issue = "none"
5150
- ) ]
5151
- #[ doc( hidden) ]
5152
- pub fn __description ( & self ) -> & str {
5153
- match self . kind {
5154
- IntErrorKind :: Empty => "cannot parse integer from empty string" ,
5155
- IntErrorKind :: InvalidDigit => "invalid digit found in string" ,
5156
- IntErrorKind :: Overflow => "number too large to fit in target type" ,
5157
- IntErrorKind :: Underflow => "number too small to fit in target type" ,
5158
- IntErrorKind :: Zero => "number would be zero for non-zero type" ,
5159
- }
5160
- }
5161
- }
5162
-
5163
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
5164
- impl fmt:: Display for ParseIntError {
5165
- fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
5166
- self . __description ( ) . fmt ( f)
5167
- }
5168
- }
5169
-
5170
- #[ stable( feature = "rust1" , since = "1.0.0" ) ]
5171
- pub use crate :: num:: dec2flt:: ParseFloatError ;
0 commit comments