Add metadata constructor for PhoneNumberUtil
This commit is contained in:
@@ -4,7 +4,7 @@ use std::{
|
|||||||
|
|
||||||
use super::phone_number_regexps_and_mappings::PhoneNumberRegExpsAndMappings;
|
use super::phone_number_regexps_and_mappings::PhoneNumberRegExpsAndMappings;
|
||||||
use crate::{
|
use crate::{
|
||||||
i18n, interfaces::MatcherApi, macros::owned_from_cow_or, phonenumberutil::{
|
i18n, interfaces::MatcherApi, macros::owned_from_cow_or, phonemetadata::PhoneMetadataCollection, phonenumberutil::{
|
||||||
errors::{ExtractNumberError, GetExampleNumberError, InternalLogicError, InvalidMetadataForValidRegionError, InvalidNumberError, ParseError, ValidationResultErr}, helper_constants::{
|
errors::{ExtractNumberError, GetExampleNumberError, InternalLogicError, InvalidMetadataForValidRegionError, InvalidNumberError, ParseError, ValidationResultErr}, helper_constants::{
|
||||||
DEFAULT_EXTN_PREFIX, MAX_LENGTH_COUNTRY_CODE, MAX_LENGTH_FOR_NSN, MIN_LENGTH_FOR_NSN, NANPA_COUNTRY_CODE, PLUS_SIGN, REGION_CODE_FOR_NON_GEO_ENTITY, RFC3966_EXTN_PREFIX, RFC3966_ISDN_SUBADDRESS, RFC3966_PHONE_CONTEXT, RFC3966_PREFIX
|
DEFAULT_EXTN_PREFIX, MAX_LENGTH_COUNTRY_CODE, MAX_LENGTH_FOR_NSN, MIN_LENGTH_FOR_NSN, NANPA_COUNTRY_CODE, PLUS_SIGN, REGION_CODE_FOR_NON_GEO_ENTITY, RFC3966_EXTN_PREFIX, RFC3966_ISDN_SUBADDRESS, RFC3966_PHONE_CONTEXT, RFC3966_PREFIX
|
||||||
}, helper_functions::{
|
}, helper_functions::{
|
||||||
@@ -59,7 +59,7 @@ pub struct PhoneNumberUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl PhoneNumberUtil {
|
impl PhoneNumberUtil {
|
||||||
pub(super) fn new() -> Self {
|
pub(crate) fn new_for_metadata(metadata_collection: PhoneMetadataCollection) -> Self {
|
||||||
let mut instance = Self {
|
let mut instance = Self {
|
||||||
matcher_api: Box::new(RegexBasedMatcher::new()),
|
matcher_api: Box::new(RegexBasedMatcher::new()),
|
||||||
reg_exps: PhoneNumberRegExpsAndMappings::new(),
|
reg_exps: PhoneNumberRegExpsAndMappings::new(),
|
||||||
@@ -68,14 +68,7 @@ impl PhoneNumberUtil {
|
|||||||
region_to_metadata_map: Default::default(),
|
region_to_metadata_map: Default::default(),
|
||||||
country_code_to_non_geographical_metadata_map: Default::default(),
|
country_code_to_non_geographical_metadata_map: Default::default(),
|
||||||
};
|
};
|
||||||
let metadata_collection = match load_compiled_metadata() {
|
|
||||||
Err(err) => {
|
|
||||||
let err_message = format!("Could not parse compiled-in metadata: {:?}", err);
|
|
||||||
log::error!("{}", err_message);
|
|
||||||
panic!("{}", err_message);
|
|
||||||
}
|
|
||||||
Ok(metadata) => metadata,
|
|
||||||
};
|
|
||||||
// that share a country calling code when inserting data.
|
// that share a country calling code when inserting data.
|
||||||
let mut country_calling_code_to_region_map = HashMap::<i32, VecDeque<String>>::new();
|
let mut country_calling_code_to_region_map = HashMap::<i32, VecDeque<String>>::new();
|
||||||
for metadata in metadata_collection.metadata {
|
for metadata in metadata_collection.metadata {
|
||||||
@@ -128,7 +121,19 @@ impl PhoneNumberUtil {
|
|||||||
instance
|
instance
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_supported_regions(&self) -> impl Iterator<Item=&str> {
|
pub(crate) fn new() -> Self {
|
||||||
|
let metadata_collection = match load_compiled_metadata() {
|
||||||
|
Err(err) => {
|
||||||
|
let err_message = format!("Could not parse compiled-in metadata: {:?}", err);
|
||||||
|
log::error!("{}", err_message);
|
||||||
|
panic!("{}", err_message);
|
||||||
|
}
|
||||||
|
Ok(metadata) => metadata,
|
||||||
|
};
|
||||||
|
Self::new_for_metadata(metadata_collection)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_supported_regions(&self) -> impl Iterator<Item=&str> {
|
||||||
self.region_to_metadata_map.keys().map(| k | k.as_str())
|
self.region_to_metadata_map.keys().map(| k | k.as_str())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1527,7 +1532,7 @@ impl PhoneNumberUtil {
|
|||||||
self.reg_exps.capture_up_to_second_number_start_pattern
|
self.reg_exps.capture_up_to_second_number_start_pattern
|
||||||
.find(&extracted_number)
|
.find(&extracted_number)
|
||||||
.map(move | m | m.as_str() )
|
.map(move | m | m.as_str() )
|
||||||
.unwrap_or("")
|
.unwrap_or(extracted_number)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1624,7 +1629,7 @@ impl PhoneNumberUtil {
|
|||||||
) -> ParseResult<PhoneNumber> {
|
) -> ParseResult<PhoneNumber> {
|
||||||
let national_number = self.build_national_number_for_parsing(number_to_parse)?;
|
let national_number = self.build_national_number_for_parsing(number_to_parse)?;
|
||||||
if !self.is_viable_phone_number(&national_number) {
|
if !self.is_viable_phone_number(&national_number) {
|
||||||
trace!("The string supplied did not seem to be a phone number {national_number}.");
|
trace!("The string supplied did not seem to be a phone number '{national_number}'.");
|
||||||
return Err(ParseError::NotANumber)
|
return Err(ParseError::NotANumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user