[][src]Macro async_graphql::scalar

macro_rules! scalar {
    ($ty:ty, $name:literal, $desc:literal) => { ... };
    ($ty:ty, $name:literal) => { ... };
    ($ty:ty) => { ... };
}

Define a scalar

If your type implemented serde::Serialize and serde::Deserialize, then you can use this macro to define a scalar more simply. It helps you implement the ScalarType::parse and ScalarType::to_value functions by calling the from_value and to_value functions.

Examples

use async_graphql::*;
use serde::{Serialize, Deserialize};
use std::collections::HashMap;

#[derive(Serialize, Deserialize)]
struct MyValue {
    a: i32,
    b: HashMap<String, i32>,     
}

scalar!(MyValue);

// Rename to `MV`.
// scalar!(MyValue, "MV");

// Rename to `MV` and add description.
// scalar!(MyValue, "MV", "This is my value");

struct Query;

#[Object]
impl Query {
    async fn value(&self, input: MyValue) -> MyValue {
        input
    }
}

async_std::task::block_on(async move {
    let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
    let res = schema.execute(r#"{ value(input: {a: 10, b: {v1: 1, v2: 2} }) }"#).await.into_result().unwrap().data;
    assert_eq!(res, value!({
        "value": {
            "a": 10,
            "b": {"v1": 1, "v2": 2},
        }
    }));
});