Skip to main content

apollo_router/services/
mod.rs

1//! Implementation of the various steps in the router's processing pipeline.
2
3use std::sync::Arc;
4
5pub(crate) use self::execution::service::*;
6pub(crate) use self::query_planner::*;
7pub(crate) use self::subgraph_service::*;
8pub(crate) use self::supergraph::service::*;
9use crate::graphql::Request;
10use crate::http_ext;
11pub use crate::http_ext::TryIntoHeaderName;
12pub use crate::http_ext::TryIntoHeaderValue;
13pub use crate::query_planner::OperationKind;
14pub(crate) use crate::services::execution::Request as ExecutionRequest;
15pub(crate) use crate::services::execution::Response as ExecutionResponse;
16pub(crate) use crate::services::query_planner::Request as QueryPlannerRequest;
17pub(crate) use crate::services::query_planner::Response as QueryPlannerResponse;
18pub(crate) use crate::services::router::Request as RouterRequest;
19pub(crate) use crate::services::router::Response as RouterResponse;
20pub(crate) use crate::services::subgraph::Request as SubgraphRequest;
21pub(crate) use crate::services::subgraph::Response as SubgraphResponse;
22pub(crate) use crate::services::supergraph::Request as SupergraphRequest;
23pub(crate) use crate::services::supergraph::Response as SupergraphResponse;
24pub(crate) use crate::services::supergraph::service::SupergraphCreator;
25
26pub mod execution;
27pub(crate) mod external;
28pub(crate) mod hickory_dns_connector;
29pub(crate) mod http;
30pub(crate) mod layers;
31pub(crate) mod new_service;
32pub(crate) mod query_planner;
33pub mod router;
34pub mod subgraph;
35pub(crate) mod subgraph_service;
36pub mod supergraph;
37pub mod transport;
38
39impl AsRef<Request> for http_ext::Request<Request> {
40    fn as_ref(&self) -> &Request {
41        self.body()
42    }
43}
44
45impl AsRef<Request> for Arc<http_ext::Request<Request>> {
46    fn as_ref(&self) -> &Request {
47        self.body()
48    }
49}
50
51#[cfg(test)]
52pub(crate) fn apollo_key() -> Option<String> {
53    // During tests we don't want env variables to affect defaults
54    None
55}
56
57#[cfg(not(test))]
58pub(crate) fn apollo_key() -> Option<String> {
59    std::env::var("APOLLO_KEY").ok()
60}
61
62#[cfg(test)]
63pub(crate) fn apollo_graph_reference() -> Option<String> {
64    // During tests we don't want env variables to affect defaults
65    None
66}
67
68#[cfg(not(test))]
69pub(crate) fn apollo_graph_reference() -> Option<String> {
70    std::env::var("APOLLO_GRAPH_REF").ok()
71}
72
73// set the supported `@defer` specification version to https://github.com/graphql/graphql-spec/pull/742/commits/01d7b98f04810c9a9db4c0e53d3c4d54dbf10b82
74pub(crate) const MULTIPART_DEFER_SPEC_PARAMETER: &str = "deferSpec";
75pub(crate) const MULTIPART_DEFER_SPEC_VALUE: &str = "20220824";
76pub(crate) const MULTIPART_DEFER_ACCEPT: &str = "multipart/mixed;deferSpec=20220824";
77pub(crate) const MULTIPART_DEFER_CONTENT_TYPE: &str =
78    "multipart/mixed;boundary=\"graphql\";deferSpec=20220824";
79
80pub(crate) const MULTIPART_SUBSCRIPTION_ACCEPT: &str = "multipart/mixed;subscriptionSpec=1.0";
81pub(crate) const MULTIPART_SUBSCRIPTION_CONTENT_TYPE: &str =
82    "multipart/mixed;boundary=\"graphql\";subscriptionSpec=1.0";
83pub(crate) const MULTIPART_SUBSCRIPTION_SPEC_PARAMETER: &str = "subscriptionSpec";
84pub(crate) const MULTIPART_SUBSCRIPTION_SPEC_VALUE: &str = "1.0";