reactive_graph_dynamic_graph_web/
lib.rs1use 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}