use regex_cache::CachedRegex;
#[derive(Clone, Debug)]
pub struct Descriptor {
pub(crate) national_number: CachedRegex,
pub(crate) possible_length: Vec<u16>,
pub(crate) possible_local_length: Vec<u16>,
pub(crate) example: Option<String>,
}
impl Descriptor {
pub fn national_number(&self) -> &CachedRegex {
&self.national_number
}
pub fn possible_length(&self) -> &[u16] {
&self.possible_length
}
pub fn possible_local_length(&self) -> &[u16] {
&self.possible_local_length
}
pub fn example(&self) -> Option<&str> {
self.example.as_ref().map(AsRef::as_ref)
}
pub fn is_match(&self, value: &str) -> bool {
if !self.possible_length.is_empty() && !self.possible_length.contains(&(value.len() as u16))
{
return false;
}
self.national_number
.find(value)
.map(|m| m.start() == 0)
.unwrap_or(false)
}
}