IntErrorKind::Empty | IntErrorKind::OnlySign => {
"`limit` must be a non-negative integer"
}
- IntErrorKind::InvalidDigit => "not a valid integer",
+ IntErrorKind::InvalidDigit(_) => "not a valid integer",
IntErrorKind::NegOverflow => bug!("`limit` should never underflow"),
IntErrorKind::Zero => bug!("zero is a valid `limit`"),
kind => bug!("unimplemented IntErrorKind variant: {:?}", kind),
/// Among other causes, this variant will be constructed when parsing an empty string.
#[stable(feature = "int_error_matching", since = "1.47.0")]
Empty,
- /// Contains an invalid digit.
+ /// Contains an digit invalid in its context.
///
/// Among other causes, this variant will be constructed when parsing a string that
/// contains a letter.
#[stable(feature = "int_error_matching", since = "1.47.0")]
- InvalidDigit,
+ InvalidDigit(#[stable(feature = "int_error_matching", since = "1.47.0")] char),
/// Integer is too large to store in target integer type.
#[stable(feature = "int_error_matching", since = "1.47.0")]
PosOverflow,
pub fn __description(&self) -> &str {
match self.kind {
IntErrorKind::Empty => "cannot parse integer from empty string",
- IntErrorKind::InvalidDigit => "invalid digit found in string",
+ IntErrorKind::InvalidDigit(_) => "invalid digit found in string",
IntErrorKind::PosOverflow => "number too large to fit in target type",
IntErrorKind::NegOverflow => "number too small to fit in target type",
IntErrorKind::Zero => "number would be zero for non-zero type",
for &c in digits {
let x = match (c as char).to_digit(radix) {
Some(x) => x,
- None => return Err(PIE { kind: InvalidDigit }),
+ None => return Err(PIE { kind: InvalidDigit(c as char) }),
};
result = match result.checked_mul(radix) {
Some(result) => result,
for &c in digits {
let x = match (c as char).to_digit(radix) {
Some(x) => x,
- None => return Err(PIE { kind: InvalidDigit }),
+ None => return Err(PIE { kind: InvalidDigit(c as char) }),
};
result = match result.checked_mul(radix) {
Some(result) => result,
assert_eq!("0".parse::<NonZeroU8>().err().map(|e| e.kind().clone()), Some(IntErrorKind::Zero));
assert_eq!(
"-1".parse::<NonZeroU8>().err().map(|e| e.kind().clone()),
- Some(IntErrorKind::InvalidDigit)
+ Some(IntErrorKind::InvalidDigit('-'))
);
assert_eq!(
"-129".parse::<NonZeroI8>().err().map(|e| e.kind().clone()),
#[test]
fn test_invalid() {
- test_parse::<i8>("--129", Err(IntErrorKind::InvalidDigit));
- test_parse::<i8>("++129", Err(IntErrorKind::InvalidDigit));
- test_parse::<u8>("Съешь", Err(IntErrorKind::InvalidDigit));
- // is this the correct error here. Maybe need a reapeat sign error here
- test_parse::<i8>("--", Err(IntErrorKind::InvalidDigit));
+ test_parse::<i8>("--129", Err(IntErrorKind::InvalidDigit('-')));
+ test_parse::<i8>("++129", Err(IntErrorKind::InvalidDigit('+')));
+ test_parse::<u8>("Съешь", Err(IntErrorKind::InvalidDigit('Ð')));
+ test_parse::<u8>("123Hello", Err(IntErrorKind::InvalidDigit('H')));
+ test_parse::<i8>("--", Err(IntErrorKind::InvalidDigit('-')));
}
#[test]