Remove Deref for ContextBase
This commit is contained in:
parent
dcc7d1be14
commit
b8add03d53
|
@ -237,13 +237,13 @@ pub fn generate(interface_args: &args::Interface, input: &DeriveInput) -> Result
|
|||
|
||||
let resolve_obj = quote! {
|
||||
self.#method_name(#(#use_params),*).await.
|
||||
map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?
|
||||
map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?
|
||||
};
|
||||
|
||||
resolvers.push(quote! {
|
||||
if ctx.node.name.node == #name {
|
||||
if ctx.item.node.name.node == #name {
|
||||
#(#get_params)*
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
return #crate_name::OutputValueType::resolve(&#resolve_obj, &ctx_obj, ctx.item).await;
|
||||
}
|
||||
});
|
||||
|
@ -307,9 +307,9 @@ pub fn generate(interface_args: &args::Interface, input: &DeriveInput) -> Result
|
|||
async fn resolve_field(&self, ctx: &#crate_name::Context<'_>) -> #crate_name::Result<#crate_name::serde_json::Value> {
|
||||
#(#resolvers)*
|
||||
Err(#crate_name::QueryError::FieldNotFound {
|
||||
field_name: ctx.node.name.to_string(),
|
||||
field_name: ctx.item.node.name.to_string(),
|
||||
object: #gql_typename.to_string(),
|
||||
}.into_error(ctx.position()))
|
||||
}.into_error(ctx.item.pos))
|
||||
}
|
||||
|
||||
fn collect_all_fields<'a>(&'a self, ctx: &#crate_name::ContextSelectionSet<'a>, fields: &mut #crate_name::resolver_utils::Fields<'a>) -> #crate_name::Result<()> {
|
||||
|
|
|
@ -151,7 +151,7 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
// requires
|
||||
requires_getter.push(quote! {
|
||||
let #ident: #ty = #crate_name::InputValueType::parse(params.get(#name).cloned()).
|
||||
map_err(|err| err.into_error(ctx.position(), <#ty as #crate_name::Type>::qualified_type_name()))?;
|
||||
map_err(|err| err.into_error(ctx.item.pos, <#ty as #crate_name::Type>::qualified_type_name()))?;
|
||||
});
|
||||
use_keys.push(ident);
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
)
|
||||
.expect("invalid result type");
|
||||
}
|
||||
let do_find = quote! { self.#field_ident(ctx, #(#use_keys),*).await.map_err(|err| err.into_error(ctx.position()))? };
|
||||
let do_find = quote! { self.#field_ident(ctx, #(#use_keys),*).await.map_err(|err| err.into_error(ctx.item.pos))? };
|
||||
|
||||
find_entities.push((
|
||||
args.len(),
|
||||
|
@ -185,7 +185,7 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
if typename == &<#entity_type as #crate_name::Type>::type_name() {
|
||||
if let (#(#key_pat),*) = (#(#key_getter),*) {
|
||||
#(#requires_getter)*
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
return #crate_name::OutputValueType::resolve(&#do_find, &ctx_obj, ctx.item).await;
|
||||
}
|
||||
}
|
||||
|
@ -400,7 +400,7 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
let resolve_obj = quote! {
|
||||
{
|
||||
let res = self.#field_ident(ctx, #(#use_params),*).await;
|
||||
res.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?
|
||||
res.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -408,20 +408,20 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
.guard
|
||||
.map(|guard| quote! {
|
||||
#guard.check(ctx).await
|
||||
.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?;
|
||||
.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?;
|
||||
});
|
||||
let post_guard = field
|
||||
.post_guard
|
||||
.map(|guard| quote! {
|
||||
#guard.check(ctx, &res).await
|
||||
.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?;
|
||||
.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?;
|
||||
});
|
||||
|
||||
resolvers.push(quote! {
|
||||
if ctx.node.name.node == #field_name {
|
||||
if ctx.item.node.name.node == #field_name {
|
||||
#(#get_params)*
|
||||
#guard
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
let res = #resolve_obj;
|
||||
#post_guard
|
||||
return #crate_name::OutputValueType::resolve(&res, &ctx_obj, ctx.item).await;
|
||||
|
@ -496,23 +496,23 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
async fn resolve_field(&self, ctx: &#crate_name::Context<'_>) -> #crate_name::Result<#crate_name::serde_json::Value> {
|
||||
#(#resolvers)*
|
||||
Err(#crate_name::QueryError::FieldNotFound {
|
||||
field_name: ctx.node.name.to_string(),
|
||||
field_name: ctx.item.node.name.to_string(),
|
||||
object: #gql_typename.to_string(),
|
||||
}.into_error(ctx.position()))
|
||||
}.into_error(ctx.item.pos))
|
||||
}
|
||||
|
||||
async fn find_entity(&self, ctx: &#crate_name::Context<'_>, params: &#crate_name::Value) -> #crate_name::Result<#crate_name::serde_json::Value> {
|
||||
let params = match params {
|
||||
#crate_name::Value::Object(params) => params,
|
||||
_ => return Err(#crate_name::QueryError::EntityNotFound.into_error(ctx.position())),
|
||||
_ => return Err(#crate_name::QueryError::EntityNotFound.into_error(ctx.item.pos)),
|
||||
};
|
||||
let typename = if let Some(#crate_name::Value::String(typename)) = params.get("__typename") {
|
||||
typename
|
||||
} else {
|
||||
return Err(#crate_name::QueryError::TypeNameNotExists.into_error(ctx.position()));
|
||||
return Err(#crate_name::QueryError::TypeNameNotExists.into_error(ctx.item.pos));
|
||||
};
|
||||
#(#find_entities_iter)*
|
||||
Err(#crate_name::QueryError::EntityNotFound.into_error(ctx.position()))
|
||||
Err(#crate_name::QueryError::EntityNotFound.into_error(ctx.item.pos))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -98,10 +98,10 @@ pub fn generate(object_args: &args::Object, input: &DeriveInput) -> Result<Token
|
|||
let ident = &item.ident;
|
||||
let guard = field
|
||||
.guard
|
||||
.map(|guard| quote! { #guard.check(ctx).await.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?; });
|
||||
.map(|guard| quote! { #guard.check(ctx).await.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?; });
|
||||
let post_guard = field
|
||||
.post_guard
|
||||
.map(|guard| quote! { #guard.check(ctx, &res).await.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?; });
|
||||
.map(|guard| quote! { #guard.check(ctx, &res).await.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?; });
|
||||
|
||||
let features = &field.features;
|
||||
getters.push(if !field.owned {
|
||||
|
@ -135,10 +135,10 @@ pub fn generate(object_args: &args::Object, input: &DeriveInput) -> Result<Token
|
|||
});
|
||||
|
||||
resolvers.push(quote! {
|
||||
if ctx.node.name.node == #field_name {
|
||||
if ctx.item.node.name.node == #field_name {
|
||||
#guard
|
||||
let res = self.#ident(ctx).await.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?;
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
let res = self.#ident(ctx).await.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?;
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
#post_guard
|
||||
return #crate_name::OutputValueType::resolve(&res, &ctx_obj, ctx.item).await;
|
||||
}
|
||||
|
@ -192,9 +192,9 @@ pub fn generate(object_args: &args::Object, input: &DeriveInput) -> Result<Token
|
|||
async fn resolve_field(&self, ctx: &#crate_name::Context<'_>) -> #crate_name::Result<#crate_name::serde_json::Value> {
|
||||
#(#resolvers)*
|
||||
Err(#crate_name::QueryError::FieldNotFound {
|
||||
field_name: ctx.node.name.to_string(),
|
||||
field_name: ctx.item.node.name.to_string(),
|
||||
object: #gql_typename.to_string(),
|
||||
}.into_error(ctx.position()))
|
||||
}.into_error(ctx.item.pos))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -234,11 +234,11 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
|
||||
let create_field_stream = quote! {
|
||||
#crate_name::futures::stream::StreamExt::fuse(self.#ident(ctx, #(#use_params),*).await.
|
||||
map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?)
|
||||
map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?)
|
||||
};
|
||||
|
||||
let guard = field.guard.map(|guard| quote! {
|
||||
#guard.check(ctx).await.map_err(|err| err.into_error_with_path(ctx.position(), ctx.path_node.as_ref()))?;
|
||||
#guard.check(ctx).await.map_err(|err| err.into_error_with_path(ctx.item.pos, ctx.path_node.as_ref()))?;
|
||||
});
|
||||
if field.post_guard.is_some() {
|
||||
return Err(Error::new_spanned(
|
||||
|
@ -248,13 +248,13 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
}
|
||||
|
||||
create_stream.push(quote! {
|
||||
if ctx.node.name.node == #field_name {
|
||||
if ctx.item.node.name.node == #field_name {
|
||||
#(#get_params)*
|
||||
#guard
|
||||
let field_name = ::std::sync::Arc::new(ctx.item.node.response_key().node.clone());
|
||||
let field = ::std::sync::Arc::new(ctx.item.clone());
|
||||
|
||||
let pos = ctx.position();
|
||||
let pos = ctx.item.pos;
|
||||
let schema_env = schema_env.clone();
|
||||
let query_env = query_env.clone();
|
||||
let stream = #crate_name::futures::StreamExt::then(#create_field_stream, {
|
||||
|
@ -353,9 +353,9 @@ pub fn generate(object_args: &args::Object, item_impl: &mut ItemImpl) -> Result<
|
|||
) -> #crate_name::Result<::std::pin::Pin<Box<dyn #crate_name::futures::Stream<Item = #crate_name::Response> + Send>>> {
|
||||
#(#create_stream)*
|
||||
Err(#crate_name::QueryError::FieldNotFound {
|
||||
field_name: ctx.node.name.to_string(),
|
||||
field_name: ctx.item.node.name.to_string(),
|
||||
object: #gql_typename.to_string(),
|
||||
}.into_error(ctx.position()))
|
||||
}.into_error(ctx.item.pos))
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -130,9 +130,9 @@ pub fn generate(union_args: &args::Interface, input: &DeriveInput) -> Result<Tok
|
|||
impl #generics #crate_name::resolver_utils::ObjectType for #ident #generics {
|
||||
async fn resolve_field(&self, ctx: &#crate_name::Context<'_>) -> #crate_name::Result<#crate_name::serde_json::Value> {
|
||||
Err(#crate_name::QueryError::FieldNotFound {
|
||||
field_name: ctx.node.name.to_string(),
|
||||
field_name: ctx.item.node.name.to_string(),
|
||||
object: #gql_typename.to_string(),
|
||||
}.into_error(ctx.position()))
|
||||
}.into_error(ctx.item.pos))
|
||||
}
|
||||
|
||||
fn collect_all_fields<'a>(&'a self, ctx: &#crate_name::ContextSelectionSet<'a>, fields: &mut #crate_name::resolver_utils::Fields<'a>) -> #crate_name::Result<()> {
|
||||
|
|
|
@ -236,14 +236,6 @@ pub struct ContextBase<'a, T> {
|
|||
pub(crate) query_env: &'a QueryEnv,
|
||||
}
|
||||
|
||||
impl<'a, T> Deref for ContextBase<'a, T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.item
|
||||
}
|
||||
}
|
||||
|
||||
#[doc(hidden)]
|
||||
pub struct QueryEnvInner {
|
||||
pub extensions: spin::Mutex<Extensions>,
|
||||
|
@ -488,11 +480,6 @@ impl<'a> ContextBase<'a, &'a Positioned<Field>> {
|
|||
InputValueType::parse(value).map_err(|e| e.into_error(pos, T::qualified_type_name()))
|
||||
}
|
||||
|
||||
/// Get the position of the current field in the query code.
|
||||
pub fn position(&self) -> Pos {
|
||||
self.pos
|
||||
}
|
||||
|
||||
/// Creates a uniform interface to inspect the forthcoming selections.
|
||||
///
|
||||
/// # Examples
|
||||
|
|
|
@ -38,7 +38,7 @@ pub trait ObjectType: OutputValueType {
|
|||
|
||||
/// Query entities with params
|
||||
async fn find_entity(&self, ctx: &Context<'_>, _params: &Value) -> Result<serde_json::Value> {
|
||||
Err(QueryError::EntityNotFound.into_error(ctx.pos))
|
||||
Err(QueryError::EntityNotFound.into_error(ctx.item.pos))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -196,17 +196,17 @@ where
|
|||
EE: ObjectType + Sync + Send,
|
||||
{
|
||||
async fn resolve_field(&self, ctx: &Context<'_>) -> Result<serde_json::Value> {
|
||||
if ctx.node.name.node == "pageInfo" {
|
||||
if ctx.item.node.name.node == "pageInfo" {
|
||||
let page_info = PageInfo {
|
||||
has_previous_page: self.has_previous_page,
|
||||
has_next_page: self.has_next_page,
|
||||
start_cursor: self.edges.first().map(|edge| edge.cursor.encode_cursor()),
|
||||
end_cursor: self.edges.last().map(|edge| edge.cursor.encode_cursor()),
|
||||
};
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
return OutputValueType::resolve(&page_info, &ctx_obj, ctx.item).await;
|
||||
} else if ctx.node.name.node == "edges" {
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
} else if ctx.item.node.name.node == "edges" {
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
return OutputValueType::resolve(&self.edges, &ctx_obj, ctx.item).await;
|
||||
}
|
||||
|
||||
|
|
|
@ -111,10 +111,10 @@ where
|
|||
E: ObjectType + Sync + Send,
|
||||
{
|
||||
async fn resolve_field(&self, ctx: &Context<'_>) -> Result<serde_json::Value> {
|
||||
if ctx.node.name.node == "node" {
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.node.selection_set);
|
||||
if ctx.item.node.name.node == "node" {
|
||||
let ctx_obj = ctx.with_selection_set(&ctx.item.node.selection_set);
|
||||
return OutputValueType::resolve(&self.node, &ctx_obj, ctx.item).await;
|
||||
} else if ctx.node.name.node == "cursor" {
|
||||
} else if ctx.item.node.name.node == "cursor" {
|
||||
return Ok(self.cursor.encode_cursor().into());
|
||||
}
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ impl<T: ObjectType + Send + Sync> ObjectType for QueryRoot<T> {
|
|||
if ctx.item.node.name.node == "__schema" {
|
||||
if self.disable_introspection {
|
||||
return Err(Error::Query {
|
||||
pos: ctx.pos,
|
||||
pos: ctx.item.pos,
|
||||
path: ctx
|
||||
.path_node
|
||||
.as_ref()
|
||||
|
|
Loading…
Reference in New Issue
Block a user