From ee240e32773567a3df8dc5fed368f65cfc841d8d Mon Sep 17 00:00:00 2001 From: Vlasislav Kashin <99754299+vloldik@users.noreply.github.com> Date: Wed, 9 Jul 2025 19:36:23 +0300 Subject: [PATCH] add is_number_geographical --- src/phonenumberutil/phonenumberutil.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/phonenumberutil/phonenumberutil.rs b/src/phonenumberutil/phonenumberutil.rs index 7f5159c..791a71b 100644 --- a/src/phonenumberutil/phonenumberutil.rs +++ b/src/phonenumberutil/phonenumberutil.rs @@ -828,7 +828,7 @@ impl PhoneNumberUtil { } } - fn get_number_type(&self, phone_number: &PhoneNumber) -> Result { + fn get_number_type(&self, phone_number: &PhoneNumber) -> RegexResult { let region_code = self.get_region_code_for_number(phone_number)?; let Some(metadata) = self .get_metadata_for_region_or_calling_code(phone_number.country_code(), region_code) @@ -2158,6 +2158,30 @@ impl PhoneNumberUtil { Some(&phone_number[captured_range_end..]) } + fn is_number_geographical( + &self, + phone_number: &PhoneNumber + ) -> RegexResult { + Ok(self.is_number_geographical_by_country_code_and_type( + self.get_number_type(phone_number)?, + phone_number.country_code() + )) + } + + fn is_number_geographical_by_country_code_and_type( + &self, + phone_number_type: PhoneNumberType, + country_calling_code: i32 + ) -> bool { + matches!(phone_number_type, PhoneNumberType::FixedLine | PhoneNumberType::FixedLineOrMobile) + || + ( + self.reg_exps.geo_mobile_countries.contains(&country_calling_code) + && + matches!(phone_number_type, PhoneNumberType::Mobile) + ) + } + /// Extracts country calling code from national_number, and returns tuple /// that contains national_number without calling code and calling code itself. ///