use crate::{
InvalidRegexError, interfaces,
phonenumberutil::regex_wrapper_types::{PhoneNumberDescWrapper, RegexTriplets},
};
#[derive(Debug, Clone, Copy, Default)]
pub struct RegexBasedMatcher {}
impl RegexBasedMatcher {
fn match_number(
&self,
phone_number: &str,
number_pattern: &RegexTriplets,
allow_prefix_match: bool,
) -> Result<bool, InvalidRegexError> {
let Some(rule) = (if allow_prefix_match {
number_pattern.anchor_start()?
} else {
number_pattern.anchor_full()?
}) else {
return Ok(false);
};
Ok(rule.is_match(phone_number))
}
}
impl interfaces::MatcherApi for RegexBasedMatcher {
fn match_national_number(
&self,
number: &str,
number_desc: &PhoneNumberDescWrapper,
allow_prefix_match: bool,
) -> Result<bool, InvalidRegexError> {
let national_number_pattern = number_desc.national_number_pattern();
self.match_number(number, national_number_pattern, allow_prefix_match)
}
}