diff --git a/juniper/src/graphql/mod.rs b/juniper/src/graphql/mod.rs index 8fa9391a..9e0e1af9 100644 --- a/juniper/src/graphql/mod.rs +++ b/juniper/src/graphql/mod.rs @@ -2,10 +2,10 @@ use crate::{behavior, resolve}; pub use crate::{ ast::InputValue, + executor::Variables, macros::{input_value, value, vars}, resolve::Type, value::Value, - executor::Variables, }; /* @@ -47,6 +47,21 @@ pub trait Scalar< fn assert_scalar(); } +pub trait ScalarAs< + 'inp, + Wrapper, + TypeInfo: ?Sized, + Context: ?Sized, + ScalarValue: 'inp, + Behavior: ?Sized = behavior::Standard, +>: + InputTypeAs<'inp, Wrapper, TypeInfo, ScalarValue, Behavior> + + OutputType + + resolve::ScalarToken +{ + fn assert_scalar(); +} + /* pub trait Union OutputType @@ -73,6 +88,20 @@ pub trait InputType< fn assert_input_type(); } +pub trait InputTypeAs< + 'inp, + Wrapper, + TypeInfo: ?Sized, + ScalarValue: 'inp, + Behavior: ?Sized = behavior::Standard, +>: + Type + + resolve::ToInputValue + + resolve::InputValueAs<'inp, Wrapper, ScalarValue, Behavior> +{ + fn assert_input_type(); +} + pub trait OutputType< TypeInfo: ?Sized, Context: ?Sized, diff --git a/juniper/src/resolve/mod.rs b/juniper/src/resolve/mod.rs index 21517fc7..206cf950 100644 --- a/juniper/src/resolve/mod.rs +++ b/juniper/src/resolve/mod.rs @@ -5,12 +5,6 @@ use crate::{ reflect, Arguments, BoxFuture, ExecutionResult, Executor, IntoFieldError, Registry, Selection, }; -#[doc(inline)] -pub use crate::types::{ - /*arc::TryFromInputValue as InputValueAsArc,*/ r#box::TryFromInputValue as InputValueAsBox, - /*r#ref::TryFromInputValue as InputValueAsRef, rc::TryFromInputValue as InputValueAsRc,*/ -}; - pub trait Type { fn meta<'r>( registry: &mut Registry<'r, ScalarValue>, @@ -179,6 +173,32 @@ pub trait InputValueOwned: impl InputValueOwned for T where T: for<'i> InputValue<'i, SV, BH> {} +pub trait InputValueAs<'input, Wrapper, ScalarValue: 'input, Behavior: ?Sized = behavior::Standard> +{ + type Error: IntoFieldError; + + fn try_from_input_value( + v: &'input graphql::InputValue, + ) -> Result; + + fn try_from_implicit_null() -> Result { + Self::try_from_input_value(&graphql::InputValue::::Null) + } +} + +pub trait InputValueAsRef { + type Error: IntoFieldError; + + fn try_from_input_value(v: &graphql::InputValue) -> Result<&Self, Self::Error>; + + fn try_from_implicit_null<'a>() -> Result<&'a Self, Self::Error> + where + ScalarValue: 'a, + { + Self::try_from_input_value(&graphql::InputValue::::Null) + } +} + pub trait ScalarToken { fn parse_scalar_token(token: parser::ScalarToken<'_>) -> Result>; } diff --git a/juniper/src/types/arc.rs b/juniper/src/types/arc.rs index 3c6d12d0..7000e445 100644 --- a/juniper/src/types/arc.rs +++ b/juniper/src/types/arc.rs @@ -6,277 +6,287 @@ use crate::{ graphql, meta::MetaType, parser::{ParseError, ScalarToken}, - reflect, resolve, Arguments, BoxFuture, DefaultScalarValue, ExecutionResult, Executor, - IntoFieldError, Registry, Selection, + reflect, resolve, Arguments, BoxFuture, ExecutionResult, Executor, Registry, Selection, }; -/* -impl resolve::Type for Arc +impl resolve::Type for Arc where - T: resolve::Type + ?Sized, - Info: ?Sized, + T: resolve::Type + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn meta<'r>(registry: &mut Registry<'r, S>, info: &Info) -> MetaType<'r, S> + fn meta<'r>(registry: &mut Registry<'r, SV>, info: &TI) -> MetaType<'r, SV> where - S: 'r, + SV: 'r, { T::meta(registry, info) } } -impl resolve::TypeName for Arc +impl resolve::TypeName for Arc where - T: resolve::TypeName + ?Sized, - Info: ?Sized, + T: resolve::TypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn type_name(info: &Info) -> &str { + fn type_name(info: &TI) -> &str { T::type_name(info) } } -impl resolve::ConcreteTypeName for Arc +impl resolve::ConcreteTypeName for Arc where - T: resolve::ConcreteTypeName + ?Sized, - Info: ?Sized, + T: resolve::ConcreteTypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn concrete_type_name<'i>(&self, info: &'i Info) -> &'i str { + fn concrete_type_name<'i>(&self, info: &'i TI) -> &'i str { (**self).concrete_type_name(info) } } -impl resolve::Value for Arc +impl resolve::Value for Arc where - T: resolve::Value + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Value + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value( &self, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_value(selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_value(selection_set, type_info, executor) } } -impl resolve::ValueAsync for Arc +impl resolve::ValueAsync for Arc where - T: resolve::ValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value_async<'r>( &'r self, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_value_async(selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_value_async(selection_set, type_info, executor) } } -impl resolve::ConcreteValue for Arc +impl resolve::ConcreteValue for Arc where - T: resolve::ConcreteValue + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValue + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value( &self, type_name: &str, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_concrete_value(type_name, selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_concrete_value(type_name, selection_set, type_info, executor) } } -impl resolve::ConcreteValueAsync for Arc +impl resolve::ConcreteValueAsync for Arc where - T: resolve::ConcreteValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value_async<'r>( &'r self, type_name: &str, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_concrete_value_async(type_name, selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_concrete_value_async(type_name, selection_set, type_info, executor) } } -impl resolve::Field for Arc +impl resolve::Field for Arc where - T: resolve::Field + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Field + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field( &self, field_name: &str, - arguments: &Arguments, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_field(field_name, arguments, info, executor) + arguments: &Arguments, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_field(field_name, arguments, type_info, executor) } } -impl resolve::FieldAsync for Arc +impl resolve::FieldAsync for Arc where - T: resolve::FieldAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::FieldAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field_async<'r>( &'r self, field_name: &'r str, - arguments: &'r Arguments, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_field_async(field_name, arguments, info, executor) + arguments: &'r Arguments, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_field_async(field_name, arguments, type_info, executor) } } -impl resolve::ToInputValue for Arc +impl resolve::ToInputValue for Arc where - T: resolve::ToInputValue + ?Sized, + T: resolve::ToInputValue + ?Sized, + BH: ?Sized, { - fn to_input_value(&self) -> graphql::InputValue { + fn to_input_value(&self) -> graphql::InputValue { (**self).to_input_value() } } -impl<'inp, T, S> resolve::InputValue<'inp, S> for Arc +impl<'i, T, SV, BH> resolve::InputValue<'i, SV, BH> for Arc where - T: resolve::InputValueAsArc<'inp, S> + ?Sized, - S: 'inp, + T: resolve::InputValueAs<'i, Self, SV, BH> + ?Sized, + SV: 'i, + BH: ?Sized, { - type Error = >::Error; + type Error = T::Error; - fn try_from_input_value(v: &'inp graphql::InputValue) -> Result { - >::try_from_input_value(v) + fn try_from_input_value(v: &'i graphql::InputValue) -> Result { + T::try_from_input_value(v) } fn try_from_implicit_null() -> Result { - >::try_from_implicit_null() + T::try_from_implicit_null() } } -pub trait TryFromInputValue<'input, S: 'input = DefaultScalarValue> { - type Error: IntoFieldError; - - fn try_from_input_value(v: &'input graphql::InputValue) -> Result, Self::Error>; - - fn try_from_implicit_null() -> Result, Self::Error> { - Self::try_from_input_value(&graphql::InputValue::::Null) - } -} - -impl<'inp, T, S> TryFromInputValue<'inp, S> for T +impl<'i, T, SV, BH> resolve::InputValueAs<'i, Arc, SV, BH> for T where - T: resolve::InputValue<'inp, S>, - S: 'inp, + T: resolve::InputValue<'i, SV, BH>, + SV: 'i, + BH: ?Sized, { - type Error = >::Error; + type Error = T::Error; - fn try_from_input_value(v: &'inp graphql::InputValue) -> Result, Self::Error> { - >::try_from_input_value(v).map(Arc::new) + fn try_from_input_value(v: &'i graphql::InputValue) -> Result, Self::Error> { + T::try_from_input_value(v).map(Arc::new) } fn try_from_implicit_null() -> Result, Self::Error> { - >::try_from_implicit_null().map(Arc::new) + T::try_from_implicit_null().map(Arc::new) } } -impl resolve::ScalarToken for Arc +impl resolve::ScalarToken for Arc where - T: resolve::ScalarToken + ?Sized, + T: resolve::ScalarToken + ?Sized, + BH: ?Sized, { - fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { + fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { T::parse_scalar_token(token) } } -impl<'i, T, Info, S: 'i> graphql::InputType<'i, Info, S> for Arc +impl<'i, T, TI, SV, BH> graphql::InputType<'i, TI, SV, BH> for Arc where - T: graphql::InputType<'i, Info, S> + ?Sized, - Info: ?Sized, + T: graphql::InputTypeAs<'i, Self, TI, SV, BH> + ?Sized, + TI: ?Sized, + SV: 'i, + BH: ?Sized, { fn assert_input_type() { T::assert_input_type() } } -impl graphql::OutputType for Arc +impl<'i, T, TI, SV, BH> graphql::InputTypeAs<'i, Arc, TI, SV, BH> for T where - T: graphql::OutputType + ?Sized, + T: graphql::InputType<'i, TI, SV, BH>, + TI: ?Sized, + SV: 'i, + BH: ?Sized, +{ + fn assert_input_type() { + T::assert_input_type() + } +} + +impl graphql::OutputType for Arc +where + T: graphql::OutputType + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn assert_output_type() { T::assert_output_type() } } -impl graphql::Interface for Arc +impl<'i, T, TI, CX, SV, BH> graphql::Scalar<'i, TI, CX, SV, BH> for Arc where - T: graphql::Interface + ?Sized, -{ - fn assert_interface() { - T::assert_interface() - } -} - -impl graphql::Object for Arc -where - T: graphql::Object + ?Sized, -{ - fn assert_object() { - T::assert_object() - } -} - -impl graphql::Scalar for Arc -where - T: graphql::Scalar + ?Sized, + T: graphql::ScalarAs<'i, Self, TI, CX, SV, BH> + ?Sized, + TI: ?Sized, + CX: ?Sized, + SV: 'i, + BH: ?Sized, { fn assert_scalar() { T::assert_scalar() } } -impl graphql::Union for Arc +impl<'i, T, TI, CX, SV, BH> graphql::ScalarAs<'i, Arc, TI, CX, SV, BH> for T where - T: graphql::Union + ?Sized, + T: graphql::Scalar<'i, TI, CX, SV, BH>, + TI: ?Sized, + CX: ?Sized, + SV: 'i, + BH: ?Sized, { - fn assert_union() { - T::assert_union() + fn assert_scalar() { + T::assert_scalar() } } -impl reflect::BaseType for Arc +impl reflect::BaseType for Arc where - T: reflect::BaseType + ?Sized, + T: reflect::BaseType + ?Sized, + BH: ?Sized, { const NAME: reflect::Type = T::NAME; } -impl reflect::BaseSubTypes for Arc +impl reflect::BaseSubTypes for Arc where - T: reflect::BaseSubTypes + ?Sized, + T: reflect::BaseSubTypes + ?Sized, + BH: ?Sized, { const NAMES: reflect::Types = T::NAMES; } -impl reflect::WrappedType for Arc +impl reflect::WrappedType for Arc where - T: reflect::WrappedType + ?Sized, + T: reflect::WrappedType + ?Sized, + BH: ?Sized, { const VALUE: reflect::WrappedValue = T::VALUE; } -*/ diff --git a/juniper/src/types/box.rs b/juniper/src/types/box.rs index 68edcc00..c5257b5b 100644 --- a/juniper/src/types/box.rs +++ b/juniper/src/types/box.rs @@ -1,11 +1,10 @@ //! GraphQL implementation for [`Box`]. use crate::{ - behavior, graphql, + graphql, meta::MetaType, parser::{ParseError, ScalarToken}, - reflect, resolve, Arguments, BoxFuture, ExecutionResult, Executor, IntoFieldError, Registry, - Selection, + reflect, resolve, Arguments, BoxFuture, ExecutionResult, Executor, Registry, Selection, }; impl resolve::Type for Box @@ -162,7 +161,7 @@ where impl<'i, T, SV, BH> resolve::InputValue<'i, SV, BH> for Box where - T: resolve::InputValueAsBox<'i, SV, BH> + ?Sized, + T: resolve::InputValueAs<'i, Self, SV, BH> + ?Sized, SV: 'i, BH: ?Sized, { @@ -177,19 +176,7 @@ where } } -pub trait TryFromInputValue<'input, ScalarValue: 'input, Behavior: ?Sized = behavior::Standard> { - type Error: IntoFieldError; - - fn try_from_input_value( - v: &'input graphql::InputValue, - ) -> Result, Self::Error>; - - fn try_from_implicit_null() -> Result, Self::Error> { - Self::try_from_input_value(&graphql::InputValue::::Null) - } -} - -impl<'i, T, SV, BH> TryFromInputValue<'i, SV, BH> for T +impl<'i, T, SV, BH> resolve::InputValueAs<'i, Box, SV, BH> for T where T: resolve::InputValue<'i, SV, BH>, SV: 'i, @@ -217,6 +204,18 @@ where } impl<'i, T, TI, SV, BH> graphql::InputType<'i, TI, SV, BH> for Box +where + T: graphql::InputTypeAs<'i, Self, TI, SV, BH> + ?Sized, + TI: ?Sized, + SV: 'i, + BH: ?Sized, +{ + fn assert_input_type() { + T::assert_input_type() + } +} + +impl<'i, T, TI, SV, BH> graphql::InputTypeAs<'i, Box, TI, SV, BH> for T where T: graphql::InputType<'i, TI, SV, BH>, TI: ?Sized, @@ -241,6 +240,19 @@ where } impl<'i, T, TI, CX, SV, BH> graphql::Scalar<'i, TI, CX, SV, BH> for Box +where + T: graphql::ScalarAs<'i, Self, TI, CX, SV, BH> + ?Sized, + TI: ?Sized, + CX: ?Sized, + SV: 'i, + BH: ?Sized, +{ + fn assert_scalar() { + T::assert_scalar() + } +} + +impl<'i, T, TI, CX, SV, BH> graphql::ScalarAs<'i, Box, TI, CX, SV, BH> for T where T: graphql::Scalar<'i, TI, CX, SV, BH>, TI: ?Sized, diff --git a/juniper/src/types/mod.rs b/juniper/src/types/mod.rs index 5e529d61..d331959a 100644 --- a/juniper/src/types/mod.rs +++ b/juniper/src/types/mod.rs @@ -1,11 +1,11 @@ -pub mod arc; +mod arc; mod array; -pub mod r#box; +mod r#box; pub mod iter; mod nullable; mod option; -pub mod rc; -pub mod r#ref; +mod rc; +mod r#ref; mod ref_mut; mod result; mod slice; diff --git a/juniper/src/types/rc.rs b/juniper/src/types/rc.rs index 88f7089d..53a3248f 100644 --- a/juniper/src/types/rc.rs +++ b/juniper/src/types/rc.rs @@ -6,277 +6,287 @@ use crate::{ graphql, meta::MetaType, parser::{ParseError, ScalarToken}, - reflect, resolve, Arguments, BoxFuture, DefaultScalarValue, ExecutionResult, Executor, - IntoFieldError, Registry, Selection, + reflect, resolve, Arguments, BoxFuture, ExecutionResult, Executor, Registry, Selection, }; -/* -impl resolve::Type for Rc +impl resolve::Type for Rc where - T: resolve::Type + ?Sized, - Info: ?Sized, + T: resolve::Type + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn meta<'r>(registry: &mut Registry<'r, S>, info: &Info) -> MetaType<'r, S> + fn meta<'r>(registry: &mut Registry<'r, SV>, info: &TI) -> MetaType<'r, SV> where - S: 'r, + SV: 'r, { T::meta(registry, info) } } -impl resolve::TypeName for Rc +impl resolve::TypeName for Rc where - T: resolve::TypeName + ?Sized, - Info: ?Sized, + T: resolve::TypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn type_name(info: &Info) -> &str { + fn type_name(info: &TI) -> &str { T::type_name(info) } } -impl resolve::ConcreteTypeName for Rc +impl resolve::ConcreteTypeName for Rc where - T: resolve::ConcreteTypeName + ?Sized, - Info: ?Sized, + T: resolve::ConcreteTypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn concrete_type_name<'i>(&self, info: &'i Info) -> &'i str { + fn concrete_type_name<'i>(&self, info: &'i TI) -> &'i str { (**self).concrete_type_name(info) } } -impl resolve::Value for Rc +impl resolve::Value for Rc where - T: resolve::Value + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Value + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value( &self, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_value(selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_value(selection_set, type_info, executor) } } -impl resolve::ValueAsync for Rc +impl resolve::ValueAsync for Rc where - T: resolve::ValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value_async<'r>( &'r self, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_value_async(selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_value_async(selection_set, type_info, executor) } } -impl resolve::ConcreteValue for Rc +impl resolve::ConcreteValue for Rc where - T: resolve::ConcreteValue + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValue + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value( &self, type_name: &str, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_concrete_value(type_name, selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_concrete_value(type_name, selection_set, type_info, executor) } } -impl resolve::ConcreteValueAsync for Rc +impl resolve::ConcreteValueAsync for Rc where - T: resolve::ConcreteValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value_async<'r>( &'r self, type_name: &str, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_concrete_value_async(type_name, selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_concrete_value_async(type_name, selection_set, type_info, executor) } } -impl resolve::Field for Rc +impl resolve::Field for Rc where - T: resolve::Field + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Field + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field( &self, field_name: &str, - arguments: &Arguments, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_field(field_name, arguments, info, executor) + arguments: &Arguments, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_field(field_name, arguments, type_info, executor) } } -impl resolve::FieldAsync for Rc +impl resolve::FieldAsync for Rc where - T: resolve::FieldAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::FieldAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field_async<'r>( &'r self, field_name: &'r str, - arguments: &'r Arguments, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_field_async(field_name, arguments, info, executor) + arguments: &'r Arguments, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_field_async(field_name, arguments, type_info, executor) } } -impl resolve::ToInputValue for Rc +impl resolve::ToInputValue for Rc where - T: resolve::ToInputValue + ?Sized, + T: resolve::ToInputValue + ?Sized, + BH: ?Sized, { - fn to_input_value(&self) -> graphql::InputValue { + fn to_input_value(&self) -> graphql::InputValue { (**self).to_input_value() } } -impl<'inp, T, S> resolve::InputValue<'inp, S> for Rc +impl<'i, T, SV, BH> resolve::InputValue<'i, SV, BH> for Rc where - T: resolve::InputValueAsRc<'inp, S> + ?Sized, - S: 'inp, + T: resolve::InputValueAs<'i, Self, SV, BH> + ?Sized, + SV: 'i, + BH: ?Sized, { - type Error = >::Error; + type Error = T::Error; - fn try_from_input_value(v: &'inp graphql::InputValue) -> Result { - >::try_from_input_value(v) + fn try_from_input_value(v: &'i graphql::InputValue) -> Result { + T::try_from_input_value(v) } fn try_from_implicit_null() -> Result { - >::try_from_implicit_null() + T::try_from_implicit_null() } } -pub trait TryFromInputValue<'input, S: 'input = DefaultScalarValue> { - type Error: IntoFieldError; - - fn try_from_input_value(v: &'input graphql::InputValue) -> Result, Self::Error>; - - fn try_from_implicit_null() -> Result, Self::Error> { - Self::try_from_input_value(&graphql::InputValue::::Null) - } -} - -impl<'inp, T, S> TryFromInputValue<'inp, S> for T +impl<'i, T, SV, BH> resolve::InputValueAs<'i, Rc, SV, BH> for T where - T: resolve::InputValue<'inp, S>, - S: 'inp, + T: resolve::InputValue<'i, SV, BH>, + SV: 'i, + BH: ?Sized, { - type Error = >::Error; + type Error = T::Error; - fn try_from_input_value(v: &'inp graphql::InputValue) -> Result, Self::Error> { - >::try_from_input_value(v).map(Rc::new) + fn try_from_input_value(v: &'i graphql::InputValue) -> Result, Self::Error> { + T::try_from_input_value(v).map(Rc::new) } fn try_from_implicit_null() -> Result, Self::Error> { - >::try_from_implicit_null().map(Rc::new) + T::try_from_implicit_null().map(Rc::new) } } -impl resolve::ScalarToken for Rc +impl resolve::ScalarToken for Rc where - T: resolve::ScalarToken + ?Sized, + T: resolve::ScalarToken + ?Sized, + BH: ?Sized, { - fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { + fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { T::parse_scalar_token(token) } } -impl<'i, T, Info, S: 'i> graphql::InputType<'i, Info, S> for Rc +impl<'i, T, TI, SV, BH> graphql::InputType<'i, TI, SV, BH> for Rc where - T: graphql::InputType<'i, Info, S> + ?Sized, - Info: ?Sized, + T: graphql::InputTypeAs<'i, Self, TI, SV, BH> + ?Sized, + TI: ?Sized, + SV: 'i, + BH: ?Sized, { fn assert_input_type() { T::assert_input_type() } } -impl graphql::OutputType for Rc +impl<'i, T, TI, SV, BH> graphql::InputTypeAs<'i, Rc, TI, SV, BH> for T where - T: graphql::OutputType + ?Sized, + T: graphql::InputType<'i, TI, SV, BH>, + TI: ?Sized, + SV: 'i, + BH: ?Sized, +{ + fn assert_input_type() { + T::assert_input_type() + } +} + +impl graphql::OutputType for Rc +where + T: graphql::OutputType + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn assert_output_type() { T::assert_output_type() } } -impl graphql::Interface for Rc +impl<'i, T, TI, CX, SV, BH> graphql::Scalar<'i, TI, CX, SV, BH> for Rc where - T: graphql::Interface + ?Sized, -{ - fn assert_interface() { - T::assert_interface() - } -} - -impl graphql::Object for Rc -where - T: graphql::Object + ?Sized, -{ - fn assert_object() { - T::assert_object() - } -} - -impl graphql::Scalar for Rc -where - T: graphql::Scalar + ?Sized, + T: graphql::ScalarAs<'i, Self, TI, CX, SV, BH> + ?Sized, + TI: ?Sized, + CX: ?Sized, + SV: 'i, + BH: ?Sized, { fn assert_scalar() { T::assert_scalar() } } -impl graphql::Union for Rc +impl<'i, T, TI, CX, SV, BH> graphql::ScalarAs<'i, Rc, TI, CX, SV, BH> for T where - T: graphql::Union + ?Sized, + T: graphql::Scalar<'i, TI, CX, SV, BH>, + TI: ?Sized, + CX: ?Sized, + SV: 'i, + BH: ?Sized, { - fn assert_union() { - T::assert_union() + fn assert_scalar() { + T::assert_scalar() } } -impl reflect::BaseType for Rc +impl reflect::BaseType for Rc where - T: reflect::BaseType + ?Sized, + T: reflect::BaseType + ?Sized, + BH: ?Sized, { const NAME: reflect::Type = T::NAME; } -impl reflect::BaseSubTypes for Rc +impl reflect::BaseSubTypes for Rc where - T: reflect::BaseSubTypes + ?Sized, + T: reflect::BaseSubTypes + ?Sized, + BH: ?Sized, { const NAMES: reflect::Types = T::NAMES; } -impl reflect::WrappedType for Rc +impl reflect::WrappedType for Rc where - T: reflect::WrappedType + ?Sized, + T: reflect::WrappedType + ?Sized, + BH: ?Sized, { const VALUE: reflect::WrappedValue = T::VALUE; } -*/ diff --git a/juniper/src/types/ref.rs b/juniper/src/types/ref.rs index e087482a..7112c99b 100644 --- a/juniper/src/types/ref.rs +++ b/juniper/src/types/ref.rs @@ -6,264 +6,266 @@ use crate::{ graphql, meta::MetaType, parser::{ParseError, ScalarToken}, - reflect, resolve, Arguments, BoxFuture, DefaultScalarValue, ExecutionResult, Executor, - IntoFieldError, Registry, Selection, + reflect, resolve, Arguments, BoxFuture, ExecutionResult, Executor, Registry, Selection, }; -/* -impl<'me, T, Info, S> resolve::Type for &'me T +impl<'me, T, TI, SV, BH> resolve::Type for &'me T where - T: resolve::Type + ?Sized, - Info: ?Sized, + T: resolve::Type + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn meta<'r>(registry: &mut Registry<'r, S>, info: &Info) -> MetaType<'r, S> + fn meta<'r>(registry: &mut Registry<'r, SV>, info: &TI) -> MetaType<'r, SV> where - S: 'r, + SV: 'r, { T::meta(registry, info) } } -impl<'me, T, Info> resolve::TypeName for &'me T +impl<'me, T, TI, BH> resolve::TypeName for &'me T where - T: resolve::TypeName + ?Sized, - Info: ?Sized, + T: resolve::TypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn type_name(info: &Info) -> &str { + fn type_name(info: &TI) -> &str { T::type_name(info) } } -impl<'me, T, Info> resolve::ConcreteTypeName for &'me T +impl<'me, T, TI, BH> resolve::ConcreteTypeName for &'me T where - T: resolve::ConcreteTypeName + ?Sized, - Info: ?Sized, + T: resolve::ConcreteTypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn concrete_type_name<'i>(&self, info: &'i Info) -> &'i str { + fn concrete_type_name<'i>(&self, info: &'i TI) -> &'i str { (**self).concrete_type_name(info) } } -impl<'me, T, Info, Ctx, S> resolve::Value for &'me T +impl<'me, T, TI, CX, SV, BH> resolve::Value for &'me T where - T: resolve::Value + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Value + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value( &self, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_value(selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_value(selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::ValueAsync for &'me T +impl<'me, T, TI, CX, SV, BH> resolve::ValueAsync for &'me T where - T: resolve::ValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value_async<'r>( &'r self, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_value_async(selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_value_async(selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::ConcreteValue for &'me T +impl<'me, T, TI, CX, SV, BH> resolve::ConcreteValue for &'me T where - T: resolve::ConcreteValue + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValue + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value( &self, type_name: &str, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_concrete_value(type_name, selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_concrete_value(type_name, selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::ConcreteValueAsync for &'me T +impl<'me, T, TI, CX, SV, BH> resolve::ConcreteValueAsync for &'me T where - T: resolve::ConcreteValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value_async<'r>( &'r self, type_name: &str, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_concrete_value_async(type_name, selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_concrete_value_async(type_name, selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::Field for &'me T +impl<'me, T, TI, CX, SV, BH> resolve::Field for &'me T where - T: resolve::Field + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Field + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field( &self, field_name: &str, - arguments: &Arguments, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_field(field_name, arguments, info, executor) + arguments: &Arguments, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_field(field_name, arguments, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::FieldAsync for &'me T +impl<'me, T, TI, CX, SV, BH> resolve::FieldAsync for &'me T where - T: resolve::FieldAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::FieldAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field_async<'r>( &'r self, field_name: &'r str, - arguments: &'r Arguments, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_field_async(field_name, arguments, info, executor) + arguments: &'r Arguments, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_field_async(field_name, arguments, type_info, executor) } } -impl<'me, T, S> resolve::ToInputValue for &'me T +impl<'me, T, SV, BH> resolve::ToInputValue for &'me T where - T: resolve::ToInputValue + ?Sized, + T: resolve::ToInputValue + ?Sized, + BH: ?Sized, { - fn to_input_value(&self) -> graphql::InputValue { + fn to_input_value(&self) -> graphql::InputValue { (**self).to_input_value() } } -impl<'inp: 'me, 'me, T, S: 'inp> resolve::InputValue<'inp, S> for &'me T +impl<'me, 'i, T, SV, BH> resolve::InputValue<'i, SV, BH> for &'me T where - T: resolve::InputValueAsRef + ?Sized, + 'i: 'me, + T: resolve::InputValueAs<'i, &'me T, SV, BH> + ?Sized, + SV: 'i, + BH: ?Sized, { - type Error = >::Error; + type Error = T::Error; - fn try_from_input_value(v: &'inp graphql::InputValue) -> Result { - >::try_from_input_value(v) + fn try_from_input_value(v: &'i graphql::InputValue) -> Result { + T::try_from_input_value(v) } fn try_from_implicit_null() -> Result { - >::try_from_implicit_null() + T::try_from_implicit_null() } } -pub trait TryFromInputValue { - type Error: IntoFieldError; - - fn try_from_input_value(v: &graphql::InputValue) -> Result<&Self, Self::Error>; - - fn try_from_implicit_null<'a>() -> Result<&'a Self, Self::Error> - where - S: 'a, - { - Self::try_from_input_value(&graphql::InputValue::::Null) - } -} - -impl<'me, T, S> resolve::ScalarToken for &'me T +impl<'me, 'i, T, SV, BH> resolve::InputValueAs<'i, &'me T, SV, BH> for T where - T: resolve::ScalarToken + ?Sized, + 'i: 'me, + T: resolve::InputValueAsRef + ?Sized, + SV: 'i, + BH: ?Sized, { - fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { + type Error = T::Error; + + fn try_from_input_value(v: &'i graphql::InputValue) -> Result<&'me T, Self::Error> { + T::try_from_input_value(v) + } + + fn try_from_implicit_null() -> Result<&'me T, Self::Error> { + T::try_from_implicit_null() + } +} + +impl<'me, T, SV, BH> resolve::ScalarToken for &'me T +where + T: resolve::ScalarToken + ?Sized, + BH: ?Sized, +{ + fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { T::parse_scalar_token(token) } } -/* -impl<'me, 'i, T, Info, S: 'i> graphql::InputType<'i, Info, S> for &'me T +impl<'me, 'i, T, TI, SV, BH> graphql::InputType<'i, TI, SV, BH> for &'me T where - Self: resolve::Type + resolve::ToInputValue + resolve::InputValue<'i, S>, - Info: ?Sized, + 'i: 'me, + T: graphql::InputTypeAs<'i, Self, TI, SV, BH> + ?Sized + 'me, + TI: ?Sized, + SV: 'i, + BH: ?Sized, { fn assert_input_type() { T::assert_input_type() } -}*/ +} -impl<'me, T, S> graphql::OutputType for &'me T +impl<'me, T, TI, CX, SV, BH> graphql::OutputType for &'me T where - T: graphql::OutputType + ?Sized, + T: graphql::OutputType + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn assert_output_type() { T::assert_output_type() } } -impl<'me, T, S> graphql::Interface for &'me T +impl<'me, 'i, T, TI, CX, SV, BH> graphql::Scalar<'i, TI, CX, SV, BH> for &'me T where - T: graphql::Interface + ?Sized, -{ - fn assert_interface() { - T::assert_interface() - } -} - -impl<'me, T, S> graphql::Object for &'me T -where - T: graphql::Object + ?Sized, -{ - fn assert_object() { - T::assert_object() - } -} - -impl<'me, T, S> graphql::Scalar for &'me T -where - T: graphql::Scalar + ?Sized, + 'i: 'me, + T: graphql::ScalarAs<'i, Self, TI, CX, SV, BH> + ?Sized + 'me, + TI: ?Sized, + CX: ?Sized, + SV: 'i, + BH: ?Sized, { fn assert_scalar() { T::assert_scalar() } } -impl<'me, T, S> graphql::Union for &'me T +impl<'me, T, BH> reflect::BaseType for &'me T where - T: graphql::Union + ?Sized, -{ - fn assert_union() { - T::assert_union() - } -} - -impl<'me, T, S> reflect::BaseType for &'me T -where - T: reflect::BaseType + ?Sized, + T: reflect::BaseType + ?Sized, + BH: ?Sized, { const NAME: reflect::Type = T::NAME; } -impl<'me, T, S> reflect::BaseSubTypes for &'me T +impl<'me, T, BH> reflect::BaseSubTypes for &'me T where - T: reflect::BaseSubTypes + ?Sized, + T: reflect::BaseSubTypes + ?Sized, + BH: ?Sized, { const NAMES: reflect::Types = T::NAMES; } -impl<'me, T, S> reflect::WrappedType for &'me T +impl<'me, T, BH> reflect::WrappedType for &'me T where - T: reflect::WrappedType + ?Sized, + T: reflect::WrappedType + ?Sized, + BH: ?Sized, { const VALUE: reflect::WrappedValue = T::VALUE; } -*/ diff --git a/juniper/src/types/ref_mut.rs b/juniper/src/types/ref_mut.rs index 31a57211..e3911abd 100644 --- a/juniper/src/types/ref_mut.rs +++ b/juniper/src/types/ref_mut.rs @@ -9,221 +9,200 @@ use crate::{ reflect, resolve, Arguments, BoxFuture, ExecutionResult, Executor, Registry, Selection, }; -/* -impl<'me, T, Info, S> resolve::Type for &'me mut T +impl<'me, T, TI, SV, BH> resolve::Type for &'me mut T where - T: resolve::Type + ?Sized, - Info: ?Sized, + T: resolve::Type + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn meta<'r>(registry: &mut Registry<'r, S>, info: &Info) -> MetaType<'r, S> + fn meta<'r>(registry: &mut Registry<'r, SV>, info: &TI) -> MetaType<'r, SV> where - S: 'r, + SV: 'r, { T::meta(registry, info) } } -impl<'me, T, Info> resolve::TypeName for &'me mut T +impl<'me, T, TI, BH> resolve::TypeName for &'me mut T where - T: resolve::TypeName + ?Sized, - Info: ?Sized, + T: resolve::TypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn type_name(info: &Info) -> &str { + fn type_name(info: &TI) -> &str { T::type_name(info) } } -impl<'me, T, Info> resolve::ConcreteTypeName for &'me mut T +impl<'me, T, TI, BH> resolve::ConcreteTypeName for &'me mut T where - T: resolve::ConcreteTypeName + ?Sized, - Info: ?Sized, + T: resolve::ConcreteTypeName + ?Sized, + TI: ?Sized, + BH: ?Sized, { - fn concrete_type_name<'i>(&self, info: &'i Info) -> &'i str { + fn concrete_type_name<'i>(&self, info: &'i TI) -> &'i str { (**self).concrete_type_name(info) } } -impl<'me, T, Info, Ctx, S> resolve::Value for &'me mut T +impl<'me, T, TI, CX, SV, BH> resolve::Value for &'me mut T where - T: resolve::Value + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Value + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value( &self, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_value(selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_value(selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::ValueAsync for &'me mut T +impl<'me, T, TI, CX, SV, BH> resolve::ValueAsync for &'me mut T where - T: resolve::ValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_value_async<'r>( &'r self, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_value_async(selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_value_async(selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::ConcreteValue for &'me mut T +impl<'me, T, TI, CX, SV, BH> resolve::ConcreteValue for &'me mut T where - T: resolve::ConcreteValue + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValue + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value( &self, type_name: &str, - selection_set: Option<&[Selection<'_, S>]>, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_concrete_value(type_name, selection_set, info, executor) + selection_set: Option<&[Selection<'_, SV>]>, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_concrete_value(type_name, selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::ConcreteValueAsync for &'me mut T +impl<'me, T, TI, CX, SV, BH> resolve::ConcreteValueAsync for &'me mut T where - T: resolve::ConcreteValueAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::ConcreteValueAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_concrete_value_async<'r>( &'r self, type_name: &str, - selection_set: Option<&'r [Selection<'_, S>]>, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_concrete_value_async(type_name, selection_set, info, executor) + selection_set: Option<&'r [Selection<'_, SV>]>, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_concrete_value_async(type_name, selection_set, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::Field for &'me mut T +impl<'me, T, TI, CX, SV, BH> resolve::Field for &'me mut T where - T: resolve::Field + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::Field + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field( &self, field_name: &str, - arguments: &Arguments, - info: &Info, - executor: &Executor, - ) -> ExecutionResult { - (**self).resolve_field(field_name, arguments, info, executor) + arguments: &Arguments, + type_info: &TI, + executor: &Executor, + ) -> ExecutionResult { + (**self).resolve_field(field_name, arguments, type_info, executor) } } -impl<'me, T, Info, Ctx, S> resolve::FieldAsync for &'me mut T +impl<'me, T, TI, CX, SV, BH> resolve::FieldAsync for &'me mut T where - T: resolve::FieldAsync + ?Sized, - Info: ?Sized, - Ctx: ?Sized, + T: resolve::FieldAsync + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn resolve_field_async<'r>( &'r self, field_name: &'r str, - arguments: &'r Arguments, - info: &'r Info, - executor: &'r Executor, - ) -> BoxFuture<'r, ExecutionResult> { - (**self).resolve_field_async(field_name, arguments, info, executor) + arguments: &'r Arguments, + type_info: &'r TI, + executor: &'r Executor, + ) -> BoxFuture<'r, ExecutionResult> { + (**self).resolve_field_async(field_name, arguments, type_info, executor) } } -impl<'me, T, S> resolve::ToInputValue for &'me mut T +impl<'me, T, SV, BH> resolve::ToInputValue for &'me mut T where - T: resolve::ToInputValue + ?Sized, + T: resolve::ToInputValue + ?Sized, + BH: ?Sized, { - fn to_input_value(&self) -> graphql::InputValue { + fn to_input_value(&self) -> graphql::InputValue { (**self).to_input_value() } } -impl<'me, T, S> resolve::ScalarToken for &'me mut T +impl<'me, T, SV, BH> resolve::ScalarToken for &'me mut T where - T: resolve::ScalarToken + ?Sized, + T: resolve::ScalarToken + ?Sized, + BH: ?Sized, { - fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { + fn parse_scalar_token(token: ScalarToken<'_>) -> Result> { T::parse_scalar_token(token) } } -impl<'me, T, S> graphql::OutputType for &'me mut T +impl<'me, T, TI, CX, SV, BH> graphql::OutputType for &'me mut T where - T: graphql::OutputType + ?Sized, + T: graphql::OutputType + ?Sized, + TI: ?Sized, + CX: ?Sized, + BH: ?Sized, { fn assert_output_type() { T::assert_output_type() } } -impl<'me, T, S> graphql::Interface for &'me mut T +impl<'me, T, BH> reflect::BaseType for &'me mut T where - T: graphql::Interface + ?Sized, -{ - fn assert_interface() { - T::assert_interface() - } -} - -impl<'me, T, S> graphql::Object for &'me mut T -where - T: graphql::Object + ?Sized, -{ - fn assert_object() { - T::assert_object() - } -} - -impl<'me, T, S> graphql::Scalar for &'me mut T -where - T: graphql::Scalar + ?Sized, -{ - fn assert_scalar() { - T::assert_scalar() - } -} - -impl<'me, T, S> graphql::Union for &'me mut T -where - T: graphql::Union + ?Sized, -{ - fn assert_union() { - T::assert_union() - } -} - -impl<'me, T, S> reflect::BaseType for &'me mut T -where - T: reflect::BaseType + ?Sized, + T: reflect::BaseType + ?Sized, + BH: ?Sized, { const NAME: reflect::Type = T::NAME; } -impl<'me, T, S> reflect::BaseSubTypes for &'me mut T +impl<'me, T, BH> reflect::BaseSubTypes for &'me mut T where - T: reflect::BaseSubTypes + ?Sized, + T: reflect::BaseSubTypes + ?Sized, + BH: ?Sized, { const NAMES: reflect::Types = T::NAMES; } -impl<'me, T, S> reflect::WrappedType for &'me mut T +impl<'me, T, BH> reflect::WrappedType for &'me mut T where - T: reflect::WrappedType + ?Sized, + T: reflect::WrappedType + ?Sized, + BH: ?Sized, { const VALUE: reflect::WrappedValue = T::VALUE; } -*/