pub trait ScalarType: Sized + Send {
    // Required methods
    fn parse(value: Value) -> InputValueResult<Self>;
    fn to_value(&self) -> Value;

    // Provided method
    fn is_valid(_value: &Value) -> bool { ... }
}
Expand description

A GraphQL scalar.

You can implement the trait to create a custom scalar.

§Examples

use async_graphql::*;

struct MyInt(i32);

#[Scalar]
impl ScalarType for MyInt {
    fn parse(value: Value) -> InputValueResult<Self> {
        if let Value::Number(n) = &value {
            if let Some(n) = n.as_i64() {
                return Ok(MyInt(n as i32));
            }
        }
        Err(InputValueError::expected_type(value))
    }

    fn to_value(&self) -> Value {
        Value::Number(self.0.into())
    }
}

Required Methods§

source

fn parse(value: Value) -> InputValueResult<Self>

Parse a scalar value.

source

fn to_value(&self) -> Value

Convert the scalar to Value.

Provided Methods§

source

fn is_valid(_value: &Value) -> bool

Checks for a valid scalar value.

Implementing this function can find incorrect input values during the verification phase, which can improve performance.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl ScalarType for Bson

source§

impl ScalarType for Tz

source§

impl ScalarType for bool

The Boolean scalar type represents true or false.

source§

impl ScalarType for char

The Char scalar type represents a unicode char. The input and output values are a string, and there can only be one unicode character in this string.

source§

impl ScalarType for f32

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

source§

impl ScalarType for f64

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

source§

impl ScalarType for i8

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for i16

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for i32

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for i64

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for isize

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for u8

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for u16

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for u32

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for u64

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for usize

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for String

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

source§

impl ScalarType for BigDecimal

source§

impl ScalarType for DateTime

source§

impl ScalarType for Document

source§

impl ScalarType for ObjectId

source§

impl ScalarType for Uuid

source§

impl ScalarType for Bytes

The Binary scalar type represents binary data.

source§

impl ScalarType for DateTime<FixedOffset>

Implement the DateTime scalar

The input/output is a string in RFC3339 format.

source§

impl ScalarType for DateTime<Local>

Implement the DateTime scalar

The input/output is a string in RFC3339 format.

source§

impl ScalarType for DateTime<Utc>

Implement the DateTime scalar

The input/output is a string in RFC3339 format.

source§

impl ScalarType for NaiveDate

ISO 8601 calendar date without timezone. Format: %Y-%m-%d

§Examples

  • 1994-11-13
  • 2000-02-24
source§

impl ScalarType for NaiveDateTime

ISO 8601 combined date and time without timezone.

§Examples

  • 2015-07-01T08:59:60.123,
source§

impl ScalarType for NaiveTime

ISO 8601 time without timezone. Allows for the nanosecond precision and optional leap second representation. Format: %H:%M:%S%.f

§Examples

  • 08:59:60.123
source§

impl ScalarType for Decimal

source§

impl ScalarType for SmolStr

source§

impl ScalarType for Date

ISO 8601 calendar date without timezone. Format: %Y-%m-%d

§Examples

  • 1994-11-13
  • 2000-02-24
source§

impl ScalarType for OffsetDateTime

A datetime with timezone offset.

The input is a string in RFC3339 format, e.g. “2022-01-12T04:00:19.12345Z” or “2022-01-12T04:00:19+03:00”. The output is also a string in RFC3339 format, but it is always normalized to the UTC (Z) offset, e.g. “2022-01-12T04:00:19.12345Z”.

source§

impl ScalarType for PrimitiveDateTime

A local datetime without timezone offset.

The input/output is a string in ISO 8601 format without timezone, including subseconds. E.g. “2022-01-12T07:30:19.12345”.

source§

impl ScalarType for Url

URL is a String implementing the URL Standard

source§

impl ScalarType for Uuid

A UUID is a unique 128-bit number, stored as 16 octets. UUIDs are parsed as Strings within GraphQL. UUIDs are used to assign unique identifiers to entities without requiring a central allocating authority.

§References

source§

impl ScalarType for NonZeroI8

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroI16

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroI32

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroI64

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroU8

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroU16

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroU32

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for NonZeroU64

The Int scalar type represents non-fractional whole numeric values.

source§

impl ScalarType for Duration

Implement the Duration scalar

The input/output is a string in ISO8601 format.

Implementors§

source§

impl ScalarType for Any

The _Any scalar is used to pass representations of entities from external services into the root _entities field for execution.

source§

impl ScalarType for ID

source§

impl<T: Num + Display + Send + Sync> ScalarType for StringNumber<T>
where <T as Num>::FromStrRadixErr: Display,