pub trait GraphQLValue<S = DefaultScalarValue>where
S: ScalarValue,{
type Context;
type TypeInfo;
// Required method
fn type_name(&self, info: &Self::TypeInfo) -> Option<ArcStr>;
// Provided methods
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:
- Scalars, enums, lists and non-null wrappers only require
resolve. - Interfaces and objects require
resolve_fieldorresolveif you want to implement a custom resolution logic (probably not). - Interfaces and unions require
resolve_into_typeandconcrete_type_name. - Input objects do not require anything.
§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§
Sourcetype Context
type Context
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.
Sourcetype TypeInfo
type TypeInfo
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§
Sourcefn type_name(&self, info: &Self::TypeInfo) -> Option<ArcStr>
fn type_name(&self, info: &Self::TypeInfo) -> Option<ArcStr>
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§
Sourcefn resolve_field(
&self,
_info: &Self::TypeInfo,
_field_name: &str,
_arguments: &Arguments<'_, S>,
_executor: &Executor<'_, '_, Self::Context, S>,
) -> ExecutionResult<S>
fn resolve_field( &self, _info: &Self::TypeInfo, _field_name: &str, _arguments: &Arguments<'_, S>, _executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
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.
Sourcefn resolve_into_type(
&self,
info: &Self::TypeInfo,
type_name: &str,
selection_set: Option<&[Selection<'_, 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>
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.
Sourcefn concrete_type_name(
&self,
context: &Self::Context,
info: &Self::TypeInfo,
) -> String
fn concrete_type_name( &self, context: &Self::Context, info: &Self::TypeInfo, ) -> String
Returns the concrete GraphQLType name for this GraphQLValue being an interface,
an union or an object.
§Panics
The default implementation panics.
Sourcefn resolve(
&self,
info: &Self::TypeInfo,
selection_set: Option<&[Selection<'_, S>]>,
executor: &Executor<'_, '_, Self::Context, S>,
) -> ExecutionResult<S>
fn resolve( &self, info: &Self::TypeInfo, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
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§
Source§impl<S> GraphQLValue<S> for strwhere
S: ScalarValue,
impl<S> GraphQLValue<S> for strwhere
S: ScalarValue,
Source§impl<S, T> GraphQLValue<S> for Option<T>where
S: ScalarValue,
T: GraphQLValue<S>,
impl<S, T> GraphQLValue<S> for Option<T>where
S: ScalarValue,
T: GraphQLValue<S>,
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, _: &Self::TypeInfo) -> Option<ArcStr>
fn resolve( &self, info: &Self::TypeInfo, _: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<S, T> GraphQLValue<S> for &T
impl<S, T> GraphQLValue<S> for &T
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, info: &Self::TypeInfo) -> Option<ArcStr>
fn resolve_into_type( &self, info: &Self::TypeInfo, name: &str, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
fn resolve_field( &self, info: &Self::TypeInfo, field: &str, args: &Arguments<'_, S>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
fn resolve( &self, info: &Self::TypeInfo, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<S, T> GraphQLValue<S> for [T]where
S: ScalarValue,
T: GraphQLValue<S>,
impl<S, T> GraphQLValue<S> for [T]where
S: ScalarValue,
T: GraphQLValue<S>,
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, _: &Self::TypeInfo) -> Option<ArcStr>
fn resolve( &self, info: &Self::TypeInfo, _: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<S, T> GraphQLValue<S> for Box<T>
impl<S, T> GraphQLValue<S> for Box<T>
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, info: &Self::TypeInfo) -> Option<ArcStr>
fn resolve_into_type( &self, info: &Self::TypeInfo, name: &str, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
fn resolve_field( &self, info: &Self::TypeInfo, field: &str, args: &Arguments<'_, S>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
fn resolve( &self, info: &Self::TypeInfo, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<S, T> GraphQLValue<S> for Arc<T>
impl<S, T> GraphQLValue<S> for Arc<T>
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, info: &Self::TypeInfo) -> Option<ArcStr>
fn resolve_into_type( &self, info: &Self::TypeInfo, name: &str, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
fn resolve_field( &self, info: &Self::TypeInfo, field: &str, args: &Arguments<'_, S>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
fn resolve( &self, info: &Self::TypeInfo, selection_set: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<S, T> GraphQLValue<S> for Vec<T>where
T: GraphQLValue<S>,
S: ScalarValue,
impl<S, T> GraphQLValue<S> for Vec<T>where
T: GraphQLValue<S>,
S: ScalarValue,
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, _: &Self::TypeInfo) -> Option<ArcStr>
fn resolve( &self, info: &Self::TypeInfo, _: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<S, T, const N: usize> GraphQLValue<S> for [T; N]where
S: ScalarValue,
T: GraphQLValue<S>,
impl<S, T, const N: usize> GraphQLValue<S> for [T; N]where
S: ScalarValue,
T: GraphQLValue<S>,
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
fn type_name(&self, _: &Self::TypeInfo) -> Option<ArcStr>
fn resolve( &self, info: &Self::TypeInfo, _: Option<&[Selection<'_, S>]>, executor: &Executor<'_, '_, Self::Context, S>, ) -> ExecutionResult<S>
Source§impl<Tz, __S> GraphQLValue<__S> for DateTime<Tz>where
Tz: TimeZone + FromFixedOffset,
Tz::Offset: Display,
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature chrono only.
impl<Tz, __S> GraphQLValue<__S> for DateTime<Tz>where
Tz: TimeZone + FromFixedOffset,
Tz::Offset: Display,
__S: ScalarValue,
Self: ToScalarValue<__S>,
chrono only.Source§impl<__S> GraphQLValue<__S> for Tzwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature chrono-tz only.
impl<__S> GraphQLValue<__S> for Tzwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
chrono-tz only.Source§impl<__S> GraphQLValue<__S> for boolwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for boolwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for f64where
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for f64where
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for i32where
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for i32where
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for Stringwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for Stringwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for BigDecimalwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature bigdecimal only.
impl<__S> GraphQLValue<__S> for BigDecimalwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
bigdecimal only.Source§impl<__S> GraphQLValue<__S> for DateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature bson only.
impl<__S> GraphQLValue<__S> for DateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
bson only.Source§impl<__S> GraphQLValue<__S> for ObjectIdwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature bson only.
impl<__S> GraphQLValue<__S> for ObjectIdwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
bson only.Source§impl<__S> GraphQLValue<__S> for NaiveDatewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature chrono only.
impl<__S> GraphQLValue<__S> for NaiveDatewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
chrono only.Source§impl<__S> GraphQLValue<__S> for NaiveDateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature chrono only.
impl<__S> GraphQLValue<__S> for NaiveDateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
chrono only.Source§impl<__S> GraphQLValue<__S> for NaiveTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature chrono only.
impl<__S> GraphQLValue<__S> for NaiveTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
chrono only.Source§impl<__S> GraphQLValue<__S> for CompactStringwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for CompactStringwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for Datewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for Datewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for DateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for DateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for Timewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for Timewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for Spanwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for Spanwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for Timestampwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for Timestampwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for Offsetwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for Offsetwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for TimeZonewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for TimeZonewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for Zonedwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for Zonedwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for Decimalwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature rust_decimal only.
impl<__S> GraphQLValue<__S> for Decimalwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
rust_decimal only.Source§impl<__S> GraphQLValue<__S> for Datewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature time only.
impl<__S> GraphQLValue<__S> for Datewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
time only.Source§impl<__S> GraphQLValue<__S> for OffsetDateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature time only.
impl<__S> GraphQLValue<__S> for OffsetDateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
time only.Source§impl<__S> GraphQLValue<__S> for PrimitiveDateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature time only.
impl<__S> GraphQLValue<__S> for PrimitiveDateTimewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
time only.Source§impl<__S> GraphQLValue<__S> for Timewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature time only.
impl<__S> GraphQLValue<__S> for Timewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
time only.Source§impl<__S> GraphQLValue<__S> for UtcOffsetwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature time only.
impl<__S> GraphQLValue<__S> for UtcOffsetwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
time only.Source§impl<__S> GraphQLValue<__S> for Urlwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature url only.
impl<__S> GraphQLValue<__S> for Urlwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
url only.Source§impl<__S> GraphQLValue<__S> for Uuidwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature uuid only.
impl<__S> GraphQLValue<__S> for Uuidwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
uuid only.Implementors§
Source§impl<S> GraphQLValue<S> for Argument<S>where
S: ScalarValue + ScalarValue,
impl<S> GraphQLValue<S> for Argument<S>where
S: ScalarValue + ScalarValue,
Source§impl<S> GraphQLValue<S> for Field<S>where
S: ScalarValue + ScalarValue,
impl<S> GraphQLValue<S> for Field<S>where
S: ScalarValue + ScalarValue,
Source§impl<S> GraphQLValue<S> for SchemaType<S>where
S: ScalarValue + ScalarValue,
impl<S> GraphQLValue<S> for SchemaType<S>where
S: ScalarValue + ScalarValue,
Source§impl<S, QueryT, MutationT, SubscriptionT> GraphQLValue<S> for RootNode<QueryT, MutationT, SubscriptionT, S>where
S: ScalarValue,
QueryT: GraphQLType<S>,
MutationT: GraphQLType<S, Context = QueryT::Context>,
SubscriptionT: GraphQLType<S, Context = QueryT::Context>,
impl<S, QueryT, MutationT, SubscriptionT> GraphQLValue<S> for RootNode<QueryT, MutationT, SubscriptionT, S>where
S: ScalarValue,
QueryT: GraphQLType<S>,
MutationT: GraphQLType<S, Context = QueryT::Context>,
SubscriptionT: GraphQLType<S, Context = QueryT::Context>,
type Context = <QueryT as GraphQLValue<S>>::Context
type TypeInfo = <QueryT as GraphQLValue<S>>::TypeInfo
Source§impl<S, T> GraphQLValue<S> for Nullable<T>where
S: ScalarValue,
T: GraphQLValue<S>,
impl<S, T> GraphQLValue<S> for Nullable<T>where
S: ScalarValue,
T: GraphQLValue<S>,
type Context = <T as GraphQLValue<S>>::Context
type TypeInfo = <T as GraphQLValue<S>>::TypeInfo
Source§impl<S, T> GraphQLValue<S> for EmptyMutation<T>where
S: ScalarValue,
impl<S, T> GraphQLValue<S> for EmptyMutation<T>where
S: ScalarValue,
Source§impl<S, T> GraphQLValue<S> for EmptySubscription<T>where
S: ScalarValue,
impl<S, T> GraphQLValue<S> for EmptySubscription<T>where
S: ScalarValue,
Source§impl<__S> GraphQLValue<__S> for TypeKindwhere
__S: ScalarValue,
impl<__S> GraphQLValue<__S> for TypeKindwhere
__S: ScalarValue,
Source§impl<__S> GraphQLValue<__S> for Episodewhere
__S: ScalarValue,
Available on crate feature expose-test-schema only.
impl<__S> GraphQLValue<__S> for Episodewhere
__S: ScalarValue,
expose-test-schema only.Source§impl<__S> GraphQLValue<__S> for juniper::integrations::jiff::TimeZonewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Available on crate feature jiff only.
impl<__S> GraphQLValue<__S> for juniper::integrations::jiff::TimeZonewhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
jiff only.Source§impl<__S> GraphQLValue<__S> for EnumValuewhere
__S: ScalarValue,
impl<__S> GraphQLValue<__S> for EnumValuewhere
__S: ScalarValue,
Source§impl<__S> GraphQLValue<__S> for ArcStrwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for ArcStrwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for IDwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
impl<__S> GraphQLValue<__S> for IDwhere
__S: ScalarValue,
Self: ToScalarValue<__S>,
Source§impl<__S> GraphQLValue<__S> for Droidwhere
__S: ScalarValue,
Available on crate feature expose-test-schema only.
impl<__S> GraphQLValue<__S> for Droidwhere
__S: ScalarValue,
expose-test-schema only.Source§impl<__S> GraphQLValue<__S> for Humanwhere
__S: ScalarValue,
Available on crate feature expose-test-schema only.
impl<__S> GraphQLValue<__S> for Humanwhere
__S: ScalarValue,
expose-test-schema only.Source§impl<__S> GraphQLValue<__S> for Querywhere
__S: ScalarValue,
Available on crate feature expose-test-schema only.
impl<__S> GraphQLValue<__S> for Querywhere
__S: ScalarValue,
expose-test-schema only.Source§impl<__S> GraphQLValue<__S> for Subscriptionwhere
__S: ScalarValue,
Available on crate feature expose-test-schema only.
impl<__S> GraphQLValue<__S> for Subscriptionwhere
__S: ScalarValue,
expose-test-schema only.Source§impl<__S> GraphQLValue<__S> for CharacterValuewhere
__S: ScalarValue,
Available on crate feature expose-test-schema only.
impl<__S> GraphQLValue<__S> for CharacterValuewhere
__S: ScalarValue,
expose-test-schema only.