-
Notifications
You must be signed in to change notification settings - Fork 1k
/
Copy pathgraphql.rs
59 lines (48 loc) · 2.01 KB
/
graphql.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
use futures::prelude::*;
use crate::data::query::{CacheStatus, Query, QueryTarget};
use crate::data::subscription::{Subscription, SubscriptionError, SubscriptionResult};
use crate::data::{graphql::effort::LoadManager, query::QueryResults};
use crate::prelude::DeploymentHash;
use async_trait::async_trait;
use std::sync::Arc;
use std::time::Duration;
/// Future for subscription results.
pub type SubscriptionResultFuture =
Box<dyn Future<Item = SubscriptionResult, Error = SubscriptionError> + Send>;
pub enum GraphQlTarget {
SubgraphName(String),
Deployment(DeploymentHash),
}
/// A component that can run GraphqL queries against a [Store](../store/trait.Store.html).
#[async_trait]
pub trait GraphQlRunner: Send + Sync + 'static {
/// Runs a GraphQL query and returns its result.
async fn run_query(self: Arc<Self>, query: Query, target: QueryTarget) -> QueryResults;
/// Runs a GraphqL query up to the given complexity. Overrides the global complexity limit.
async fn run_query_with_complexity(
self: Arc<Self>,
query: Query,
target: QueryTarget,
max_complexity: Option<u64>,
max_depth: Option<u8>,
max_first: Option<u32>,
max_skip: Option<u32>,
) -> QueryResults;
/// Runs a GraphQL subscription and returns a stream of results.
async fn run_subscription(
self: Arc<Self>,
subscription: Subscription,
target: QueryTarget,
) -> Result<SubscriptionResult, SubscriptionError>;
fn load_manager(&self) -> Arc<LoadManager>;
fn metrics(&self) -> Arc<dyn GraphQLMetrics>;
}
pub trait GraphQLMetrics: Send + Sync + 'static {
fn observe_query_execution(&self, duration: Duration, results: &QueryResults);
fn observe_query_parsing(&self, duration: Duration, results: &QueryResults);
fn observe_query_validation(&self, duration: Duration, id: &DeploymentHash);
}
#[async_trait]
pub trait QueryLoadManager: Send + Sync {
fn record_work(&self, shape_hash: u64, duration: Duration, cache_status: CacheStatus);
}