Fix Subscriptions issue: "multiple applicable items in scope" #194

This commit is contained in:
Sunli 2020-06-30 16:14:09 +08:00
parent 5d4032bca7
commit b84a3a36d2
3 changed files with 5 additions and 10 deletions

View File

@ -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<Self> {
use #crate_name::Type;
if let Some(#crate_name::Value::Object(obj)) = value {
#(#get_fields)*
Ok(Self { #(#fields),* })

View File

@ -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;
}
});

View File

@ -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);
}