chore: Remove ScalarRefValue trait

The trait was introduced while introducing generic scalars, but is not
actually required or useful. It's functionality is fully covered by
methods on the `ScalarValue` trait.

It also forced a lof of for<'a> ScalarRefValue bounds all over the code,
complicating signatures a lot.

It is completely removed now.
This commit is contained in:
Christoph Herzog 2019-11-14 00:40:22 +01:00
parent eb85fefc36
commit 36c71d7162
41 changed files with 137 additions and 521 deletions

View file

@ -5,7 +5,7 @@ use indexmap::IndexMap;
use crate::{
executor::Variables,
parser::Spanning,
value::{DefaultScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ScalarValue},
};
/// A type literal in the syntax tree
@ -152,9 +152,7 @@ pub type Document<'a, S> = Vec<Definition<'a, S>>;
/// Must be implemented manually when manually exposing new enums or scalars.
pub trait FromInputValue<S = DefaultScalarValue>: Sized {
/// Performs the conversion.
fn from_input_value(v: &InputValue<S>) -> Option<Self>
where
for<'b> &'b S: ScalarRefValue<'b>;
fn from_input_value(v: &InputValue<S>) -> Option<Self>;
}
/// Losslessly clones a Rust data type into an InputValue.
@ -316,7 +314,6 @@ where
pub fn convert<T>(&self) -> Option<T>
where
T: FromInputValue<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
<T as FromInputValue<S>>::from_input_value(self)
}
@ -346,30 +343,18 @@ where
}
/// View the underlying int value, if present.
#[deprecated(since = "0.11.0", note = "Use `InputValue::as_scalar_value` instead")]
pub fn as_int_value<'a>(&'a self) -> Option<i32>
where
&'a S: Into<Option<&'a i32>>,
{
self.as_scalar_value().cloned()
pub fn as_int_value<'a>(&'a self) -> Option<i32> {
self.as_scalar_value().and_then(|s| s.as_int())
}
/// View the underlying float value, if present.
#[deprecated(since = "0.11.0", note = "Use `InputValue::as_scalar_value` instead")]
pub fn as_float_value<'a>(&'a self) -> Option<f64>
where
&'a S: Into<Option<&'a f64>>,
{
self.as_scalar_value().cloned()
pub fn as_float_value<'a>(&'a self) -> Option<f64> {
self.as_scalar_value().and_then(|s| s.as_float())
}
/// View the underlying string value, if present.
#[deprecated(since = "0.11.0", note = "Use `InputValue::as_scalar_value` instead")]
pub fn as_string_value<'a>(&'a self) -> Option<&'a str>
where
&'a S: Into<Option<&'a String>>,
{
self.as_scalar_value().map(|s| s as &str)
pub fn as_string_value<'a>(&'a self) -> Option<&'a str> {
self.as_scalar_value().and_then(|s| s.as_str())
}
/// View the underlying scalar value, if present.
@ -459,13 +444,17 @@ where
impl<S> fmt::Display for InputValue<S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
InputValue::Null => write!(f, "null"),
InputValue::Scalar(ref s) if s.is_type::<String>() => write!(f, "\"{}\"", s),
InputValue::Scalar(ref s) => write!(f, "{}", s),
InputValue::Scalar(ref s) => {
if let Some(s) = s.as_str() {
write!(f, "\"{}\"", s)
} else {
write!(f, "{}", s)
}
}
InputValue::Enum(ref v) => write!(f, "{}", v),
InputValue::Variable(ref v) => write!(f, "${}", v),
InputValue::List(ref v) => {

View file

@ -1,7 +1,7 @@
use crate::{
ast::{Directive, Fragment, InputValue, Selection},
parser::Spanning,
value::{ScalarRefValue, ScalarValue},
value::ScalarValue,
};
use std::collections::HashMap;
@ -117,7 +117,6 @@ pub struct LookAheadSelection<'a, S: 'a> {
impl<'a, S> Default for LookAheadSelection<'a, S>
where
S: ScalarValue,
&'a S: ScalarRefValue<'a>,
{
fn default() -> Self {
LookAheadSelection {
@ -132,7 +131,6 @@ where
impl<'a, S> LookAheadSelection<'a, S>
where
S: ScalarValue,
&'a S: ScalarRefValue<'a>,
{
fn should_include<'b, 'c>(
directives: Option<&'b Vec<Spanning<Directive<S>>>>,
@ -157,9 +155,7 @@ where
if let LookAheadValue::Scalar(s) =
LookAheadValue::from_input_value(&v.item, vars)
{
<&S as Into<Option<&bool>>>::into(s)
.cloned()
.unwrap_or(false)
s.as_boolean().unwrap_or(false)
} else {
false
}
@ -174,9 +170,7 @@ where
if let LookAheadValue::Scalar(b) =
LookAheadValue::from_input_value(&v.item, vars)
{
<&S as Into<Option<&bool>>>::into(b)
.map(::std::ops::Not::not)
.unwrap_or(false)
b.as_boolean().map(::std::ops::Not::not).unwrap_or(false)
} else {
false
}
@ -439,14 +433,13 @@ mod tests {
parser::UnlocatedParseResult,
schema::model::SchemaType,
validation::test_harness::{MutationRoot, QueryRoot},
value::{DefaultScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ScalarValue},
};
use std::collections::HashMap;
fn parse_document_source<S>(q: &str) -> UnlocatedParseResult<Document<S>>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
crate::parse_document_source(q, &SchemaType::new::<QueryRoot, MutationRoot>(&(), &()))
}

View file

@ -22,7 +22,7 @@ use crate::schema::{
use crate::{
types::{base::GraphQLType, name::Name},
value::{DefaultScalarValue, ParseScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ParseScalarValue, ScalarValue},
};
mod look_ahead;
@ -235,7 +235,6 @@ impl<S> IntoFieldError<S> for FieldError<S> {
pub trait IntoResolvable<'a, S, T: GraphQLType<S>, C>: Sized
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
#[doc(hidden)]
fn into(self, ctx: &'a C) -> FieldResult<Option<(&'a T::Context, T)>, S>;
@ -246,7 +245,6 @@ where
T: GraphQLType<S>,
S: ScalarValue,
T::Context: FromContext<C>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn into(self, ctx: &'a C) -> FieldResult<Option<(&'a T::Context, T)>, S> {
Ok(Some((FromContext::from(ctx), self)))
@ -258,7 +256,6 @@ where
S: ScalarValue,
T: GraphQLType<S>,
T::Context: FromContext<C>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn into(self, ctx: &'a C) -> FieldResult<Option<(&'a T::Context, T)>, S> {
self.map(|v: T| Some((<T::Context as FromContext<C>>::from(ctx), v)))
@ -270,7 +267,6 @@ impl<'a, S, T, C> IntoResolvable<'a, S, T, C> for (&'a T::Context, T)
where
S: ScalarValue,
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn into(self, _: &'a C) -> FieldResult<Option<(&'a T::Context, T)>, S> {
Ok(Some(self))
@ -281,7 +277,6 @@ impl<'a, S, T, C> IntoResolvable<'a, S, Option<T>, C> for Option<(&'a T::Context
where
S: ScalarValue,
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn into(self, _: &'a C) -> FieldResult<Option<(&'a T::Context, Option<T>)>, S> {
Ok(self.map(|(ctx, v)| (ctx, Some(v))))
@ -292,7 +287,6 @@ impl<'a, S, T, C> IntoResolvable<'a, S, T, C> for FieldResult<(&'a T::Context, T
where
S: ScalarValue,
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn into(self, _: &'a C) -> FieldResult<Option<(&'a T::Context, T)>, S> {
self.map(Some)
@ -304,7 +298,6 @@ impl<'a, S, T, C> IntoResolvable<'a, S, Option<T>, C>
where
S: ScalarValue,
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn into(self, _: &'a C) -> FieldResult<Option<(&'a T::Context, Option<T>)>, S> {
self.map(|o| o.map(|(ctx, v)| (ctx, Some(v))))
@ -352,7 +345,6 @@ where
impl<'a, CtxT, S> Executor<'a, CtxT, S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
/// Resolve a single arbitrary value, mapping the context to a new type
pub fn resolve_with_ctx<NewCtxT, T>(&self, info: &T::TypeInfo, value: &T) -> ExecutionResult<S>
@ -671,7 +663,6 @@ where
S: ScalarValue,
QueryT: GraphQLType<S, Context = CtxT>,
MutationT: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut fragments = vec![];
let mut operation = None;
@ -786,7 +777,6 @@ where
MutationT: crate::GraphQLTypeAsync<S, Context = CtxT> + Send + Sync,
MutationT::TypeInfo: Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut fragments = vec![];
let mut operation = None;
@ -908,7 +898,6 @@ where
pub fn get_type<T>(&mut self, info: &T::TypeInfo) -> Type<'r>
where
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
if let Some(name) = T::name(info) {
let validated_name = name.parse::<Name>().unwrap();
@ -930,7 +919,6 @@ where
pub fn field<T>(&mut self, name: &str, info: &T::TypeInfo) -> Field<'r, S>
where
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
Field {
name: name.to_owned(),
@ -949,7 +937,6 @@ where
) -> Field<'r, S>
where
I: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
Field {
name: name.to_owned(),
@ -964,7 +951,6 @@ where
pub fn arg<T>(&mut self, name: &str, info: &T::TypeInfo) -> Argument<'r, S>
where
T: GraphQLType<S> + FromInputValue<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
Argument::new(name, self.get_type::<T>(info))
}
@ -981,7 +967,6 @@ where
) -> Argument<'r, S>
where
T: GraphQLType<S> + ToInputValue<S> + FromInputValue<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
Argument::new(name, self.get_type::<Option<T>>(info)).default_value(value.to_input_value())
}
@ -999,26 +984,22 @@ where
pub fn build_scalar_type<T>(&mut self, info: &T::TypeInfo) -> ScalarMeta<'r, S>
where
T: FromInputValue<S> + GraphQLType<S> + ParseScalarValue<S> + 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
let name = T::name(info).expect("Scalar types must be named. Implement name()");
ScalarMeta::new::<T>(Cow::Owned(name.to_string()))
}
/// Create a list meta type
pub fn build_list_type<T: GraphQLType<S>>(&mut self, info: &T::TypeInfo) -> ListMeta<'r>
where
for<'b> &'b S: ScalarRefValue<'b>,
{
pub fn build_list_type<T: GraphQLType<S>>(&mut self, info: &T::TypeInfo) -> ListMeta<'r> {
let of_type = self.get_type::<T>(info);
ListMeta::new(of_type)
}
/// Create a nullable meta type
pub fn build_nullable_type<T: GraphQLType<S>>(&mut self, info: &T::TypeInfo) -> NullableMeta<'r>
where
for<'b> &'b S: ScalarRefValue<'b>,
{
pub fn build_nullable_type<T: GraphQLType<S>>(
&mut self,
info: &T::TypeInfo,
) -> NullableMeta<'r> {
let of_type = self.get_type::<T>(info);
NullableMeta::new(of_type)
}
@ -1034,7 +1015,6 @@ where
) -> ObjectMeta<'r, S>
where
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let name = T::name(info).expect("Object types must be named. Implement name()");
@ -1051,7 +1031,6 @@ where
) -> EnumMeta<'r, S>
where
T: FromInputValue<S> + GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let name = T::name(info).expect("Enum types must be named. Implement name()");
@ -1067,7 +1046,6 @@ where
) -> InterfaceMeta<'r, S>
where
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let name = T::name(info).expect("Interface types must be named. Implement name()");
@ -1080,7 +1058,6 @@ where
pub fn build_union_type<T>(&mut self, info: &T::TypeInfo, types: &[Type<'r>]) -> UnionMeta<'r>
where
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let name = T::name(info).expect("Union types must be named. Implement name()");
@ -1095,7 +1072,6 @@ where
) -> InputObjectMeta<'r, S>
where
T: FromInputValue<S> + GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let name = T::name(info).expect("Input object types must be named. Implement name()");

View file

@ -12,7 +12,7 @@ use serde_derive::{Deserialize, Serialize};
use crate::{
ast::InputValue,
executor::ExecutionError,
value::{DefaultScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ScalarValue},
FieldError, GraphQLError, GraphQLType, RootNode, Value, Variables,
};
@ -83,7 +83,6 @@ where
S: ScalarValue,
QueryT: GraphQLType<S, Context = CtxT>,
MutationT: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
GraphQLResponse(crate::execute(
&self.query,
@ -107,7 +106,6 @@ where
MutationT: crate::GraphQLTypeAsync<S, Context = CtxT> + Send + Sync,
MutationT::TypeInfo: Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
let op = self.operation_name();
let vars = &self.variables();

View file

@ -32,7 +32,7 @@ graphql_scalar!(DateTime<FixedOffset> as "DateTimeFixedOffset" where Scalar = <S
}
from_input_value(v: &InputValue) -> Option<DateTime<FixedOffset>> {
v.as_scalar_value::<String>()
v.as_string_value()
.and_then(|s| DateTime::parse_from_rfc3339(s).ok())
}
@ -53,7 +53,7 @@ graphql_scalar!(DateTime<Utc> as "DateTimeUtc" where Scalar = <S>{
}
from_input_value(v: &InputValue) -> Option<DateTime<Utc>> {
v.as_scalar_value::<String>()
v.as_string_value()
.and_then(|s| (s.parse::<DateTime<Utc>>().ok()))
}
@ -79,7 +79,7 @@ graphql_scalar!(NaiveDate where Scalar = <S>{
}
from_input_value(v: &InputValue) -> Option<NaiveDate> {
v.as_scalar_value::<String>()
v.as_string_value()
.and_then(|s| NaiveDate::parse_from_str(s, "%Y-%m-%d").ok())
}
@ -102,8 +102,8 @@ graphql_scalar!(NaiveDateTime where Scalar = <S> {
}
from_input_value(v: &InputValue) -> Option<NaiveDateTime> {
v.as_scalar_value::<f64>()
.and_then(|f| NaiveDateTime::from_timestamp_opt(*f as i64, 0))
v.as_float_value()
.and_then(|f| NaiveDateTime::from_timestamp_opt(f as i64, 0))
}
from_str<'a>(value: ScalarToken<'a>) -> ParseScalarResult<'a, S> {

View file

@ -13,7 +13,7 @@ graphql_scalar!(Url where Scalar = <S>{
}
from_input_value(v: &InputValue) -> Option<Url> {
v.as_scalar_value::<String>()
v.as_string_value()
.and_then(|s| Url::parse(s).ok())
}

View file

@ -14,7 +14,7 @@ graphql_scalar!(Uuid where Scalar = <S> {
}
from_input_value(v: &InputValue) -> Option<Uuid> {
v.as_scalar_value::<String>()
v.as_string_value()
.and_then(|s| Uuid::parse_str(s).ok())
}

View file

@ -170,10 +170,7 @@ pub use crate::{
scalars::{EmptyMutation, ID},
},
validation::RuleError,
value::{
DefaultScalarValue, Object, ParseScalarResult, ParseScalarValue, ScalarRefValue,
ScalarValue, Value,
},
value::{DefaultScalarValue, Object, ParseScalarResult, ParseScalarValue, ScalarValue, Value},
};
/// A pinned, boxed future that can be polled.
@ -204,7 +201,6 @@ pub fn execute<'a, S, CtxT, QueryT, MutationT>(
) -> Result<(Value<S>, Vec<ExecutionError<S>>), GraphQLError<'a>>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
QueryT: GraphQLType<S, Context = CtxT>,
MutationT: GraphQLType<S, Context = CtxT>,
{
@ -246,7 +242,6 @@ where
MutationT: GraphQLTypeAsync<S, Context = CtxT> + Send + Sync,
MutationT::TypeInfo: Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
let document = parse_document_source(document_source, &root_node.schema)?;
{
@ -279,7 +274,6 @@ pub fn introspect<'a, S, CtxT, QueryT, MutationT>(
) -> Result<(Value<S>, Vec<ExecutionError<S>>), GraphQLError<'a>>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
QueryT: GraphQLType<S, Context = CtxT>,
MutationT: GraphQLType<S, Context = CtxT>,
{

View file

@ -32,7 +32,6 @@ macro_rules! __juniper_impl_trait {
impl<$($other,)* $generic $(: $bound)*> $crate::$impl_trait<$generic> for $name
where
$generic: $crate::ScalarValue,
for<'__b> &'__b $generic: $crate::ScalarRefValue<'__b>,
{
$($body)*
}
@ -48,7 +47,6 @@ macro_rules! __juniper_impl_trait {
where
$($where)*
$generic: $crate::ScalarValue,
for<'__b> &'__b $generic: $crate::ScalarRefValue<'__b>,
{
$($body)*
}

View file

@ -145,7 +145,7 @@ macro_rules! graphql_interface {
info: &Self::TypeInfo,
registry: &mut $crate::Registry<'r, $crate::__juniper_insert_generic!($($scalar)+)>
) -> $crate::meta::MetaType<'r, $crate::__juniper_insert_generic!($($scalar)+)>
where for<'__b> &'__b $crate::__juniper_insert_generic!($($scalar)+): $crate::ScalarRefValue<'__b>,
where
$crate::__juniper_insert_generic!($($scalar)+): 'r
{
// Ensure all child types are registered

View file

@ -8,8 +8,6 @@ mod object;
mod interface;
#[macro_use]
mod scalar;
#[macro_use]
mod union;
#[cfg(test)]
mod tests;

View file

@ -361,7 +361,7 @@ macro_rules! graphql_object {
info: &Self::TypeInfo,
registry: &mut $crate::Registry<'r, $crate::__juniper_insert_generic!($($scalar)+)>
) -> $crate::meta::MetaType<'r, $crate::__juniper_insert_generic!($($scalar)+)>
where for<'__b> &'__b $crate::__juniper_insert_generic!($($scalar)+): $crate::ScalarRefValue<'__b>,
where
$crate::__juniper_insert_generic!($($scalar)+): 'r
{
let fields = &[$(

View file

@ -90,7 +90,7 @@ macro_rules! graphql_scalar {
info: &Self::TypeInfo,
registry: &mut $crate::Registry<'r, $crate::__juniper_insert_generic!($($scalar)+)>
) -> $crate::meta::MetaType<'r, $crate::__juniper_insert_generic!($($scalar)+)>
where for<'__b> &'__b $crate::__juniper_insert_generic!($($scalar)+): $crate::ScalarRefValue<'__b>,
where
$crate::__juniper_insert_generic!($($scalar)+): 'r
{
let meta = registry.build_scalar_type::<Self>(info);
@ -390,7 +390,7 @@ macro_rules! graphql_scalar {
info: &Self::TypeInfo,
registry: &mut $crate::Registry<'r, $crate::__juniper_insert_generic!($($scalar)+)>
) -> $crate::meta::MetaType<'r, $crate::__juniper_insert_generic!($($scalar)+)>
where for<'__b> &'__b $crate::__juniper_insert_generic!($($scalar)+): $crate::ScalarRefValue<'__b>,
where
$crate::__juniper_insert_generic!($($scalar)+): 'r
{
let meta = registry.build_scalar_type::<Self>(info);

View file

@ -73,17 +73,17 @@ impl Root {
0
}
// TODO: enable once [parameter attributes are supported by proc macros]
// (https://github.com/graphql-rust/juniper/pull/441)
// fn attr_arg_descr(
// #[graphql(description = "The arg")]
// arg: i32) -> i32
// { 0 }
// fn attr_arg_descr_collapse(
// #[graphql(description = "The first arg")]
// #[graphql(description = "and more details")]
// arg: i32,
// ) -> i32 { 0 }
// TODO: enable once [parameter attributes are supported by proc macros]
// (https://github.com/graphql-rust/juniper/pull/441)
// fn attr_arg_descr(
// #[graphql(description = "The arg")]
// arg: i32) -> i32
// { 0 }
// fn attr_arg_descr_collapse(
// #[graphql(description = "The first arg")]
// #[graphql(description = "and more details")]
// arg: i32,
// ) -> i32 { 0 }
#[graphql(arguments(arg(default = 123,),))]
fn arg_with_default(arg: i32) -> i32 {

View file

@ -27,7 +27,7 @@ graphql_scalar!(DefaultName where Scalar = <S> {
}
from_input_value(v: &InputValue) -> Option<DefaultName> {
v.as_scalar_value::<i32>().map(|i| DefaultName(*i))
v.as_scalar_value().and_then(|s| s.as_int()).map(|i| DefaultName(i))
}
from_str<'a>(value: ScalarToken<'a>) -> ParseScalarResult<'a, S> {

View file

@ -1,143 +0,0 @@
/*
*
/**
Expose GraphQL unions
Like interfaces, mapping unions can be tricky in idiomatic Rust. Because of
their similarity, the helper macros are similar, too: you provide a set of
expressions that resolve the union into the actual concrete type.
## Syntax
See the documentation for [`graphql_object!`][1] on the general item and type
syntax. `graphql_union!` supports only `description` and `interface_resolvers`
items, no fields or interfaces can be declared.
See the documentation for [`graphql_interface!`][2] on the syntax for interface
resolvers.
[1]: macro.graphql_object!.html
[2]: macro.graphql_interface!.html
*/
#[macro_export]
macro_rules! graphql_union {
(
@generate,
meta = {
lifetimes = [$($lifetimes:tt,)*],
name = $name:ty,
ctx = $ctx:ty,
main_self = $main_self:ident,
outname = {$($outname:tt)*},
scalar = {$($scalar:tt)*},
$(description = $desciption:tt,)*
additional = {
resolver = {
$(context = $resolver_ctx: ident,)*
items = [
$({
src = $resolver_src: ty,
resolver = $resolver_expr: expr,
},)*
],
},
},
},
items = [],
) => {
$crate::__juniper_impl_trait!(
impl<$($scalar)* $(, $lifetimes)* > GraphQLType for $name {
type Context = $ctx;
type TypeInfo = ();
fn name(_ : &Self::TypeInfo) -> Option<&str> {
Some($($outname)*)
}
fn meta<'r>(
info: &Self::TypeInfo,
registry: &mut $crate::Registry<'r, $crate::__juniper_insert_generic!($($scalar)+)>
) -> $crate::meta::MetaType<'r, $crate::__juniper_insert_generic!($($scalar)+)>
where for<'__b> &'__b $crate::__juniper_insert_generic!($($scalar)+): $crate::ScalarRefValue<'__b>,
$crate::__juniper_insert_generic!($($scalar)+): 'r
{
let types = &[
$(
registry.get_type::<$resolver_src>(&()),
)*
];
registry.build_union_type::<$name>(
info, types
)
$(.description($desciption))*
.into_meta()
}
#[allow(unused_variables)]
fn concrete_type_name(&$main_self, context: &Self::Context, _info: &Self::TypeInfo) -> String {
$(let $resolver_ctx = &context;)*
$(
if ($resolver_expr as ::std::option::Option<$resolver_src>).is_some() {
return
<$resolver_src as $crate::GraphQLType<_>>::name(&()).unwrap().to_owned();
}
)*
panic!("Concrete type not handled by instance resolvers on {}", $($outname)*);
}
fn resolve_into_type(
&$main_self,
_info: &Self::TypeInfo,
type_name: &str,
_: Option<&[$crate::Selection<$crate::__juniper_insert_generic!($($scalar)*)>]>,
executor: &$crate::Executor<Self::Context, $crate::__juniper_insert_generic!($($scalar)*)>,
) -> $crate::ExecutionResult<$crate::__juniper_insert_generic!($($scalar)*)> {
$(let $resolver_ctx = &executor.context();)*
$(
if type_name == (<$resolver_src as $crate::GraphQLType<_>>::name(&())).unwrap() {
return executor.resolve(&(), &$resolver_expr);
}
)*
panic!("Concrete type not handled by instance resolvers on {}", $($outname)*);
}
}
);
};
(
@parse,
meta = {$($meta:tt)*},
rest = $($rest:tt)*
) => {
$crate::__juniper_parse_field_list!(
success_callback = graphql_union,
additional_parser = {
callback = __juniper_parse_instance_resolver,
header = {},
},
meta = {$($meta)*},
items = [],
rest = $($rest)*
);
};
(@$($stuff:tt)*) => {
compile_error!("Invalid syntax for `graphql_union!`");
};
($($rest: tt)*) => {
$crate::__juniper_parse_object_header!(
callback = graphql_union,
rest = $($rest)*
);
};
}
*/

View file

@ -6,13 +6,12 @@ use crate::{
schema::model::SchemaType,
types::scalars::EmptyMutation,
validation::test_harness::{MutationRoot, QueryRoot},
value::{DefaultScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ScalarValue},
};
fn parse_document<S>(s: &str) -> Document<S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
parse_document_source(s, &SchemaType::new::<QueryRoot, MutationRoot>(&(), &()))
.expect(&format!("Parse error on input {:#?}", s))
@ -21,7 +20,6 @@ where
fn parse_document_error<'a, S>(s: &'a str) -> Spanning<ParseError<'a>>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
match parse_document_source::<S>(s, &SchemaType::new::<QueryRoot, MutationRoot>(&(), &())) {
Ok(doc) => panic!("*No* parse error on input {:#?} =>\n{:#?}", s, doc),

View file

@ -7,7 +7,7 @@ use juniper_codegen::{
use crate::{
ast::{FromInputValue, InputValue, Type},
parser::{value::parse_value_literal, Lexer, Parser, SourcePosition, Spanning},
value::{DefaultScalarValue, ParseScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ParseScalarValue, ScalarValue},
};
use crate::{
@ -72,7 +72,6 @@ where
fn parse_value<S>(s: &str, meta: &MetaType<S>) -> Spanning<InputValue<S>>
where
S: ScalarValue,
for<'a> &'a S: ScalarRefValue<'a>,
{
let mut lexer = Lexer::new(s);
let mut parser = Parser::new(&mut lexer).expect(&format!("Lexer error on input {:#?}", s));

View file

@ -10,7 +10,7 @@ use crate::{
parser::{ParseError, ScalarToken},
schema::model::SchemaType,
types::base::TypeKind,
value::{DefaultScalarValue, ParseScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ParseScalarValue, ScalarValue},
};
/// Whether an item is deprecated, with context.
@ -395,7 +395,6 @@ where
pub fn new<T>(name: Cow<'a, str>) -> Self
where
T: FromInputValue<S> + ParseScalarValue<S> + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
{
ScalarMeta {
name,
@ -491,7 +490,6 @@ where
pub fn new<T>(name: Cow<'a, str>, values: &[EnumValue]) -> Self
where
T: FromInputValue<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
EnumMeta {
name,
@ -575,9 +573,7 @@ where
{
/// Build a new input type with the specified name and input fields
pub fn new<T: FromInputValue<S>>(name: Cow<'a, str>, input_fields: &[Argument<'a, S>]) -> Self
where
for<'b> &'b S: ScalarRefValue<'b>,
{
where {
InputObjectMeta {
name,
description: None,
@ -765,7 +761,6 @@ impl<'a, S: fmt::Debug> fmt::Debug for InputObjectMeta<'a, S> {
fn try_parse_fn<S, T>(v: &InputValue<S>) -> bool
where
T: FromInputValue<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
<T as FromInputValue<S>>::from_input_value(v).is_some()
}

View file

@ -9,7 +9,7 @@ use crate::{
executor::{Context, Registry},
schema::meta::{Argument, InterfaceMeta, MetaType, ObjectMeta, PlaceholderMeta, UnionMeta},
types::{base::GraphQLType, name::Name},
value::{DefaultScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ScalarValue},
};
/// Root query node of a schema
@ -20,7 +20,6 @@ use crate::{
pub struct RootNode<'a, QueryT: GraphQLType<S>, MutationT: GraphQLType<S>, S = DefaultScalarValue>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
#[doc(hidden)]
pub query_type: QueryT,
@ -80,16 +79,12 @@ where
S: ScalarValue + 'a,
QueryT: GraphQLType<S, TypeInfo = ()>,
MutationT: GraphQLType<S, TypeInfo = ()>,
for<'b> &'b S: ScalarRefValue<'b>,
{
/// Construct a new root node from query and mutation nodes
///
/// If the schema should not support mutations, use the
/// `new` constructor instead.
pub fn new(query_obj: QueryT, mutation_obj: MutationT) -> Self
where
for<'b> &'b S: ScalarRefValue<'b>,
{
pub fn new(query_obj: QueryT, mutation_obj: MutationT) -> Self {
RootNode::new_with_info(query_obj, mutation_obj, (), ())
}
}
@ -99,7 +94,6 @@ where
QueryT: GraphQLType<S>,
MutationT: GraphQLType<S>,
S: ScalarValue + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
{
/// Construct a new root node from query and mutation nodes,
/// while also providing type info objects for the query and
@ -109,10 +103,7 @@ where
mutation_obj: MutationT,
query_info: QueryT::TypeInfo,
mutation_info: MutationT::TypeInfo,
) -> Self
where
for<'b> &'b S: ScalarRefValue<'b>,
{
) -> Self {
RootNode {
query_type: query_obj,
mutation_type: mutation_obj,
@ -132,7 +123,6 @@ impl<'a, S> SchemaType<'a, S> {
S: ScalarValue + 'a,
QueryT: GraphQLType<S>,
MutationT: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut directives = FnvHashMap::default();
let query_type_name: String;
@ -425,7 +415,6 @@ where
fn new_skip(registry: &mut Registry<'a, S>) -> DirectiveType<'a, S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
Self::new(
"skip",
@ -441,7 +430,6 @@ where
fn new_include(registry: &mut Registry<'a, S>) -> DirectiveType<'a, S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
Self::new(
"include",

View file

@ -2,7 +2,7 @@ use crate::{
ast::Selection,
executor::{ExecutionResult, Executor, Registry},
types::base::{Arguments, GraphQLType, TypeKind},
value::{ScalarRefValue, ScalarValue, Value},
value::{ScalarValue, Value},
};
use crate::schema::{
@ -18,7 +18,6 @@ where
S: ScalarValue,
QueryT: GraphQLType<S, Context = CtxT>,
MutationT: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = CtxT;
type TypeInfo = QueryT::TypeInfo;
@ -30,7 +29,6 @@ where
fn meta<'r>(info: &QueryT::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
QueryT::meta(info, registry)
}
@ -86,7 +84,6 @@ where
MutationT: crate::GraphQLTypeAsync<S, Context = CtxT>,
MutationT::TypeInfo: Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn resolve_field_async<'b>(
&'b self,

View file

@ -7,7 +7,7 @@ use crate::{
base::{Arguments, GraphQLType},
scalars::EmptyMutation,
},
value::{ScalarRefValue, ScalarValue, Value},
value::{ScalarValue, Value},
};
pub struct NodeTypeInfo {
@ -22,7 +22,6 @@ pub struct Node {
impl<S> GraphQLType<S> for Node
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = NodeTypeInfo;

View file

@ -1,6 +1,6 @@
use crate::{
ast::{Directive, FromInputValue, InputValue, Selection},
value::{Object, ScalarRefValue, ScalarValue, Value},
value::{Object, ScalarValue, Value},
};
use crate::{
@ -17,7 +17,6 @@ where
Self::Context: Send + Sync,
Self::TypeInfo: Send + Sync,
S: ScalarValue + Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn resolve_field_async<'a>(
&'a self,
@ -75,7 +74,6 @@ where
S: ScalarValue + Send + Sync,
CtxT: Send + Sync,
'e: 'a,
for<'b> &'b S: ScalarRefValue<'b>,
{
Box::pin(resolve_selection_set_into_async_recursive(
instance,
@ -107,7 +105,6 @@ where
T::TypeInfo: Send + Sync,
S: ScalarValue + Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
use futures::stream::{FuturesOrdered, StreamExt};

View file

@ -5,7 +5,7 @@ use juniper_codegen::GraphQLEnumInternal as GraphQLEnum;
use crate::{
ast::{Directive, FromInputValue, InputValue, Selection},
executor::Variables,
value::{DefaultScalarValue, Object, ScalarRefValue, ScalarValue, Value},
value::{DefaultScalarValue, Object, ScalarValue, Value},
};
use crate::{
@ -116,7 +116,6 @@ where
pub fn get<T>(&self, key: &str) -> Option<T>
where
T: FromInputValue<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
match self.args {
Some(ref args) => match args.get(key) {
@ -238,7 +237,6 @@ impl GraphQLType for User
pub trait GraphQLType<S = DefaultScalarValue>: Sized
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
/// The expected context type for this GraphQL type
///
@ -353,7 +351,6 @@ pub(crate) fn resolve_selection_set_into<T, CtxT, S>(
where
T: GraphQLType<S, Context = CtxT>,
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
let meta_type = executor
.schema()
@ -505,7 +502,6 @@ pub(super) fn is_excluded<S>(
) -> bool
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
if let Some(ref directives) = *directives {
for &Spanning {

View file

@ -1,7 +1,7 @@
use crate::{
ast::{FromInputValue, InputValue, Selection, ToInputValue},
schema::meta::MetaType,
value::{ScalarRefValue, ScalarValue, Value},
value::{ScalarValue, Value},
};
use crate::{
@ -13,7 +13,6 @@ impl<S, T, CtxT> GraphQLType<S> for Option<T>
where
S: ScalarValue,
T: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = CtxT;
type TypeInfo = T::TypeInfo;
@ -25,7 +24,6 @@ where
fn meta<'r>(info: &T::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
registry.build_nullable_type::<T>(info).into_meta()
}
@ -48,10 +46,7 @@ where
T: FromInputValue<S>,
S: ScalarValue,
{
fn from_input_value<'a>(v: &'a InputValue<S>) -> Option<Option<T>>
where
for<'b> &'b S: ScalarRefValue<'b>,
{
fn from_input_value<'a>(v: &'a InputValue<S>) -> Option<Option<T>> {
match v {
&InputValue::Null => Some(None),
v => match v.convert() {
@ -79,7 +74,6 @@ impl<S, T, CtxT> GraphQLType<S> for Vec<T>
where
T: GraphQLType<S, Context = CtxT>,
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = CtxT;
type TypeInfo = T::TypeInfo;
@ -91,7 +85,6 @@ where
fn meta<'r>(info: &T::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
registry.build_list_type::<T>(info).into_meta()
}
@ -112,9 +105,7 @@ where
S: ScalarValue,
{
fn from_input_value<'a>(v: &'a InputValue<S>) -> Option<Vec<T>>
where
for<'b> &'b S: ScalarRefValue<'b>,
{
where {
match *v {
InputValue::List(ref ls) => {
let v: Vec<_> = ls.iter().filter_map(|i| i.item.convert()).collect();
@ -150,7 +141,6 @@ impl<'a, S, T, CtxT> GraphQLType<S> for &'a [T]
where
S: ScalarValue,
T: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = CtxT;
type TypeInfo = T::TypeInfo;
@ -162,7 +152,6 @@ where
fn meta<'r>(info: &T::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
registry.build_list_type::<T>(info).into_meta()
}
@ -196,7 +185,6 @@ where
S: ScalarValue,
I: Iterator<Item = T> + ExactSizeIterator,
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
let stop_on_null = executor
.current_type()
@ -230,7 +218,6 @@ where
T: crate::GraphQLTypeAsync<S>,
T::TypeInfo: Send + Sync,
T::Context: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
use futures::stream::{FuturesOrdered, StreamExt};
use std::iter::FromIterator;
@ -263,7 +250,6 @@ where
T::TypeInfo: Send + Sync,
S: ScalarValue + Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn resolve_async<'a>(
&'a self,
@ -283,7 +269,6 @@ where
T::TypeInfo: Send + Sync,
S: ScalarValue + Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn resolve_async<'a>(
&'a self,
@ -303,7 +288,6 @@ where
T::TypeInfo: Send + Sync,
S: ScalarValue + Send + Sync,
CtxT: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn resolve_async<'a>(
&'a self,

View file

@ -5,14 +5,13 @@ use crate::{
executor::{ExecutionResult, Executor, Registry},
schema::meta::MetaType,
types::base::{Arguments, GraphQLType},
value::{ScalarRefValue, ScalarValue, Value},
value::{ScalarValue, Value},
};
impl<S, T, CtxT> GraphQLType<S> for Box<T>
where
S: ScalarValue,
T: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = CtxT;
type TypeInfo = T::TypeInfo;
@ -24,7 +23,6 @@ where
fn meta<'r>(info: &T::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
T::meta(info, registry)
}
@ -64,10 +62,7 @@ where
S: ScalarValue,
T: FromInputValue<S>,
{
fn from_input_value<'a>(v: &'a InputValue<S>) -> Option<Box<T>>
where
for<'b> &'b S: ScalarRefValue<'b>,
{
fn from_input_value<'a>(v: &'a InputValue<S>) -> Option<Box<T>> {
match <T as FromInputValue<S>>::from_input_value(v) {
Some(v) => Some(Box::new(v)),
None => None,
@ -89,7 +84,6 @@ impl<'e, S, T, CtxT> GraphQLType<S> for &'e T
where
S: ScalarValue,
T: GraphQLType<S, Context = CtxT>,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = CtxT;
type TypeInfo = T::TypeInfo;
@ -101,7 +95,6 @@ where
fn meta<'r>(info: &T::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
T::meta(info, registry)
}
@ -143,7 +136,6 @@ where
T: crate::GraphQLTypeAsync<S>,
T::TypeInfo: Send + Sync,
T::Context: Send + Sync,
for<'c> &'c S: ScalarRefValue<'c>,
{
fn resolve_field_async<'b>(
&'b self,
@ -179,7 +171,6 @@ impl<S, T> GraphQLType<S> for Arc<T>
where
S: ScalarValue,
T: GraphQLType<S>,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = T::Context;
type TypeInfo = T::TypeInfo;
@ -191,7 +182,6 @@ where
fn meta<'r>(info: &T::TypeInfo, registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
T::meta(info, registry)
}

View file

@ -7,7 +7,7 @@ use crate::{
parser::{LexerError, ParseError, ScalarToken, Token},
schema::meta::MetaType,
types::base::GraphQLType,
value::{ParseScalarResult, ScalarRefValue, ScalarValue, Value},
value::{ParseScalarResult, ScalarValue, Value},
};
/// An ID as defined by the GraphQL specification
@ -169,7 +169,6 @@ where
impl<'a, S> GraphQLType<S> for &'a str
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -181,7 +180,6 @@ where
fn meta<'r>(_: &(), registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
registry.build_scalar_type::<String>(&()).into_meta()
}
@ -200,7 +198,6 @@ where
impl<'e, S> crate::GraphQLTypeAsync<S> for &'e str
where
S: ScalarValue + Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn resolve_async<'a>(
&'a self,
@ -314,7 +311,6 @@ unsafe impl<T> Send for EmptyMutation<T> {}
impl<S, T> GraphQLType<S> for EmptyMutation<T>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = T;
type TypeInfo = ();
@ -326,7 +322,6 @@ where
fn meta<'r>(_: &(), registry: &mut Registry<'r, S>) -> MetaType<'r, S>
where
S: 'r,
for<'b> &'b S: ScalarRefValue<'b>,
{
registry.build_object_type::<Self>(&(), &[]).into_meta()
}
@ -340,7 +335,6 @@ where
Self::TypeInfo: Send + Sync,
Self::Context: Send + Sync,
T: Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
}

View file

@ -9,7 +9,7 @@ use crate::{
model::{SchemaType, TypeType},
},
validation::RuleError,
value::{ScalarRefValue, ScalarValue},
value::ScalarValue,
};
#[derive(Debug)]
@ -26,7 +26,6 @@ pub fn validate_input_values<S>(
) -> Vec<RuleError>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut errs = vec![];
@ -49,7 +48,6 @@ fn validate_var_defs<S>(
errors: &mut Vec<RuleError>,
) where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
for &(ref name, ref def) in var_defs.iter() {
let raw_type_name = def.var_type.item.innermost_name();
@ -91,7 +89,6 @@ fn unify_value<'a, S>(
) -> Vec<RuleError>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut errors: Vec<RuleError> = vec![];
@ -222,12 +219,13 @@ fn unify_enum<'a, S>(
) -> Vec<RuleError>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut errors: Vec<RuleError> = vec![];
match *value {
InputValue::Scalar(ref scalar) if scalar.is_type::<String>() => {
if let Some(ref name) = <&S as Into<Option<&String>>>::into(scalar) {
// TODO: avoid this bad duplicate as_str() call. (value system refactor)
InputValue::Scalar(ref scalar) if scalar.as_str().is_some() => {
if let Some(ref name) = scalar.as_str() {
if !meta.values.iter().any(|ev| &ev.name == *name) {
errors.push(unification_error(
var_name,
@ -268,7 +266,6 @@ fn unify_input_object<'a, S>(
) -> Vec<RuleError>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
let mut errors: Vec<RuleError> = vec![];

View file

@ -752,7 +752,7 @@ mod tests {
expect_fails_rule, expect_fails_rule_with_schema, expect_passes_rule,
expect_passes_rule_with_schema, RuleError,
},
value::{DefaultScalarValue, ScalarRefValue, ScalarValue},
value::{DefaultScalarValue, ScalarValue},
};
#[test]
@ -1379,7 +1379,6 @@ mod tests {
impl<S> GraphQLType<S> for SomeBox
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1405,7 +1404,6 @@ mod tests {
impl<S> GraphQLType<S> for StringBox
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1437,7 +1435,6 @@ mod tests {
impl<S> GraphQLType<S> for IntBox
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1469,7 +1466,6 @@ mod tests {
impl<S> GraphQLType<S> for NonNullStringBox1
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1491,7 +1487,6 @@ mod tests {
impl<S> GraphQLType<S> for NonNullStringBox1Impl
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1523,7 +1518,6 @@ mod tests {
impl<S> GraphQLType<S> for NonNullStringBox2
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1545,7 +1539,6 @@ mod tests {
impl<S> GraphQLType<S> for NonNullStringBox2Impl
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1577,7 +1570,6 @@ mod tests {
impl<S> GraphQLType<S> for Node
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1602,7 +1594,6 @@ mod tests {
impl<S> GraphQLType<S> for Edge
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1624,7 +1615,6 @@ mod tests {
impl<S> GraphQLType<S> for Connection
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -1646,7 +1636,6 @@ mod tests {
impl<S> GraphQLType<S> for QueryRoot
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();

View file

@ -10,7 +10,7 @@ use crate::{
},
types::{base::GraphQLType, scalars::ID},
validation::{visit, MultiVisitorNil, RuleError, ValidatorContext, Visitor},
value::{ScalarRefValue, ScalarValue},
value::ScalarValue,
};
struct Being;
@ -68,7 +68,6 @@ struct ComplexInput {
impl<S> GraphQLType<S> for Being
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -92,7 +91,6 @@ where
impl<S> GraphQLType<S> for Pet
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -116,7 +114,6 @@ where
impl<S> GraphQLType<S> for Canine
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -140,7 +137,6 @@ where
impl<S> GraphQLType<S> for DogCommand
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -170,10 +166,7 @@ impl<S> FromInputValue<S> for DogCommand
where
S: ScalarValue,
{
fn from_input_value<'a>(v: &InputValue<S>) -> Option<DogCommand>
where
for<'b> &'b S: ScalarRefValue<'b>,
{
fn from_input_value<'a>(v: &InputValue<S>) -> Option<DogCommand> {
match v.as_enum_value() {
Some("SIT") => Some(DogCommand::Sit),
Some("HEEL") => Some(DogCommand::Heel),
@ -186,7 +179,6 @@ where
impl<S> GraphQLType<S> for Dog
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -232,7 +224,6 @@ where
impl<S> GraphQLType<S> for FurColor
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -263,12 +254,7 @@ impl<S> FromInputValue<S> for FurColor
where
S: ScalarValue,
{
fn from_input_value<'a>(v: &InputValue<S>) -> Option<FurColor>
where
// S: 'a,
// &'a S: ScalarRefValue<'a>,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn from_input_value<'a>(v: &InputValue<S>) -> Option<FurColor> {
match v.as_enum_value() {
Some("BROWN") => Some(FurColor::Brown),
Some("BLACK") => Some(FurColor::Black),
@ -282,7 +268,6 @@ where
impl<S> GraphQLType<S> for Cat
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -315,7 +300,6 @@ where
impl<S> GraphQLType<S> for CatOrDog
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -337,7 +321,6 @@ where
impl<S> GraphQLType<S> for Intelligent
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -359,7 +342,6 @@ where
impl<S> GraphQLType<S> for Human
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -393,7 +375,6 @@ where
impl<S> GraphQLType<S> for Alien
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -427,7 +408,6 @@ where
impl<S> GraphQLType<S> for DogOrHuman
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -449,7 +429,6 @@ where
impl<S> GraphQLType<S> for HumanOrAlien
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -471,7 +450,6 @@ where
impl<S> GraphQLType<S> for ComplexInput
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -502,11 +480,7 @@ impl<S> FromInputValue<S> for ComplexInput
where
S: ScalarValue,
{
fn from_input_value<'a>(v: &InputValue<S>) -> Option<ComplexInput>
where
for<'b> &'b S: ScalarRefValue<'b>, // S: 'a,
// &'a S: ScalarRefValue<'a>
{
fn from_input_value<'a>(v: &InputValue<S>) -> Option<ComplexInput> {
let obj = match v.to_object_value() {
Some(o) => o,
None => return None,
@ -528,7 +502,6 @@ where
impl<S> GraphQLType<S> for ComplicatedArgs
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -592,7 +565,6 @@ where
impl<S> GraphQLType<S> for QueryRoot
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -626,7 +598,6 @@ where
impl<S> GraphQLType<S> for MutationRoot
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
type Context = ();
type TypeInfo = ();
@ -656,7 +627,6 @@ where
pub fn validate<'a, Q, M, V, F, S>(r: Q, m: M, q: &'a str, factory: F) -> Vec<RuleError>
where
for<'b> &'b S: ScalarRefValue<'b>,
S: ScalarValue + 'a,
Q: GraphQLType<S, TypeInfo = ()>,
M: GraphQLType<S, TypeInfo = ()>,
@ -709,7 +679,6 @@ where
pub fn expect_passes_rule<'a, V, F, S>(factory: F, q: &'a str)
where
S: ScalarValue + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
V: Visitor<'a, S> + 'a,
F: Fn() -> V,
{
@ -719,7 +688,6 @@ where
pub fn expect_passes_rule_with_schema<'a, Q, M, V, F, S>(r: Q, m: M, factory: F, q: &'a str)
where
S: ScalarValue + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
Q: GraphQLType<S, TypeInfo = ()>,
M: GraphQLType<S, TypeInfo = ()>,
V: Visitor<'a, S> + 'a,
@ -736,7 +704,6 @@ where
pub fn expect_fails_rule<'a, V, F, S>(factory: F, q: &'a str, expected_errors: &[RuleError])
where
S: ScalarValue + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
V: Visitor<'a, S> + 'a,
F: Fn() -> V,
{
@ -751,7 +718,6 @@ pub fn expect_fails_rule_with_schema<'a, Q, M, V, F, S>(
expected_errors: &[RuleError],
) where
S: ScalarValue + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
Q: GraphQLType<S, TypeInfo = ()>,
M: GraphQLType<S, TypeInfo = ()>,
V: Visitor<'a, S> + 'a,

View file

@ -7,9 +7,7 @@ mod scalar;
pub use self::object::Object;
pub use self::scalar::{
DefaultScalarValue, ParseScalarResult, ParseScalarValue, ScalarRefValue, ScalarValue,
};
pub use self::scalar::{DefaultScalarValue, ParseScalarResult, ParseScalarValue, ScalarValue};
/// Serializable value returned from query and field execution.
///
@ -104,12 +102,12 @@ where
}
/// View the underlying float value, if present.
#[deprecated(since = "0.11.0", note = "Use `Value::as_scalar_value` instead")]
pub fn as_float_value(&self) -> Option<f64>
where
for<'a> &'a S: ScalarRefValue<'a>,
{
self.as_scalar_value::<f64>().cloned()
where {
match self {
Value::Scalar(ref s) => s.as_float(),
_ => None,
}
}
/// View the underlying object value, if present.
@ -155,7 +153,6 @@ where
}
/// View the underlying string value, if present.
#[deprecated(since = "0.11.0", note = "Use `Value::as_scalar_value` instead")]
pub fn as_string_value<'a>(&'a self) -> Option<&'a str>
where
Option<&'a String>: From<&'a S>,

View file

@ -63,6 +63,13 @@ pub trait ParseScalarValue<S = DefaultScalarValue> {
/// }
/// }
///
/// fn as_str(&self) -> Option<&str> {
/// match *self {
/// MyScalarValue::String(ref s) => Some(s.as_str()),
/// _ => None,
/// }
/// }
///
/// fn as_float(&self) -> Option<f64> {
/// match *self {
/// MyScalarValue::Int(ref i) => Some(*i as f64),
@ -157,19 +164,7 @@ pub trait ParseScalarValue<S = DefaultScalarValue> {
/// # fn main() {}
/// ```
pub trait ScalarValue:
Debug
+ Display
+ PartialEq
+ Clone
+ Serialize
+ From<String>
+ From<bool>
+ From<i32>
+ From<f64>
+ Into<Option<bool>>
+ Into<Option<i32>>
+ Into<Option<f64>>
+ Into<Option<String>>
Debug + Display + PartialEq + Clone + Serialize + From<String> + From<bool> + From<i32> + From<f64>
{
/// Serde visitor used to deserialize this scalar value
type Visitor: for<'de> de::Visitor<'de, Value = Self> + Default;
@ -206,6 +201,12 @@ pub trait ScalarValue:
/// scalar values
fn as_string(&self) -> Option<String>;
/// Convert the given scalar value into a string value
///
/// This function is used for implementing `GraphQLType` for `String` for all
/// scalar values
fn as_str(&self) -> Option<&str>;
/// Convert the given scalar value into a float value
///
/// This function is used for implementing `GraphQLType` for `f64` for all
@ -221,33 +222,6 @@ pub trait ScalarValue:
fn as_boolean(&self) -> Option<bool>;
}
/// A marker trait extending the [`ScalarValue`](../trait.ScalarValue.html) trait
///
/// This trait should not be relied on directly by most apps. However, you may
/// need a where clause in the form of `for<'b> &'b S: ScalarRefValue<'b>` to
/// abstract over different scalar value types.
///
/// This is automatically implemented for a type as soon as the type implements
/// `ScalarValue` and the additional conversations.
pub trait ScalarRefValue<'a>:
Debug
+ Into<Option<&'a bool>>
+ Into<Option<&'a i32>>
+ Into<Option<&'a String>>
+ Into<Option<&'a f64>>
{
}
impl<'a, T> ScalarRefValue<'a> for &'a T
where
T: ScalarValue,
&'a T: Into<Option<&'a bool>>
+ Into<Option<&'a i32>>
+ Into<Option<&'a String>>
+ Into<Option<&'a f64>>,
{
}
/// The default scalar value representation in juniper
///
/// This types closely follows the graphql specification.
@ -270,13 +244,6 @@ impl ScalarValue for DefaultScalarValue {
}
}
fn as_string(&self) -> Option<String> {
match *self {
DefaultScalarValue::String(ref s) => Some(s.clone()),
_ => None,
}
}
fn as_float(&self) -> Option<f64> {
match *self {
DefaultScalarValue::Int(ref i) => Some(*i as f64),
@ -285,6 +252,20 @@ impl ScalarValue for DefaultScalarValue {
}
}
fn as_str(&self) -> Option<&str> {
match *self {
DefaultScalarValue::String(ref s) => Some(s.as_str()),
_ => None,
}
}
fn as_string(&self) -> Option<String> {
match *self {
DefaultScalarValue::String(ref s) => Some(s.clone()),
_ => None,
}
}
fn as_boolean(&self) -> Option<bool> {
match *self {
DefaultScalarValue::Boolean(ref b) => Some(*b),

View file

@ -211,7 +211,6 @@ pub fn impl_enum(ast: &syn::DeriveInput, is_internal: bool) -> TokenStream {
impl<__S> #juniper_path::GraphQLTypeAsync<__S> for #ident
where
__S: #juniper_path::ScalarValue + Send + Sync,
for<'__b> &'__b __S: #juniper_path::ScalarRefValue<'__b>
{
fn resolve_async<'a>(
&'a self,
@ -234,7 +233,6 @@ pub fn impl_enum(ast: &syn::DeriveInput, is_internal: bool) -> TokenStream {
impl<__S> #juniper_path::GraphQLType<__S> for #ident
where __S:
#juniper_path::ScalarValue,
for<'__b> &'__b __S: #juniper_path::ScalarRefValue<'__b>
{
type Context = ();
type TypeInfo = ();
@ -268,10 +266,9 @@ pub fn impl_enum(ast: &syn::DeriveInput, is_internal: bool) -> TokenStream {
impl<__S: #juniper_path::ScalarValue> #juniper_path::FromInputValue<__S> for #ident {
fn from_input_value(v: &#juniper_path::InputValue<__S>) -> Option<#ident>
where for<'__b> &'__b __S: #juniper_path::ScalarRefValue<'__b>
{
match v.as_enum_value().or_else(|| {
v.as_scalar_value::<String>().map(|s| s as &str)
v.as_string_value()
}) {
#from_inputs
_ => None,

View file

@ -157,6 +157,25 @@ pub fn impl_input_object(ast: &syn::DeriveInput, is_internal: bool) -> TokenStre
let mut from_inputs = TokenStream::new();
let mut to_inputs = TokenStream::new();
let (_, ty_generics, _) = generics.split_for_impl();
let mut generics = generics.clone();
let scalar = if let Some(scalar) = attrs.scalar {
scalar
} else {
generics.params.push(parse_quote!(__S));
{
let where_clause = generics.where_clause.get_or_insert(parse_quote!(where));
where_clause
.predicates
.push(parse_quote!(__S: #juniper_path::ScalarValue));
}
Ident::new("__S", Span::call_site())
};
let (impl_generics, _, where_clause) = generics.split_for_impl();
for field in fields {
let field_ty = &field.ty;
let field_attrs = ObjFieldAttrs::from_input(field);
@ -241,7 +260,7 @@ pub fn impl_input_object(ast: &syn::DeriveInput, is_internal: bool) -> TokenStre
#from_input_default
Some(ref v) => #juniper_path::FromInputValue::from_input_value(v).unwrap(),
None => {
#juniper_path::FromInputValue::from_input_value(&#juniper_path::InputValue::null())
#juniper_path::FromInputValue::from_input_value(&#juniper_path::InputValue::<#scalar>::null())
.unwrap()
},
}
@ -254,28 +273,6 @@ pub fn impl_input_object(ast: &syn::DeriveInput, is_internal: bool) -> TokenStre
});
}
let (_, ty_generics, _) = generics.split_for_impl();
let mut generics = generics.clone();
let scalar = if let Some(scalar) = attrs.scalar {
scalar
} else {
generics.params.push(parse_quote!(__S));
{
let where_clause = generics.where_clause.get_or_insert(parse_quote!(where));
where_clause
.predicates
.push(parse_quote!(__S: #juniper_path::ScalarValue));
where_clause
.predicates
.push(parse_quote!(for<'__b> &'__b __S: #juniper_path::ScalarRefValue<'__b>));
}
Ident::new("__S", Span::call_site())
};
let (impl_generics, _, where_clause) = generics.split_for_impl();
let body = quote! {
impl#impl_generics #juniper_path::GraphQLType<#scalar> for #ident #ty_generics
#where_clause
@ -306,8 +303,6 @@ pub fn impl_input_object(ast: &syn::DeriveInput, is_internal: bool) -> TokenStre
#where_clause
{
fn from_input_value(value: &#juniper_path::InputValue<#scalar>) -> Option<Self>
where
for<'__b> &'__b #scalar: #juniper_path::ScalarRefValue<'__b>
{
if let Some(obj) = value.to_object_value() {
let item = #ident {

View file

@ -114,7 +114,6 @@ fn impl_scalar_struct(
impl<S> #crate_name::GraphQLType<S> for #ident
where
S: #crate_name::ScalarValue,
for<'__b> &'__b S: #crate_name::ScalarRefValue<'__b>,
{
type Context = ();
type TypeInfo = ();
@ -128,7 +127,6 @@ fn impl_scalar_struct(
registry: &mut #crate_name::Registry<'r, S>,
) -> #crate_name::meta::MetaType<'r, S>
where
for<'__b> &'__b S: #crate_name::ScalarRefValue<'__b>,
S: 'r,
{
registry.build_scalar_type::<Self>(info)
@ -149,7 +147,6 @@ fn impl_scalar_struct(
impl<S> #crate_name::ToInputValue<S> for #ident
where
S: #crate_name::ScalarValue,
for<'__b> &'__b S: #crate_name::ScalarRefValue<'__b>,
{
fn to_input_value(&self) -> #crate_name::InputValue<S> {
#crate_name::ToInputValue::to_input_value(&self.0)
@ -159,7 +156,6 @@ fn impl_scalar_struct(
impl<S> #crate_name::FromInputValue<S> for #ident
where
S: #crate_name::ScalarValue,
for<'__b> &'__b S: #crate_name::ScalarRefValue<'__b>,
{
fn from_input_value(v: &#crate_name::InputValue<S>) -> Option<#ident> {
let inner: #inner_ty = #crate_name::FromInputValue::from_input_value(v)?;
@ -170,7 +166,6 @@ fn impl_scalar_struct(
impl<S> #crate_name::ParseScalarValue<S> for #ident
where
S: #crate_name::ScalarValue,
for<'__b> &'__b S: #crate_name::ScalarRefValue<'__b>,
{
fn from_str<'a>(
value: #crate_name::parser::ScalarToken<'a>,

View file

@ -132,19 +132,7 @@ pub fn impl_union(
.map(|s| quote!( #s ))
.unwrap_or_else(|| { quote! { #juniper::DefaultScalarValue } });
let mut generics = item.generics.clone();
if attrs.scalar.is_some() {
// A custom scalar type was specified.
// Therefore, we always insert a where clause that marks the scalar as
// compatible with ScalarValueRef.
// This is done to prevent the user from having to specify this
// manually.
let where_clause = generics.where_clause.get_or_insert(syn::parse_quote!(where));
where_clause.predicates.push(
syn::parse_quote!(for<'__b> &'__b #scalar: #juniper::ScalarRefValue<'__b>),
);
}
let generics = item.generics.clone();
let (impl_generics, _, where_clause) = generics.split_for_impl();
let description = match attrs.description.as_ref() {
@ -168,7 +156,6 @@ pub fn impl_union(
registry: &mut #juniper::Registry<'r, #scalar>
) -> #juniper::meta::MetaType<'r, #scalar>
where
for<'__b> &'__b #scalar: #juniper::ScalarRefValue<'__b>,
#scalar: 'r,
{
let types = &[

View file

@ -809,15 +809,6 @@ impl GraphQLTypeDefiniton {
let mut generics = self.generics.clone();
if self.scalar.is_some() {
// A custom scalar type was specified.
// Therefore, we always insert a where clause that marks the scalar as
// compatible with ScalarValueRef.
// This is done to prevent the user from having to specify this
// manually.
let where_clause = generics.where_clause.get_or_insert(parse_quote!(where));
where_clause.predicates.push(
parse_quote!(for<'__b> &'__b #scalar: #juniper_crate_name::ScalarRefValue<'__b>),
);
} else if self.generic_scalar {
// No custom scalar specified, but always generic specified.
// Therefore we inject the generic scalar.
@ -829,12 +820,6 @@ impl GraphQLTypeDefiniton {
where_clause
.predicates
.push(parse_quote!(__S: #juniper_crate_name::ScalarValue));
// Insert a where clause that marks the scalar as
// compatible with ScalarValueRef.
// Same as in branch above.
where_clause
.predicates
.push(parse_quote!(for<'__b> &'__b __S: #juniper_crate_name::ScalarRefValue<'__b>));
}
let type_generics_tokens = if self.include_type_generics {
@ -976,7 +961,6 @@ impl GraphQLTypeDefiniton {
registry: &mut #juniper_crate_name::Registry<'r, #scalar>
) -> #juniper_crate_name::meta::MetaType<'r, #scalar>
where #scalar : 'r,
for<'z> &'z #scalar: #juniper_crate_name::ScalarRefValue<'z>,
{
let fields = vec![
#( #field_definitions ),*

View file

@ -11,7 +11,7 @@ use hyper::{
};
use juniper::{
http::GraphQLRequest as JuniperGraphQLRequest, serde::Deserialize, DefaultScalarValue,
GraphQLType, InputValue, RootNode, ScalarRefValue, ScalarValue,
GraphQLType, InputValue, RootNode, ScalarValue,
};
use serde_json::error::Error as SerdeError;
use std::{error::Error, fmt, string::FromUtf8Error, sync::Arc};
@ -25,7 +25,6 @@ pub fn graphql<CtxT, QueryT, MutationT, S>(
) -> impl Future<Item = Response<Body>, Error = hyper::Error>
where
S: ScalarValue + Send + Sync + 'static,
for<'b> &'b S: ScalarRefValue<'b>,
CtxT: Send + Sync + 'static,
QueryT: GraphQLType<S, Context = CtxT> + Send + Sync + 'static,
MutationT: GraphQLType<S, Context = CtxT> + Send + Sync + 'static,
@ -111,7 +110,6 @@ fn execute_request<CtxT, QueryT, MutationT, S>(
) -> impl Future<Item = Response<Body>, Error = tokio_threadpool::BlockingError>
where
S: ScalarValue + Send + Sync + 'static,
for<'b> &'b S: ScalarRefValue<'b>,
CtxT: Send + Sync + 'static,
QueryT: GraphQLType<S, Context = CtxT> + Send + Sync + 'static,
MutationT: GraphQLType<S, Context = CtxT> + Send + Sync + 'static,
@ -212,7 +210,6 @@ where
impl<S> GraphQLRequest<S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
fn execute<'a, CtxT: 'a, QueryT, MutationT>(
self,

View file

@ -119,7 +119,7 @@ use serde_json::error::Error as SerdeError;
use juniper::{
http, serde::Deserialize, DefaultScalarValue, GraphQLType, InputValue, RootNode,
ScalarRefValue, ScalarValue,
ScalarValue,
};
#[derive(serde_derive::Deserialize)]
@ -146,7 +146,6 @@ where
impl<S> GraphQLBatchRequest<S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
pub fn execute<'a, CtxT, QueryT, MutationT>(
&'a self,
@ -198,7 +197,6 @@ where
pub struct GraphQLHandler<'a, CtxFactory, Query, Mutation, CtxT, S = DefaultScalarValue>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
CtxFactory: Fn(&mut Request) -> IronResult<CtxT> + Send + Sync + 'static,
CtxT: 'static,
Query: GraphQLType<S, Context = CtxT> + Send + Sync + 'static,
@ -253,7 +251,6 @@ impl<'a, CtxFactory, Query, Mutation, CtxT, S>
GraphQLHandler<'a, CtxFactory, Query, Mutation, CtxT, S>
where
S: ScalarValue + 'a,
for<'b> &'b S: ScalarRefValue<'b>,
CtxFactory: Fn(&mut Request) -> IronResult<CtxT> + Send + Sync + 'static,
CtxT: 'static,
Query: GraphQLType<S, Context = CtxT, TypeInfo = ()> + Send + Sync + 'static,
@ -340,7 +337,6 @@ impl<'a, CtxFactory, Query, Mutation, CtxT, S> Handler
for GraphQLHandler<'a, CtxFactory, Query, Mutation, CtxT, S>
where
S: ScalarValue + Sync + Send + 'static,
for<'b> &'b S: ScalarRefValue<'b>,
CtxFactory: Fn(&mut Request) -> IronResult<CtxT> + Send + Sync + 'static,
CtxT: 'static,
Query: GraphQLType<S, Context = CtxT, TypeInfo = ()> + Send + Sync + 'static,

View file

@ -54,7 +54,7 @@ use rocket::{
use juniper::{http, InputValue};
use juniper::{
serde::Deserialize, DefaultScalarValue, FieldError, GraphQLType, RootNode, ScalarRefValue,
serde::Deserialize, DefaultScalarValue, FieldError, GraphQLType, RootNode,
ScalarValue,
};
@ -88,7 +88,6 @@ where
impl<S> GraphQLBatchRequest<S>
where
S: ScalarValue + Send + Sync,
for<'b> &'b S: ScalarRefValue<'b>,
{
pub fn execute<'a, CtxT, QueryT, MutationT>(
&'a self,
@ -192,7 +191,6 @@ pub fn playground_source(graphql_endpoint_url: &str) -> content::Html<String> {
impl<S> GraphQLRequest<S>
where
S: ScalarValue + Sync + Send,
for<'b> &'b S: ScalarRefValue<'b>,
{
/// Execute an incoming GraphQL query
pub fn execute<CtxT, QueryT, MutationT>(

View file

@ -48,7 +48,7 @@ use warp::{filters::BoxedFilter, Filter};
#[cfg(feature = "async")]
use futures03::future::{FutureExt, TryFutureExt};
use juniper::{DefaultScalarValue, InputValue, ScalarRefValue, ScalarValue};
use juniper::{DefaultScalarValue, InputValue, ScalarValue};
#[derive(Debug, serde_derive::Deserialize, PartialEq)]
#[serde(untagged)]
@ -64,7 +64,6 @@ where
impl<S> GraphQLBatchRequest<S>
where
S: ScalarValue,
for<'b> &'b S: ScalarRefValue<'b>,
{
pub fn execute<'a, CtxT, QueryT, MutationT>(
&'a self,
@ -210,7 +209,6 @@ pub fn make_graphql_filter<Query, Mutation, Context, S>(
) -> BoxedFilter<(warp::http::Response<Vec<u8>>,)>
where
S: ScalarValue + Send + Sync + 'static,
for<'b> &'b S: ScalarRefValue<'b>,
Context: Send + 'static,
Query: juniper::GraphQLType<S, Context = Context, TypeInfo = ()> + Send + Sync + 'static,
Mutation: juniper::GraphQLType<S, Context = Context, TypeInfo = ()> + Send + Sync + 'static,
@ -283,7 +281,6 @@ pub fn make_graphql_filter_async<Query, Mutation, Context, S>(
) -> BoxedFilter<(warp::http::Response<Vec<u8>>,)>
where
S: ScalarValue + Send + Sync + 'static,
for<'b> &'b S: ScalarRefValue<'b>,
Context: Send + Sync + 'static,
Query: juniper::GraphQLTypeAsync<S, Context = Context> + Send + Sync + 'static,
Query::TypeInfo: Send + Sync,