reactive_graph_dynamic_graph_impl/
dynamic_graph_query_service_impl.rs1use 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}