Skip to content

Commit 37fd5e8

Browse files
tilacoglutter
andauthored
graphql,server: make Resolver::resolve_object async (#3938)
Co-authored-by: David Lutterkort <lutter@watzmann.net> Co-authored-by: David Lutterkort <lutter@watzmann.net>
1 parent 0d3fbdf commit 37fd5e8

6 files changed

Lines changed: 20 additions & 15 deletions

File tree

graphql/src/execution/execution.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -587,14 +587,17 @@ async fn resolve_field_value(
587587
.await
588588
}
589589

590-
s::Type::NamedType(ref name) => resolve_field_value_for_named_type(
591-
ctx,
592-
object_type,
593-
field_value,
594-
field,
595-
field_definition,
596-
name,
597-
),
590+
s::Type::NamedType(ref name) => {
591+
resolve_field_value_for_named_type(
592+
ctx,
593+
object_type,
594+
field_value,
595+
field,
596+
field_definition,
597+
name,
598+
)
599+
.await
600+
}
598601

599602
s::Type::ListType(inner_type) => {
600603
resolve_field_value_for_list_type(
@@ -611,7 +614,7 @@ async fn resolve_field_value(
611614
}
612615

613616
/// Resolves the value of a field that corresponds to a named type.
614-
fn resolve_field_value_for_named_type(
617+
async fn resolve_field_value_for_named_type(
615618
ctx: &ExecutionContext<impl Resolver>,
616619
object_type: &s::ObjectType,
617620
field_value: Option<r::Value>,
@@ -630,6 +633,7 @@ fn resolve_field_value_for_named_type(
630633
s::TypeDefinition::Object(t) => {
631634
ctx.resolver
632635
.resolve_object(field_value, field, field_definition, t.into())
636+
.await
633637
}
634638

635639
// Let the resolver decide how values in the resolved object value
@@ -646,6 +650,7 @@ fn resolve_field_value_for_named_type(
646650
s::TypeDefinition::Interface(i) => {
647651
ctx.resolver
648652
.resolve_object(field_value, field, field_definition, i.into())
653+
.await
649654
}
650655

651656
s::TypeDefinition::Union(_) => Err(QueryExecutionError::Unimplemented("unions".to_owned())),

graphql/src/execution/resolver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pub trait Resolver: Sized + Send + Sync + 'static {
3232
) -> Result<r::Value, QueryExecutionError>;
3333

3434
/// Resolves an object, `prefetched_object` is `Some` if the parent already calculated the value.
35-
fn resolve_object(
35+
async fn resolve_object(
3636
&self,
3737
prefetched_object: Option<r::Value>,
3838
field: &a::Field,

graphql/src/introspection/resolver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ impl Resolver for IntrospectionResolver {
412412
}
413413
}
414414

415-
fn resolve_object(
415+
async fn resolve_object(
416416
&self,
417417
prefetched_object: Option<r::Value>,
418418
field: &a::Field,

graphql/src/store/resolver.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ impl Resolver for StoreResolver {
313313
}
314314
}
315315

316-
fn resolve_object(
316+
async fn resolve_object(
317317
&self,
318318
prefetched_object: Option<r::Value>,
319319
field: &a::Field,

graphql/tests/introspection.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ impl Resolver for MockResolver {
4242
Ok(r::Value::Null)
4343
}
4444

45-
fn resolve_object(
45+
async fn resolve_object(
4646
&self,
4747
__: Option<r::Value>,
4848
_field: &a::Field,

server/index-node/src/resolver.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -797,7 +797,7 @@ impl<S: Store> Resolver for IndexNodeResolver<S> {
797797
}
798798
}
799799

800-
fn resolve_object(
800+
async fn resolve_object(
801801
&self,
802802
prefetched_object: Option<r::Value>,
803803
field: &a::Field,
@@ -812,7 +812,7 @@ impl<S: Store> Resolver for IndexNodeResolver<S> {
812812
(None, "indexingStatusForPendingVersion") => {
813813
self.resolve_indexing_status_for_version(field, false)
814814
}
815-
(None, "subgraphFeatures") => graph::block_on(self.resolve_subgraph_features(field)),
815+
(None, "subgraphFeatures") => self.resolve_subgraph_features(field).await,
816816
(None, "entityChangesInBlock") => self.resolve_entity_changes_in_block(field),
817817
// The top-level `subgraphVersions` field
818818
(None, "apiVersions") => self.resolve_api_versions(field),

0 commit comments

Comments
 (0)