async-graphql/docs/zh-CN/src/custom_scalars.md
2020-05-26 23:27:50 +08:00

895 B
Raw Blame History

自定义标量

Async-graphql已经内置了绝大部分常用的标量类型,同时你也能自定义标量。

实现Async-graphql::Scalar即可自定义一个标量,你只需要实现一个解析函数和输出函数。

下面的例子定义一个64位整数标量但它的输入输出都是字符串。 (Async-graphql已经内置了对64位整数的支持正是采用字符串作为输入输出)

use async_graphql::*;


struct StringNumber(i64);

#[Scalar]
impl ScalarType for StringNumber {
    fn parse(value: Value) -> InputValueResult<Self> {
        if let Value::String(value) = value {
            // 解析整数
            value.parse().map(StringNumber)?
        } else {
            // 类型不匹配
            InputValueError::ExpectedType
        }
    }

    fn to_value(&self) -> Value {
        Value::String(self.0.to_string())
    }
}