#[InputObject]
Define a GraphQL input object
| Attribute | description | Type | Optional | 
|---|
| name | Object name | string | Y | 
| desc | Object description | string | Y | 
| Attribute | description | Type | Optional | 
|---|
| name | Field name | string | Y | 
| desc | Field description | string | Y | 
| default | Field default value | string | Y | 
| validator | Input value validator | InputValueValidator | Y | 
use async_graphql::*;
#[InputObject]
struct MyInputObject {
    a: i32,
    #[field(default = 10)]
    b: i32,
}
struct QueryRoot;
#[Object]
impl QueryRoot {
    #[field(desc = "value")]
    async fn value(&self, input: MyInputObject) -> i32 {
        input.a * input.b
    }
}
#[async_std::main]
async fn main() {
    let schema = Schema::new(QueryRoot, EmptyMutation, EmptySubscription);
    let res = schema.execute(r#"
    {
        value1: value(input:{a:9, b:3})
        value2: value(input:{a:9})
    }"#).await.unwrap().data;
    assert_eq!(res, serde_json::json!({ "value1": 27, "value2": 90 }));
}