reactive_graph_plugin_graphql_impl/
plugin_schema_manager_impl.rs

1use std::sync::Arc;
2
3use async_graphql::EmptySubscription;
4use async_graphql::Schema;
5use async_trait::async_trait;
6use springtime_di::Component;
7use springtime_di::component_alias;
8
9use reactive_graph_lifecycle::Lifecycle;
10use reactive_graph_plugin_graphql_api::PluginSchemaManager;
11use reactive_graph_plugin_graphql_schema::PluginSchema;
12use reactive_graph_plugin_graphql_schema::mutation::PluginMutation;
13use reactive_graph_plugin_graphql_schema::query::PluginQuery;
14use reactive_graph_plugin_service_api::PluginContainerManager;
15use reactive_graph_plugin_service_api::PluginResolver;
16
17#[derive(Component)]
18pub struct PluginSchemaManagerImpl {
19    plugin_container_manager: Arc<dyn PluginContainerManager + Send + Sync>,
20    plugin_resolver: Arc<dyn PluginResolver + Send + Sync>, // Deferred<Arc<dyn PluginResolver + Send + Sync>>,
21}
22
23#[async_trait]
24#[component_alias]
25impl PluginSchemaManager for PluginSchemaManagerImpl {
26    fn get_schema(&self) -> PluginSchema {
27        Schema::build(PluginQuery, PluginMutation, EmptySubscription)
28            .with_sorted_fields()
29            .with_sorted_enums()
30            .data(self.plugin_container_manager.clone())
31            .data(self.plugin_resolver.clone())
32            .finish()
33    }
34}
35
36#[async_trait]
37impl Lifecycle for PluginSchemaManagerImpl {
38    async fn init(&self) {}
39
40    async fn post_init(&self) {}
41
42    async fn pre_shutdown(&self) {}
43
44    async fn shutdown(&self) {}
45}