use crate::AsValidateStr;
#[derive(Debug, Clone)]
pub struct Match {
pub regex: String,
}
#[cfg(feature = "proc")]
impl quote::ToTokens for Match {
fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
use quote::quote;
let regex = &self.regex;
regex::Regex::new(regex).expect("Invalid regex");
tokens.extend(quote! {
(::prove::r#match::Match {
regex: #regex.to_owned(),
})
});
}
}
impl Match {
pub fn validate<'a, T>(&self, val: &'a T) -> bool
where
T: AsValidateStr<'a>,
{
if let Some(val) = val.as_validate_str().as_ref() {
regex::Regex::new(&self.regex).unwrap().is_match(val)
} else {
true
}
}
}