hive_router_plan_executor/plugins/hooks/
on_supergraph_load.rs1use std::sync::Arc;
2
3use graphql_tools::static_graphql::schema::Document;
4use hive_router_internal::authorization::metadata::AuthorizationMetadata;
5use hive_router_query_planner::planner::Planner;
6
7use crate::{
8 introspection::schema::SchemaMetadata,
9 plugin_trait::{EndHookPayload, FromGraphQLErrorToResponse, StartHookPayload},
10 response::graphql_error::GraphQLError,
11 SubgraphExecutorMap,
12};
13
14pub struct SupergraphData {
15 pub metadata: SchemaMetadata,
18 pub planner: Planner,
20 pub authorization: AuthorizationMetadata,
22 pub subgraph_executor_map: SubgraphExecutorMap,
24 pub supergraph_schema: Arc<Document>,
26}
27
28pub type OnSupergraphLoadResult = Result<SupergraphData, GraphQLError>;
29
30pub struct OnSupergraphLoadStartHookPayload {
31 pub current_supergraph_data: Arc<Option<SupergraphData>>,
33 pub new_ast: Document,
37}
38
39impl StartHookPayload<OnSupergraphLoadEndHookPayload, OnSupergraphLoadResult>
40 for OnSupergraphLoadStartHookPayload
41{
42}
43
44pub type OnSupergraphLoadStartHookResult<'exec> = crate::plugin_trait::StartHookResult<
45 'exec,
46 OnSupergraphLoadStartHookPayload,
47 OnSupergraphLoadEndHookPayload,
48 OnSupergraphLoadResult,
49>;
50
51pub struct OnSupergraphLoadEndHookPayload {
52 pub new_supergraph_data: SupergraphData,
54}
55
56impl EndHookPayload<OnSupergraphLoadResult> for OnSupergraphLoadEndHookPayload {}
57
58pub type OnSupergraphLoadEndHookResult =
59 crate::plugin_trait::EndHookResult<OnSupergraphLoadEndHookPayload, OnSupergraphLoadResult>;
60
61impl FromGraphQLErrorToResponse for OnSupergraphLoadResult {
62 fn from_graphql_error_to_response(error: GraphQLError, _status_code: http::StatusCode) -> Self {
63 Err(error)
64 }
65}