reactive_graph_dynamic_graph_web/
lib.rs

1use std::sync::Arc;
2
3use actix_web::post;
4use actix_web::web;
5use async_graphql::ServerError;
6use async_graphql::dynamic::DynamicRequest;
7use async_graphql_actix_web::GraphQLRequest;
8use async_graphql_actix_web::GraphQLResponse;
9use reactive_graph_dynamic_graph_api::DynamicGraphSchemaManager;
10
11#[post("/dynamic_graph")]
12pub async fn query_dynamic_graph(
13    dynamic_graph_schema_manager: web::Data<Arc<dyn DynamicGraphSchemaManager + Send + Sync>>,
14    request: GraphQLRequest,
15) -> GraphQLResponse {
16    match dynamic_graph_schema_manager.get_dynamic_schema().await {
17        Ok(schema) => {
18            let dynamic_request = DynamicRequest::from(request.into_inner());
19            schema.execute(dynamic_request).await.into()
20        }
21        Err(e) => {
22            let errors = vec![ServerError::new(format!("Dynamic schema not available: {e}"), None)];
23            async_graphql::Response::from_errors(errors).into()
24        }
25    }
26}