pub trait GraphQLValue<S = DefaultScalarValue> where
    S: ScalarValue
{ type Context; type TypeInfo; fn type_name<'i>(&self, info: &'i Self::TypeInfo) -> Option<&'i str>; fn resolve_field(
        &self,
        _info: &Self::TypeInfo,
        _field_name: &str,
        _arguments: &Arguments<'_, S>,
        _executor: &Executor<'_, '_, Self::Context, S>
    ) -> ExecutionResult<S> { ... } fn resolve_into_type(
        &self,
        info: &Self::TypeInfo,
        type_name: &str,
        selection_set: Option<&[Selection<'_, S>]>,
        executor: &Executor<'_, '_, Self::Context, S>
    ) -> ExecutionResult<S> { ... } fn concrete_type_name(
        &self,
        context: &Self::Context,
        info: &Self::TypeInfo
    ) -> String { ... } fn resolve(
        &self,
        info: &Self::TypeInfo,
        selection_set: Option<&[Selection<'_, S>]>,
        executor: &Executor<'_, '_, Self::Context, S>
    ) -> ExecutionResult<S> { ... } }
Expand description

Primary trait used to resolve GraphQL values.

All the convenience macros ultimately expand into an implementation of this trait for the given type. The macros remove duplicated definitions of fields and arguments, and add type checks on all resolving functions automatically. This can all be done manually too.

GraphQLValue provides some convenience methods for you, in the form of optional trait methods. The type_name method is mandatory, but other than that, it depends on what type you’re exposing:

Object safety

This trait is object safe, therefore may be turned into a trait object and used for resolving GraphQL values even when a concrete Rust type is erased.

Example

This trait is intended to be used in a conjunction with a GraphQLType trait. See the example in the documentation of a GraphQLType trait.

Required Associated Types

Context type for this GraphQLValue.

It’s threaded through a query execution to all affected nodes, and can be used to hold common data, e.g. database connections or request session information.

Type that may carry additional schema information for this GraphQLValue.

It can be used to implement a schema that is partly dynamic, meaning that it can use information that is not known at compile time, for instance by reading it from a configuration file at startup.

Required Methods

Returns name of the GraphQLType exposed by this GraphQLValue.

This function will be called multiple times during a query execution. It must not perform any calculation and always return the same value.

Usually, it should just call a GraphQLType::name inside.

Provided Methods

Resolves the value of a single field on this GraphQLValue.

The arguments object contains all the specified arguments, with default values being substituted for the ones not provided by the query.

The executor can be used to drive selections into sub-objects.

Panics

The default implementation panics.

Resolves this GraphQLValue (being an interface or an union) into a concrete downstream object type.

Tries to resolve this GraphQLValue into the provided type_name. If the type matches, then passes the instance along to Executor::resolve.

Panics

The default implementation panics.

Returns the concrete GraphQLType name for this GraphQLValue being an interface, an union or an object.

Panics

The default implementation panics.

Resolves the provided selection_set against this GraphQLValue.

For non-object types, the selection_set will be None and the value should simply be returned.

For objects, all fields in the selection_set should be resolved. The default implementation uses GraphQLValue::resolve_field to resolve all fields, including those through a fragment expansion.

Since the GraphQL spec specifies that errors during field processing should result in a null-value, this might return Ok(Null) in case of a failure. Errors are recorded internally.

Panics

The default implementation panics, if selection_set is None.

Implementations on Foreign Types

Implementors