use std::{collections::HashMap, sync::Arc};
use moka::sync::Cache as MokaCache;
use super::{QueryType, support::relay::RelayDispatch};
use crate::{
db::{traits::DatabaseAdapter, types::PoolMetrics},
graphql::ParsedQuery,
runtime::{QueryMatcher, QueryPlanner, RuntimeConfig},
schema::{CompiledSchema, IntrospectionResponses},
};
pub(super) struct ExecutorContext<A: DatabaseAdapter> {
pub(super) schema: CompiledSchema,
pub(super) schema_version: Arc<str>,
pub(super) adapter: Arc<A>,
pub(super) relay: Option<Arc<dyn RelayDispatch>>,
pub(super) matcher: QueryMatcher,
pub(super) planner: QueryPlanner,
pub(super) config: RuntimeConfig,
pub(super) introspection: IntrospectionResponses,
pub(super) node_type_index: HashMap<String, Arc<str>>,
pub(super) parse_cache: MokaCache<u64, Arc<(QueryType, Option<ParsedQuery>)>>,
pub(super) response_cache: Option<Arc<crate::cache::ResponseCache>>,
}
impl<A: DatabaseAdapter> ExecutorContext<A> {
pub(super) fn pool_metrics(&self) -> PoolMetrics {
self.adapter.pool_metrics()
}
}