qm_server/
lib.rs

1use async_graphql_axum::{GraphQLRequest, GraphQLResponse};
2use axum::extract::Extension;
3use axum::http::header::HeaderMap;
4use axum::http::header::AUTHORIZATION;
5use qm_role::AuthContainer;
6
7mod config;
8pub use config::Config as ServerConfig;
9
10pub async fn graphql_handler<A, Q, M, S>(
11    schema: Extension<async_graphql::Schema<Q, M, S>>,
12    headers: HeaderMap,
13    req: GraphQLRequest,
14) -> GraphQLResponse
15where
16    A: Send + Sync + 'static,
17    Q: async_graphql::ObjectType + Send + Sync + 'static,
18    M: async_graphql::ObjectType + async_graphql::ContainerType + Send + Sync + 'static,
19    S: async_graphql::SubscriptionType + Send + Sync + 'static,
20{
21    let mut req = req.into_inner();
22    if let Some(auth_header) = headers.get(AUTHORIZATION).map(AuthContainer::<A>::from) {
23        req = req.data(auth_header);
24    } else {
25        req = req.data(AuthContainer::<A>::default());
26    }
27    schema.execute(req).await.into()
28}