use std::io::Write;
use crate::{
PhoneNumber,
errors::InvalidRegexError,
phonenumber_mask::{self, Hashed},
phonenumberutil::regex_wrapper_types::PhoneNumberDescWrapper,
};
pub(crate) trait MatcherApi: Send + Sync {
fn match_national_number(
&self,
number: &str,
number_desc: &PhoneNumberDescWrapper,
allow_prefix_match: bool,
) -> Result<bool, InvalidRegexError>;
}
pub trait AsOriginal<T> {
fn as_original(&self) -> &T;
}
pub trait LenWrite {
fn grow(&mut self, len: usize);
fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()>;
}
impl<T: Write> LenWrite for T {
fn grow(&mut self, _: usize) {}
fn write_all(&mut self, buf: &[u8]) -> std::io::Result<()> {
self.write_all(buf)
}
}
pub trait PhoneHasher {
fn hash_phone(self, phone: &PhoneNumber) -> phonenumber_mask::Result<Hashed>;
}
pub trait OptionalHasher {
fn hash_phone(self, phone: &PhoneNumber) -> phonenumber_mask::Result<Option<Hashed>>;
}
impl<T: PhoneHasher> OptionalHasher for T {
fn hash_phone(self, phone: &PhoneNumber) -> phonenumber_mask::Result<Option<Hashed>> {
Ok(Some(PhoneHasher::hash_phone(self, phone)?))
}
}