reactive_graph_std_result/plugin.rs
1use reactive_graph_plugin_api::prelude::plugin::*;
2use reactive_graph_plugin_api::prelude::providers::*;
3
4export_plugin!({
5 "dependencies": [
6 { "name": "reactive-graph-std-base", "version": ">=0.10.0, <0.11.0" }
7 ]
8});
9
10#[derive(Component)]
11pub struct ResultPlugin {
12 component_provider: Arc<dyn TypeProvider<Components> + Send + Sync>,
13
14 #[component(default = "component_provider_registry")]
15 component_provider_registry: Arc<dyn ComponentProviderRegistry + Send + Sync>,
16}
17
18#[async_trait]
19#[component_alias]
20impl Plugin for ResultPlugin {
21 async fn activate(&self) -> Result<(), PluginActivationError> {
22 self.component_provider_registry.register_provider(self.component_provider.clone()).await;
23 Ok(())
24 }
25
26 async fn deactivate(&self) -> Result<(), PluginDeactivationError> {
27 self.component_provider_registry.unregister_provider(self.component_provider.id()).await;
28 Ok(())
29 }
30}
31
32// use std::sync::Arc;
33// use std::sync::RwLock;
34//
35// use crate::di::*;
36// use crate::plugins::component_provider;
37// use crate::plugins::plugin_context::PluginContext;
38// use crate::plugins::ComponentProvider;
39// use crate::plugins::ComponentProviderError;
40// use crate::plugins::Plugin;
41// use crate::plugins::PluginContextDeinitializationError;
42// use crate::plugins::PluginContextInitializationError;
43// use crate::providers::ResultComponentProviderImpl;
44//
45// #[wrapper]
46// pub struct PluginContextContainer(RwLock<Option<Arc<dyn PluginContext>>>);
47//
48// #[provides]
49// fn create_empty_plugin_context_container() -> PluginContextContainer {
50// PluginContextContainer(RwLock::new(None))
51// }
52//
53// pub trait ResultPlugin: Plugin + Send + Sync {}
54//
55// #[component]
56// pub struct ResultPluginImpl {
57// component_provider: Wrc<ResultComponentProviderImpl>,
58//
59// context: PluginContextContainer,
60// }
61//
62// interfaces!(ResultPluginImpl: dyn Plugin);
63//
64// #[provides]
65// impl ResultPlugin for ResultPluginImpl {}
66//
67// impl Plugin for ResultPluginImpl {
68// fn set_context(&self, context: Arc<dyn PluginContext>) -> Result<(), PluginContextInitializationError> {
69// self.context.0.write().unwrap().replace(context);
70// Ok(())
71// }
72//
73// fn remove_context(&self) -> Result<(), PluginContextDeinitializationError> {
74// let mut writer = self.context.0.write().unwrap();
75// *writer = None;
76// Ok(())
77// }
78//
79// fn get_component_provider(&self) -> Result<Option<Arc<dyn ComponentProvider>>, ComponentProviderError> {
80// component_provider!(self.component_provider)
81// }
82// }