Better error naming

This commit is contained in:
Vlasislav Kashin
2025-07-13 14:52:06 +03:00
parent beae04dee8
commit 1464119ff8
3 changed files with 35 additions and 35 deletions

View File

@@ -7,10 +7,10 @@ use crate::regexp_cache::ErrorInvalidRegex;
#[derive(Debug, PartialEq, Error)]
pub enum InternalLogicError {
#[error("{0}")]
InvalidRegexError(#[from] ErrorInvalidRegex),
InvalidRegex(#[from] ErrorInvalidRegex),
#[error("{0}")]
InvalidMetadataForValidRegionError(#[from] InvalidMetadataForValidRegionError)
InvalidMetadataForValidRegion(#[from] InvalidMetadataForValidRegionError)
}
#[derive(Debug, PartialEq, Error)]
@@ -18,7 +18,7 @@ pub enum ParseError {
// Removed as OK variant
// NoParsingError,
#[error("Invalid country code")]
InvalidCountryCodeError, // INVALID_COUNTRY_CODE in the java version.
InvalidCountryCode, // INVALID_COUNTRY_CODE in the java version.
#[error("Not a number: {0}")]
NotANumber(#[from] NotANumberError),
#[error("Too short after idd")]
@@ -28,7 +28,7 @@ pub enum ParseError {
#[error("Too long nsn")]
TooLongNsn, // TOO_LONG in the java version.
#[error("{0}")]
InvalidRegexError(#[from] ErrorInvalidRegex),
InvalidRegex(#[from] ErrorInvalidRegex),
}
#[derive(Debug, PartialEq, Error)]
@@ -38,9 +38,9 @@ pub enum NotANumberError {
#[error("Invalid phone context")]
InvalidPhoneContext,
#[error("{0}")]
ParseNumberAsIntError(#[from] ParseIntError),
FailedToParseNumberAsInt(#[from] ParseIntError),
#[error("{0}")]
ExtractNumberError(#[from] ExtractNumberError),
FailedToExtractNumber(#[from] ExtractNumberError),
}
#[derive(Debug, PartialEq, Error)]
@@ -53,22 +53,22 @@ pub enum ExtractNumberError {
impl From<ExtractNumberError> for ParseError {
fn from(value: ExtractNumberError) -> Self {
NotANumberError::ExtractNumberError(value).into()
NotANumberError::FailedToExtractNumber(value).into()
}
}
#[derive(Debug, PartialEq, Error)]
pub enum GetExampleNumberError {
#[error("Parse error: {0}")]
ParseError(#[from] ParseError),
FailedToParse(#[from] ParseError),
#[error("{0}")]
InternalLogicError(#[from] InternalLogicError),
Internal(#[from] InternalLogicError),
#[error("No example number")]
NoExampleNumberError,
NoExampleNumber,
#[error("Could not get number")]
CouldNotGetNumberError,
CouldNotGetNumber,
#[error("Invalid metadata")]
InvalidMetadataError
InvalidMetadata
}

View File

@@ -1744,7 +1744,7 @@ impl PhoneNumberUtil {
if check_region && !self.check_region_for_parsing(&national_number, default_region) {
trace!("Missing or invalid default country.");
return Err(ParseError::InvalidCountryCodeError);
return Err(ParseError::InvalidCountryCode);
}
let mut temp_number = PhoneNumber::new();
if keep_raw_input {
@@ -1769,7 +1769,7 @@ impl PhoneNumberUtil {
&mut temp_number,
)
.or_else(|err| {
if !matches!(err, ParseError::InvalidCountryCodeError) {
if !matches!(err, ParseError::InvalidCountryCode) {
return Err(err);
}
let plus_match = self.reg_exps.plus_chars_pattern.find_start(national_number);
@@ -1783,7 +1783,7 @@ impl PhoneNumberUtil {
&mut temp_number,
)?;
if temp_number.country_code() == 0 {
return Err(ParseError::InvalidCountryCodeError.into());
return Err(ParseError::InvalidCountryCode.into());
}
return Ok(normalized_national_number);
}
@@ -1873,7 +1873,7 @@ impl PhoneNumberUtil {
let number_as_int = u64::from_str_radix(&normalized_national_number, 10);
match number_as_int {
Ok(number_as_int) => temp_number.set_national_number(number_as_int),
Err(err) => return Err(NotANumberError::ParseNumberAsIntError(err).into()),
Err(err) => return Err(NotANumberError::FailedToParseNumberAsInt(err).into()),
}
return Ok(temp_number);
}
@@ -1997,7 +1997,7 @@ impl PhoneNumberUtil {
else {
// If this fails, they must be using a strange country calling code that we
// don't recognize, or that doesn't exist.
return Err(ParseError::InvalidCountryCodeError);
return Err(ParseError::InvalidCountryCode);
};
phone_number.set_country_code(potential_country_code);
return Ok(national_number);
@@ -2067,7 +2067,7 @@ impl PhoneNumberUtil {
pub fn get_invalid_example_number(&self, region_code: &str) -> ExampleNumberResult {
let Some(region_metadata) = self.region_to_metadata_map.get(region_code) else {
warn!("Invalid or unknown region code ({}) provided.", region_code);
return Err(GetExampleNumberError::InvalidMetadataError);
return Err(GetExampleNumberError::InvalidMetadata);
};
// We start off with a valid fixed-line number since every country supports
@@ -2078,7 +2078,7 @@ impl PhoneNumberUtil {
if !desc.has_example_number() {
// This shouldn't happen - we have a test for this.
return Err(GetExampleNumberError::NoExampleNumberError);
return Err(GetExampleNumberError::NoExampleNumber);
}
let example_number = desc.example_number();
@@ -2111,7 +2111,7 @@ impl PhoneNumberUtil {
}
}
// We have a test to check that this doesn't happen for any of our supported
Err(GetExampleNumberError::CouldNotGetNumberError)
Err(GetExampleNumberError::CouldNotGetNumber)
}
// Gets a valid number for the specified region_code and type. Returns false if
@@ -2123,7 +2123,7 @@ impl PhoneNumberUtil {
) -> ExampleNumberResult {
let Some(region_metadata) = self.region_to_metadata_map.get(region_code) else {
warn!("Invalid or unknown region code ({}) provided.", region_code);
return Err(GetExampleNumberError::InvalidMetadataError);
return Err(GetExampleNumberError::InvalidMetadata);
};
let desc = get_number_desc_by_type(region_metadata, phone_number_type);
if desc.has_example_number() {
@@ -2131,7 +2131,7 @@ impl PhoneNumberUtil {
.parse(desc.example_number(), region_code)
.inspect_err(|err| error!("Error parsing example number ({:?})", err))?);
}
Err(GetExampleNumberError::CouldNotGetNumberError)
Err(GetExampleNumberError::CouldNotGetNumber)
}
pub fn get_example_number_for_type(
@@ -2155,7 +2155,7 @@ impl PhoneNumberUtil {
.country_code_to_non_geographical_metadata_map
.get(&country_calling_code)
else {
return Some(Err(GetExampleNumberError::InvalidMetadataError));
return Some(Err(GetExampleNumberError::InvalidMetadata));
};
let desc = get_number_desc_by_type(metadata, phone_number_type);
if desc.has_example_number() {
@@ -2169,7 +2169,7 @@ impl PhoneNumberUtil {
),
i18n::RegionCode::get_unknown(),
)
.map_err(|err| GetExampleNumberError::ParseError(err)),
.map_err(|err| GetExampleNumberError::FailedToParse(err)),
);
}
None
@@ -2178,7 +2178,7 @@ impl PhoneNumberUtil {
return res;
}
// There are no example numbers of this type for any country in the library.
Err(GetExampleNumberError::CouldNotGetNumberError)
Err(GetExampleNumberError::CouldNotGetNumber)
}
pub fn get_example_number_for_non_geo_entity(
@@ -2193,7 +2193,7 @@ impl PhoneNumberUtil {
"Invalid or unknown country calling code provided: {}",
country_calling_code
);
return Err(GetExampleNumberError::InvalidMetadataError);
return Err(GetExampleNumberError::InvalidMetadata);
};
// For geographical entities, fixed-line data is always present. However,
// for non-geographical entities, this is not the case, so we have to go
@@ -2225,7 +2225,7 @@ impl PhoneNumberUtil {
i18n::RegionCode::get_unknown(),
)?);
}
return Err(GetExampleNumberError::CouldNotGetNumberError);
return Err(GetExampleNumberError::CouldNotGetNumber);
}
/// Strips any international prefix (such as +, 00, 011) present in the number
@@ -2653,7 +2653,7 @@ impl PhoneNumberUtil {
return self.is_number_match_with_one_string(&first_number_as_proto, second_number);
}
Err(err) => {
if !matches!(err, ParseError::InvalidCountryCodeError) {
if !matches!(err, ParseError::InvalidCountryCode) {
return Err(InvalidNumberError(err));
}
}
@@ -2663,7 +2663,7 @@ impl PhoneNumberUtil {
return self.is_number_match_with_one_string(&second_number_as_proto, first_number);
}
Err(err) => {
if !matches!(err, ParseError::InvalidCountryCodeError) {
if !matches!(err, ParseError::InvalidCountryCode) {
return Err(InvalidNumberError(err));
}
let first_number_as_proto =
@@ -2691,7 +2691,7 @@ impl PhoneNumberUtil {
return Ok(self.is_number_match(first_number, &second_number_as_proto));
}
Err(err) => {
if !matches!(err, ParseError::InvalidCountryCodeError) {
if !matches!(err, ParseError::InvalidCountryCode) {
return Err(InvalidNumberError(err));
}
}

View File

@@ -1658,20 +1658,20 @@ fn failed_parse_on_invalid_numbers() {
);
assert_eq!(
phone_util.parse("+210 3456 56789", "NZ").unwrap_err(),
ParseError::InvalidCountryCodeError
ParseError::InvalidCountryCode
);
// 00 - правильный МНН, но 210 - невалидный код страны.
assert_eq!(
phone_util.parse("+ 00 210 3 331 6005", "NZ").unwrap_err(),
ParseError::InvalidCountryCodeError
ParseError::InvalidCountryCode
);
assert_eq!(
phone_util.parse("123 456 7890", "ZZ").unwrap_err(),
ParseError::InvalidCountryCodeError
ParseError::InvalidCountryCode
);
assert_eq!(
phone_util.parse("123 456 7890", "CS").unwrap_err(),
ParseError::InvalidCountryCodeError
ParseError::InvalidCountryCode
);
assert_eq!(
phone_util.parse("0044-----", "GB").unwrap_err(),
@@ -1692,7 +1692,7 @@ fn failed_parse_on_invalid_numbers() {
// RFC3966 phone-context является веб-сайтом.
assert_eq!(
phone_util.parse("tel:555-1234;phone-context=www.google.com", "ZZ").unwrap_err(),
ParseError::InvalidCountryCodeError
ParseError::InvalidCountryCode
);
// Это невалидно, так как отсутствует знак "+" в phone-context.
assert!(matches!(