reactive_graph_std_numeric/
plugin.rs1use crate::api::numeric_constants_factory::NumericConstantsFactory;
2use crate::behaviour::entity::gate::function::NUMERIC_GATES_F64;
3use crate::behaviour::entity::operation::function::NUMERIC_OPERATIONS_F64;
4use crate::behaviour::entity::operation::function::NUMERIC_OPERATIONS_I64;
5use reactive_graph_plugin_api::EntityBehaviourRegistry;
6use reactive_graph_plugin_api::prelude::plugin::*;
7use reactive_graph_plugin_api::prelude::providers::*;
8
9export_plugin!({
10 "dependencies": [
11 { "name": "reactive-graph-std-base", "version": ">=0.10.0, <0.11.0" }
12 { "name": "reactive-graph-std-trigger", "version": ">=0.10.0, <0.11.0" }
13 { "name": "reactive-graph-std-result", "version": ">=0.10.0, <0.11.0" }
14 ]
15});
16
17#[injectable]
18pub trait NumericPlugin: Plugin + Send + Sync {}
19
20#[derive(Component)]
21pub struct NumericPluginImpl {
22 component_provider: Arc<dyn TypeProvider<Components> + Send + Sync>,
23
24 #[component(default = "component_provider_registry")]
25 component_provider_registry: Arc<dyn ComponentProviderRegistry + Send + Sync>,
26
27 entity_types_provider: Arc<dyn TypeProvider<EntityTypes> + Send + Sync>,
28
29 #[component(default = "entity_types_provider_registry")]
30 entity_type_provider_registry: Arc<dyn EntityTypeProviderRegistry + Send + Sync>,
31
32 #[component(default = "entity_behaviour_registry")]
33 entity_behaviour_registry: Arc<dyn EntityBehaviourRegistry + Send + Sync>,
34
35 numeric_constants_factory: Arc<dyn NumericConstantsFactory + Send + Sync>,
36}
37
38#[async_trait]
39#[component_alias]
40impl Plugin for NumericPluginImpl {
41 async fn activate(&self) -> Result<(), PluginActivationError> {
42 self.component_provider_registry.register_provider(self.component_provider.clone()).await;
43 self.entity_type_provider_registry.register_provider(self.entity_types_provider.clone()).await;
44 self.entity_behaviour_registry.register_all(&NUMERIC_OPERATIONS_F64.get_factories()).await;
45 self.entity_behaviour_registry.register_all(&NUMERIC_OPERATIONS_I64.get_factories()).await;
46 self.entity_behaviour_registry.register_all(&NUMERIC_GATES_F64.get_factories()).await;
47 self.numeric_constants_factory.create_numeric_constants().await;
48 Ok(())
49 }
50
51 async fn deactivate(&self) -> Result<(), PluginDeactivationError> {
52 self.entity_behaviour_registry
53 .unregister_all(&NUMERIC_GATES_F64.to_entity_behaviour_tys())
54 .await;
55 self.entity_behaviour_registry
56 .unregister_all(&NUMERIC_OPERATIONS_I64.to_entity_behaviour_tys())
57 .await;
58 self.entity_behaviour_registry
59 .unregister_all(&NUMERIC_OPERATIONS_F64.to_entity_behaviour_tys())
60 .await;
61 self.entity_type_provider_registry.unregister_provider(self.entity_types_provider.id()).await;
62 self.component_provider_registry.unregister_provider(self.component_provider.id()).await;
63 Ok(())
64 }
65}