garde/rules/
alphanumeric.rs1use super::AsStr;
16use crate::error::Error;
17
18pub fn apply<T: Alphanumeric>(v: &T, _: ()) -> Result<(), Error> {
19 if !v.validate_alphanumeric() {
20 return Err(Error::new("not alphanumeric"));
21 }
22 Ok(())
23}
24
25pub trait Alphanumeric {
26 fn validate_alphanumeric(&self) -> bool;
27}
28
29impl<T: AsStr> Alphanumeric for T {
30 fn validate_alphanumeric(&self) -> bool {
31 self.as_str().chars().all(|c| c.is_alphanumeric())
32 }
33}
34
35impl<T: Alphanumeric> Alphanumeric for Option<T> {
36 fn validate_alphanumeric(&self) -> bool {
37 match self {
38 Some(value) => value.validate_alphanumeric(),
39 None => true,
40 }
41 }
42}