Input value validators

Async-graphql has some common validators built-in, you can use them on the parameters of object fields or on the fields of InputObject.

  • maximum=N the number cannot be greater than N.
  • minimum=N the number cannot be less than N.
  • multiple_of=N the number must be a multiple of N.
  • max_items=N the length of the list cannot be greater than N.
  • min_items=N the length of the list cannot be less than N.
  • max_length=N the length of the string cannot be greater than N.
  • min_length=N the length of the string cannot be less than N.
  • chars_max_length=N the count of the unicode chars cannot be greater than N.
  • chars_min_length=N the count of the unicode chars cannot be less than N.
  • email is valid email.
  • url is valid url.
  • ip is valid ip address.
  • regex=RE is match for the regex.
#![allow(unused)]
fn main() {
extern crate async_graphql;
use async_graphql::*;

struct Query;

#[Object]
impl Query {
    /// The length of the name must be greater than or equal to 5 and less than or equal to 10.
    async fn input(&self, #[graphql(validator(min_length = 5, max_length = 10))] name: String) -> Result<i32> {
        todo!()
    }
}
}

Check every member of the list

You can enable the list attribute, and the validator will check all members in list:

#![allow(unused)]
fn main() {
extern crate async_graphql;
use async_graphql::*;

struct Query;

#[Object]
impl Query {
    async fn input(&self, #[graphql(validator(list, max_length = 10))] names: Vec<String>) -> Result<i32> {
       todo!()
    }
}
}

Custom validator

#![allow(unused)]
fn main() {
extern crate async_graphql;
use async_graphql::*;
struct MyValidator {
    expect: i32,
}

impl MyValidator {
    pub fn new(n: i32) -> Self {
        MyValidator { expect: n }
    }
}

impl CustomValidator<i32> for MyValidator {
    fn check(&self, value: &i32) -> Result<(), InputValueError<i32>> {
        if *value == self.expect {
            Ok(())
        } else {
            Err(InputValueError::custom(format!("expect 100, actual {}", value)))
        }
    }
}

struct Query;

#[Object]
impl Query {
    /// n must be equal to 100
    async fn value(
        &self,
        #[graphql(validator(custom = "MyValidator::new(100)"))] n: i32,
    ) -> i32 {
        n
    }
}
}