From b84a3a36d203b0e5053863b097c2994e3de1e8de Mon Sep 17 00:00:00 2001 From: Sunli Date: Tue, 30 Jun 2020 16:14:09 +0800 Subject: [PATCH] Fix Subscriptions issue: "multiple applicable items in scope" #194 --- async-graphql-derive/src/input_object.rs | 2 -- async-graphql-derive/src/object.rs | 3 +-- async-graphql-derive/src/subscription.rs | 10 ++++------ 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/async-graphql-derive/src/input_object.rs b/async-graphql-derive/src/input_object.rs index 3f0796aa..3cb94403 100644 --- a/async-graphql-derive/src/input_object.rs +++ b/async-graphql-derive/src/input_object.rs @@ -121,8 +121,6 @@ pub fn generate(object_args: &args::InputObject, input: &DeriveInput) -> Result< #[allow(clippy::all, clippy::pedantic)] impl #crate_name::InputValueType for #ident { fn parse(value: Option<#crate_name::Value>) -> #crate_name::InputValueResult { - use #crate_name::Type; - if let Some(#crate_name::Value::Object(obj)) = value { #(#get_fields)* Ok(Self { #(#fields),* }) diff --git a/async-graphql-derive/src/object.rs b/async-graphql-derive/src/object.rs index bac904b4..f4b71e6a 100644 --- a/async-graphql-derive/src/object.rs +++ b/async-graphql-derive/src/object.rs @@ -417,13 +417,12 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result< resolvers.push(quote! { if ctx.name.node == #field_name { - use #crate_name::OutputValueType; #(#get_params)* #guard let ctx_obj = ctx.with_selection_set(&ctx.selection_set); let res = #resolve_obj; #post_guard - return OutputValueType::resolve(&res, &ctx_obj, ctx.item).await; + return #crate_name::OutputValueType::resolve(&res, &ctx_obj, ctx.item).await; } }); diff --git a/async-graphql-derive/src/subscription.rs b/async-graphql-derive/src/subscription.rs index 6b816252..0c4017d0 100644 --- a/async-graphql-derive/src/subscription.rs +++ b/async-graphql-derive/src/subscription.rs @@ -248,8 +248,6 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result< create_stream.push(quote! { if ctx.name.node == #field_name { - use #crate_name::futures::{StreamExt, TryStreamExt}; - #(#get_params)* #guard let field_name = ::std::sync::Arc::new(ctx.result_name().to_string()); @@ -258,7 +256,7 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result< let pos = ctx.position(); let schema_env = schema_env.clone(); let query_env = query_env.clone(); - let stream = #create_field_stream.then({ + let stream = #crate_name::futures::StreamExt::then(#create_field_stream, { let field_name = field_name.clone(); move |msg| { let schema_env = schema_env.clone(); @@ -280,9 +278,9 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result< #crate_name::OutputValueType::resolve(&msg, &ctx_selection_set, &*field).await } } - }) - .map_ok(move |value| #crate_name::serde_json::json!({ field_name.as_str(): value })) - .scan(true, |state, item| { + }); + let stream = #crate_name::futures::TryStreamExt::map_ok(stream, move |value| #crate_name::serde_json::json!({ field_name.as_str(): value })); + let stream = #crate_name::futures::StreamExt::scan(stream, true, |state, item| { if !*state { return #crate_name::futures::future::ready(None); }