diff --git a/examples/warp_async/Cargo.toml b/examples/warp_async/Cargo.toml index a1a4d23d..7568b799 100644 --- a/examples/warp_async/Cargo.toml +++ b/examples/warp_async/Cargo.toml @@ -16,3 +16,4 @@ reqwest = "0.9.19" juniper_codegen = { git = "https://github.com/graphql-rust/juniper", branch = "async-await", features = ["async"] } juniper = { git = "https://github.com/graphql-rust/juniper", branch = "async-await", features = ["async"] } juniper_warp = { git = "https://github.com/graphql-rust/juniper", branch = "async-await", features = ["async"] } + diff --git a/examples/warp_async/src/main.rs b/examples/warp_async/src/main.rs index 51c85690..9bbe3884 100644 --- a/examples/warp_async/src/main.rs +++ b/examples/warp_async/src/main.rs @@ -2,11 +2,13 @@ //! This example demonstrates async/await usage with warp. //! NOTE: this uses tokio 0.1 , not the alpha tokio 0.2. -use juniper::{EmptyMutation, FieldError, RootNode}; +use juniper::{EmptyMutation, RootNode, FieldError}; use warp::{http::Response, Filter}; #[derive(Clone)] -struct Context {} +struct Context { + +} impl juniper::Context for Context {} #[derive(juniper::GraphQLEnum, Clone, Copy)] @@ -46,19 +48,18 @@ struct Query; #[juniper::object(Context = Context)] impl Query { async fn users() -> Vec { - vec![User { - id: 1, - kind: UserKind::Admin, - name: "user1".into(), - }] + vec![ + User{ + id: 1, + kind: UserKind::Admin, + name: "user1".into(), + }, + ] } /// Fetch a URL and return the response body text. async fn request(url: String) -> Result { - use futures::{ - compat::{Future01CompatExt, Stream01CompatExt}, - stream::TryStreamExt, - }; + use futures::{ compat::{Stream01CompatExt, Future01CompatExt}, stream::TryStreamExt}; let res = reqwest::r#async::Client::new() .get(&url) @@ -94,7 +95,7 @@ fn main() { log::info!("Listening on 127.0.0.1:8080"); - let state = warp::any().map(move || Context {}); + let state = warp::any().map(move || Context{} ); let graphql_filter = juniper_warp::make_graphql_filter_async(schema(), state.boxed()); warp::serve( diff --git a/integration_tests/juniper_tests/src/codegen/unions.rs b/integration_tests/juniper_tests/src/codegen/unions.rs index 8b137891..fd40910d 100644 --- a/integration_tests/juniper_tests/src/codegen/unions.rs +++ b/integration_tests/juniper_tests/src/codegen/unions.rs @@ -1 +1,4 @@ + + + diff --git a/juniper/src/lib.rs b/juniper/src/lib.rs index 5e1f4f92..dd1cfffa 100644 --- a/juniper/src/lib.rs +++ b/juniper/src/lib.rs @@ -151,7 +151,6 @@ mod executor_tests; pub use crate::util::to_camel_case; use crate::{ - executor::{execute_validated_query, execute_validated_query_async}, introspection::{INTROSPECTION_QUERY, INTROSPECTION_QUERY_WITHOUT_DESCRIPTIONS}, parser::{parse_document_source, ParseError, Spanning}, validation::{validate_input_values, visit_all_rules, ValidatorContext}, @@ -228,7 +227,7 @@ where } } - execute_validated_query(document, operation_name, root_node, variables, context) + executor::execute_validated_query(document, operation_name, root_node, variables, context) } /// Execute a query in a provided schema @@ -268,7 +267,7 @@ where } } - execute_validated_query_async(document, operation_name, root_node, variables, context) + executor::execute_validated_query_async(document, operation_name, root_node, variables, context) .await } diff --git a/juniper/src/macros/common.rs b/juniper/src/macros/common.rs index 85689ba5..88320cd6 100644 --- a/juniper/src/macros/common.rs +++ b/juniper/src/macros/common.rs @@ -7,7 +7,7 @@ macro_rules! __juniper_impl_trait { } ) => { impl<$($other,)*> $crate::$impl_trait<$crate::DefaultScalarValue> for $name { - $($body)+ + $($body)* } }; ( @@ -26,7 +26,7 @@ macro_rules! __juniper_impl_trait { ( impl< <$generic:tt $(: $bound: tt)*> $(, $other: tt)* > $impl_trait:tt for $name:ty { - $($body:tt)+ + $($body:tt)* } ) => { impl<$($other,)* $generic $(: $bound)*> $crate::$impl_trait<$generic> for $name @@ -50,17 +50,17 @@ macro_rules! __juniper_impl_trait { $generic: $crate::ScalarValue, for<'__b> &'__b $generic: $crate::ScalarRefValue<'__b>, { - $($body)+ + $($body)* } }; ( impl<$scalar:ty $(, $other: tt )*> $impl_trait:tt for $name:ty { - $($body:tt)+ + $($body:tt)* } ) => { impl<$($other, )*> $crate::$impl_trait<$scalar> for $name { - $($body)+ + $($body)* } }; ( diff --git a/juniper/src/macros/tests/field.rs b/juniper/src/macros/tests/field.rs index c2e2754a..1b9c4268 100644 --- a/juniper/src/macros/tests/field.rs +++ b/juniper/src/macros/tests/field.rs @@ -95,8 +95,6 @@ impl Root { Ok(0) } - /* - * FIXME: make this work again fn with_return() -> i32 { return 0; } @@ -104,7 +102,6 @@ impl Root { fn with_return_field_result() -> FieldResult { return Ok(0); } - */ } graphql_interface!(Interface: () |&self| { diff --git a/juniper/src/macros/tests/union.rs b/juniper/src/macros/tests/union.rs index 7e193a5b..a8fd120d 100644 --- a/juniper/src/macros/tests/union.rs +++ b/juniper/src/macros/tests/union.rs @@ -1,12 +1,3 @@ -use std::marker::PhantomData; - -use crate::{ - ast::InputValue, - schema::model::RootNode, - types::scalars::EmptyMutation, - value::{DefaultScalarValue, Object, Value}, -}; - /* Syntax to validate: @@ -44,16 +35,6 @@ enum WithGenerics { enum DescriptionFirst { Concrete(Concrete), } -enum ResolversFirst { - Concrete(Concrete), -} - -enum CommasWithTrailing { - Concrete(Concrete), -} -enum ResolversWithTrailingComma { - Concrete(Concrete), -} struct Root; diff --git a/juniper/src/schema/schema.rs b/juniper/src/schema/schema.rs index d9501474..5192dc20 100644 --- a/juniper/src/schema/schema.rs +++ b/juniper/src/schema/schema.rs @@ -98,12 +98,13 @@ where ) -> ExecutionResult { use futures::future::{ready, FutureExt}; match field_name { - "__schema" | "__type" => self.resolve_field(info, field_name, arguments, executor), - _ => { - self.query_type - .resolve_field_async(info, field_name, arguments, executor) - .await + "__schema" | "__type" => { + let v = self.resolve_field(info, field_name, arguments, executor); + Box::pin(ready(v)) } + _ => self + .query_type + .resolve_field_async(info, field_name, arguments, executor), } } } diff --git a/juniper/src/tests/introspection_tests.rs b/juniper/src/tests/introspection_tests.rs index f0340007..0bfa8326 100644 --- a/juniper/src/tests/introspection_tests.rs +++ b/juniper/src/tests/introspection_tests.rs @@ -234,8 +234,6 @@ fn test_introspection_possible_types() { assert_eq!(possible_types, vec!["Human", "Droid"].into_iter().collect()); } -/* - * FIXME: make this work again #[test] fn test_builtin_introspection_query() { let database = Database::new(); @@ -258,4 +256,3 @@ fn test_builtin_introspection_query_without_descriptions() { assert_eq!(result, (expected, vec![])); } -*/ diff --git a/juniper/src/types/async_await.rs b/juniper/src/types/async_await.rs index a53c61e6..bf06e190 100644 --- a/juniper/src/types/async_await.rs +++ b/juniper/src/types/async_await.rs @@ -1,11 +1,15 @@ use crate::{ ast::{Directive, FromInputValue, InputValue, Selection}, + value::{Object, ScalarRefValue, ScalarValue, Value}, +}; + +use crate::{ executor::{ExecutionResult, Executor}, parser::Spanning, - value::{Object, ScalarRefValue, ScalarValue, Value}, - BoxFuture, }; +use crate::BoxFuture; + use super::base::{is_excluded, merge_key_into, Arguments, GraphQLType}; #[async_trait::async_trait] diff --git a/juniper_codegen/src/impl_object.rs b/juniper_codegen/src/impl_object.rs index 3613d36b..308938cb 100644 --- a/juniper_codegen/src/impl_object.rs +++ b/juniper_codegen/src/impl_object.rs @@ -41,15 +41,17 @@ pub fn build_object(args: TokenStream, body: TokenStream, is_internal: bool) -> } } - let name = if let Some(name) = impl_attrs.name.as_ref() { + + let name = if let Some(name) = impl_attrs.name.as_ref(){ name.to_string() - } else { + } + else { if let Some(ident) = util::name_of_type(&*_impl.self_ty) { ident.to_string() } else { - panic!("Could not determine a name for the object type: specify one with #[juniper::object(name = \"SomeName\")"); - } - }; + panic!("Could not determine a name for the object type: specify one with #[juniper::object(name = \"SomeName\")"); + } + }; let target_type = *_impl.self_ty.clone(); diff --git a/juniper_codegen/src/impl_union.rs b/juniper_codegen/src/impl_union.rs index a2418e7a..fa3927c1 100644 --- a/juniper_codegen/src/impl_union.rs +++ b/juniper_codegen/src/impl_union.rs @@ -67,6 +67,7 @@ pub fn impl_union( attrs: TokenStream, body: TokenStream, ) -> Result { + // We are re-using the object attributes since they are almost the same. let attrs = syn::parse::(attrs)?; @@ -75,8 +76,7 @@ pub fn impl_union( if item.items.len() != 1 { return Err(MacroError::new( item.span(), - "Invalid impl body: expected one method with signature: fn resolve(&self) { ... }" - .to_string(), + "Invalid impl body: expected one method with signature: fn resolve(&self) { ... }".to_string(), )); } @@ -92,7 +92,7 @@ pub fn impl_union( "Expected a path ending in a simple type identifier".to_string(), ) })?; - let name = attrs.name.unwrap_or_else(|| ty_ident.to_string()); + let name = attrs.name.unwrap_or_else(|| ty_ident.to_string()); let juniper = util::juniper_path(is_internal); @@ -130,9 +130,7 @@ pub fn impl_union( .scalar .as_ref() .map(|s| quote!( #s )) - .unwrap_or_else(|| { - quote! { #juniper::DefaultScalarValue } - }); + .unwrap_or_else(|| { quote! { #juniper::DefaultScalarValue } }); let mut generics = item.generics.clone(); if attrs.scalar.is_some() { @@ -141,12 +139,10 @@ pub fn impl_union( // 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 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 (impl_generics, _, where_clause) = generics.split_for_impl(); @@ -155,10 +151,7 @@ pub fn impl_union( Some(value) => quote!( .description( #value ) ), None => quote!(), }; - let context = attrs - .context - .map(|c| quote! { #c }) - .unwrap_or_else(|| quote! { () }); + let context = attrs.context.map(|c| quote!{ #c } ).unwrap_or_else(|| quote!{ () }); let output = quote! { impl #impl_generics #juniper::GraphQLType<#scalar> for #ty #where_clause diff --git a/juniper_codegen/src/lib.rs b/juniper_codegen/src/lib.rs index a31adb50..cf85bfb7 100644 --- a/juniper_codegen/src/lib.rs +++ b/juniper_codegen/src/lib.rs @@ -389,3 +389,4 @@ pub fn union_internal(attrs: TokenStream, body: TokenStream) -> TokenStream { }; output } + diff --git a/juniper_warp/src/lib.rs b/juniper_warp/src/lib.rs index 7e295a9c..55d423fd 100644 --- a/juniper_warp/src/lib.rs +++ b/juniper_warp/src/lib.rs @@ -41,7 +41,6 @@ Check the LICENSE file for details. #![doc(html_root_url = "https://docs.rs/juniper_warp/0.2.0")] use futures::{future::poll_fn, Future}; -use juniper::{DefaultScalarValue, InputValue, ScalarRefValue, ScalarValue}; use serde::Deserialize; use std::sync::Arc; use warp::{filters::BoxedFilter, Filter}; @@ -49,6 +48,8 @@ use warp::{filters::BoxedFilter, Filter}; #[cfg(feature = "async")] use futures03::future::{FutureExt, TryFutureExt}; +use juniper::{DefaultScalarValue, InputValue, ScalarRefValue, ScalarValue}; + #[derive(Debug, serde_derive::Deserialize, PartialEq)] #[serde(untagged)] #[serde(bound = "InputValue: Deserialize<'de>")]