crate::ix!();
pub trait ValidateName {
fn validate_name(&self,name: &str) -> Result<(), NameError>;
}
pub struct NameValidator {
pattern: Regex,
}
impl NameValidator {
pub fn new(pattern: &str) -> Result<Self, regex::Error> {
Ok(Self {
pattern: Regex::new(pattern)?,
})
}
}
impl ValidateName for NameValidator {
fn validate_name(&self, name: &str) -> Result<(), NameError> {
if self.pattern.is_match(name) {
Ok(())
} else {
Err(NameError::InvalidName(name.to_string()))
}
}
}