1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
//! ASCII validation.
//!
//! ```rust
//! #[derive(garde::Validate)]
//! struct Test {
//! #[garde(ascii)]
//! v: String,
//! }
//! ```
//!
//! The entrypoint is the [`Ascii`] trait. Implementing this trait for a type allows that type to be used with the `#[garde(ascii)]` rule.
//!
//! This trait has a blanket implementation for all `T: AsRef<str>`.
use crate::error::Error;
pub fn apply<T: Ascii>(v: &T, _: ()) -> Result<(), Error> {
if !v.validate_ascii() {
return Err(Error::new("not ascii"));
}
Ok(())
}
#[cfg_attr(
feature = "nightly-error-messages",
rustc_on_unimplemented(
message = "`{Self}` does not support ascii validation",
label = "This type does not support ascii validation",
)
)]
pub trait Ascii {
fn validate_ascii(&self) -> bool;
}
impl<T: AsRef<str>> Ascii for T {
fn validate_ascii(&self) -> bool {
self.as_ref().is_ascii()
}
}