async_graphql/validators/
mod.rs1mod 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;
11#[cfg(feature = "password-strength-validator")]
12mod min_password_strength;
13mod minimum;
14mod multiple_of;
15mod regex;
16mod url;
17#[cfg(feature = "uuid-validator")]
18mod uuid;
19
20pub use chars_max_length::chars_max_length;
21pub use chars_min_length::chars_min_length;
22#[cfg(feature = "email-validator")]
23pub use email::email;
24pub use ip::ip;
25pub use max_items::max_items;
26pub use max_length::max_length;
27pub use maximum::maximum;
28pub use min_items::min_items;
29pub use min_length::min_length;
30#[cfg(feature = "password-strength-validator")]
31pub use min_password_strength::min_password_strength;
32pub use minimum::minimum;
33pub use multiple_of::multiple_of;
34#[cfg(feature = "uuid-validator")]
35pub use uuid::uuid;
36
37pub use self::{regex::regex, url::url};
38use crate::{InputType, InputValueError};
39
40pub trait CustomValidator<T: InputType> {
42 fn check(&self, value: &T) -> Result<(), InputValueError<T>>;
44}
45
46impl<T, F, E> CustomValidator<T> for F
47where
48 T: InputType,
49 E: Into<InputValueError<T>>,
50 F: Fn(&T) -> Result<(), E>,
51{
52 #[inline]
53 fn check(&self, value: &T) -> Result<(), InputValueError<T>> {
54 (self)(value).map_err(Into::into)
55 }
56}