use ValidatorCondition;
use regex::Regex;
lazy_static! {
static ref EMAIL_REGEX: Regex = Regex::new(r#"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"#).unwrap();
}
pub struct IsEmail;
impl ValidatorCondition for IsEmail {
fn validate(&self, input: String) -> bool {
if input.is_empty() || !input.contains("@") {
return false
}
if EMAIL_REGEX.is_match(input.as_str()) {
return true
} else {
return false
}
}
fn get_err_message(&self) -> String {
format!("Input is not a valid e-mail address")
}
}
impl IsEmail {
pub fn new() -> Box<Self> {
Box::new(IsEmail)
}
}