reactive_graph_dynamic_graph_impl/
dynamic_graph_query_service_impl.rs

1use std::sync::Arc;
2
3use async_graphql::Response;
4use async_trait::async_trait;
5use log::trace;
6use springtime_di::Component;
7use springtime_di::component_alias;
8
9use reactive_graph_dynamic_graph_api::DynamicGraphQueryService;
10use reactive_graph_dynamic_graph_api::DynamicGraphSchemaManager;
11use reactive_graph_dynamic_graph_api::DynamicQueryError;
12use reactive_graph_lifecycle::Lifecycle;
13
14#[derive(Component)]
15pub struct DynamicGraphQueryServiceImpl {
16    dynamic_graph_schema_manager: Arc<dyn DynamicGraphSchemaManager + Send + Sync>,
17}
18
19impl DynamicGraphQueryServiceImpl {}
20
21#[async_trait]
22#[component_alias]
23impl DynamicGraphQueryService for DynamicGraphQueryServiceImpl {
24    async fn query(&self, request: String) -> Result<String, DynamicQueryError> {
25        trace!("Run dynamic query: {}", request.clone());
26        match self.dynamic_graph_schema_manager.get_dynamic_schema().await {
27            Ok(schema) => {
28                let result = schema.execute(request).await;
29                serde_json::to_string(&result).map_err(DynamicQueryError::JsonError)
30            }
31            Err(e) => Err(DynamicQueryError::DynamicSchemaFailure(e)),
32        }
33    }
34
35    async fn query_response(&self, request: &str) -> Result<Response, DynamicQueryError> {
36        match self.dynamic_graph_schema_manager.get_dynamic_schema().await {
37            Ok(schema) => Ok(schema.execute(request).await),
38            Err(e) => Err(DynamicQueryError::DynamicSchemaFailure(e)),
39        }
40    }
41}
42
43#[async_trait]
44impl Lifecycle for DynamicGraphQueryServiceImpl {
45    async fn post_init(&self) {}
46}