async_graphql/validators/
mod.rs

1mod chars_max_length;
2mod chars_min_length;
3#[cfg(feature = "email-validator")]
4mod email;
5mod ip;
6mod max_items;
7mod max_length;
8mod maximum;
9mod min_items;
10mod min_length;
11mod minimum;
12mod multiple_of;
13mod regex;
14mod url;
15
16pub use chars_max_length::chars_max_length;
17pub use chars_min_length::chars_min_length;
18#[cfg(feature = "email-validator")]
19pub use email::email;
20pub use ip::ip;
21pub use max_items::max_items;
22pub use max_length::max_length;
23pub use maximum::maximum;
24pub use min_items::min_items;
25pub use min_length::min_length;
26pub use minimum::minimum;
27pub use multiple_of::multiple_of;
28
29pub use self::{regex::regex, url::url};
30use crate::{InputType, InputValueError};
31
32/// Represents a custom input value validator.
33pub trait CustomValidator<T: InputType> {
34    /// Check the value is valid.
35    fn check(&self, value: &T) -> Result<(), InputValueError<T>>;
36}
37
38impl<T, F, E> CustomValidator<T> for F
39where
40    T: InputType,
41    E: Into<InputValueError<T>>,
42    F: Fn(&T) -> Result<(), E>,
43{
44    #[inline]
45    fn check(&self, value: &T) -> Result<(), InputValueError<T>> {
46        (self)(value).map_err(Into::into)
47    }
48}