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