use super::AsStr;
use crate::error::Error;
pub fn apply<T: Alphanumeric>(v: &T, _: ()) -> Result<(), Error> {
if !v.validate_alphanumeric() {
return Err(Error::new("not alphanumeric"));
}
Ok(())
}
pub trait Alphanumeric {
fn validate_alphanumeric(&self) -> bool;
}
impl<T: AsStr> Alphanumeric for T {
fn validate_alphanumeric(&self) -> bool {
self.as_str().chars().all(|c| c.is_alphanumeric())
}
}
impl<T: Alphanumeric> Alphanumeric for Option<T> {
fn validate_alphanumeric(&self) -> bool {
match self {
Some(value) => value.validate_alphanumeric(),
None => true,
}
}
}