use crate::{InputValueResult, Value}; /// A GraphQL scalar. /// /// You can implement the trait to create a custom scalar. /// /// # Examples /// /// ```rust /// use async_graphql::*; /// /// struct MyInt(i32); /// /// #[Scalar] /// impl ScalarType for MyInt { /// fn parse(value: Value) -> InputValueResult { /// if let Value::Number(n) = &value { /// if let Some(n) = n.as_i64() { /// return Ok(MyInt(n as i32)); /// } /// } /// Err(InputValueError::ExpectedType(value)) /// } /// /// fn to_value(&self) -> Value { /// Value::Number(self.0.into()) /// } /// } /// ``` pub trait ScalarType: Sized + Send { /// Parse a scalar value, return `Some(Self)` if successful, otherwise return `None`. fn parse(value: Value) -> InputValueResult; /// Checks for a valid scalar value. /// /// Implementing this function can find incorrect input values during the verification phase, which can improve performance. fn is_valid(_value: &Value) -> bool { true } /// Convert the scalar to `Value`. fn to_value(&self) -> Value; }