reactive_graph_std_value/
plugin.rs

1use reactive_graph_plugin_api::EntityComponentBehaviourRegistry;
2use reactive_graph_plugin_api::prelude::plugin::*;
3use reactive_graph_plugin_api::prelude::providers::*;
4
5use crate::behaviour::component::value_debugger::VALUE_DEBUGGER_BEHAVIOURS;
6
7export_plugin!({
8    "dependencies": [
9        { "name": "reactive-graph-std-base", "version": ">=0.10.0, <0.11.0" }
10    ]
11});
12
13#[injectable]
14pub trait ValuePlugin: Plugin + Send + Sync {}
15
16#[derive(Component)]
17pub struct ValuePluginImpl {
18    component_provider: Arc<dyn TypeProvider<Components> + Send + Sync>,
19
20    #[component(default = "component_provider_registry")]
21    component_provider_registry: Arc<dyn ComponentProviderRegistry + Send + Sync>,
22
23    entity_types_provider: Arc<dyn TypeProvider<EntityTypes> + Send + Sync>,
24
25    #[component(default = "entity_types_provider_registry")]
26    entity_type_provider_registry: Arc<dyn EntityTypeProviderRegistry + Send + Sync>,
27
28    #[component(default = "entity_component_behaviour_registry")]
29    entity_component_behaviour_registry: Arc<dyn EntityComponentBehaviourRegistry + Send + Sync>,
30}
31
32#[async_trait]
33#[component_alias]
34impl Plugin for ValuePluginImpl {
35    async fn activate(&self) -> Result<(), PluginActivationError> {
36        self.component_provider_registry.register_provider(self.component_provider.clone()).await;
37        self.entity_type_provider_registry.register_provider(self.entity_types_provider.clone()).await;
38        self.entity_component_behaviour_registry
39            .register_all(&VALUE_DEBUGGER_BEHAVIOURS.get_factories())
40            .await;
41        Ok(())
42    }
43
44    async fn deactivate(&self) -> Result<(), PluginDeactivationError> {
45        self.entity_component_behaviour_registry
46            .unregister_all(&VALUE_DEBUGGER_BEHAVIOURS.to_component_behaviour_tys())
47            .await;
48        self.entity_type_provider_registry.unregister_provider(self.entity_types_provider.id()).await;
49        self.component_provider_registry.unregister_provider(self.component_provider.id()).await;
50        Ok(())
51    }
52}