reactive_graph_std_arithmetic/
plugin.rs1use crate::behaviour::entity::counter::CounterFactory;
2use crate::behaviour::entity::gate::function::ARITHMETIC_GATES_F64;
3use crate::behaviour::entity::gate::function::ARITHMETIC_GATES_I64;
4use crate::behaviour::entity::gate::function::ARITHMETIC_GATES_U64;
5use crate::behaviour::entity::operation::function::ARITHMETIC_OPERATIONS_F64;
6use crate::behaviour::entity::operation::function::ARITHMETIC_OPERATIONS_I64;
7use crate::behaviour::entity::operation::function::ARITHMETIC_OPERATIONS_U64;
8use reactive_graph_plugin_api::EntityBehaviourRegistry;
9use reactive_graph_plugin_api::prelude::plugin::*;
10use reactive_graph_plugin_api::prelude::providers::*;
11use reactive_graph_std_arithmetic_model::BEHAVIOUR_COUNTER;
12use reactive_graph_std_arithmetic_model::ENTITY_BEHAVIOUR_COUNTER;
13
14export_plugin!({
15 "dependencies": [
16 { "name": "reactive-graph-std-base", "version": ">=0.10.0, <0.11.0" }
17 { "name": "reactive-graph-std-trigger", "version": ">=0.10.0, <0.11.0" }
18 { "name": "reactive-graph-std-result", "version": ">=0.10.0, <0.11.0" }
19 ]
20});
21
22#[injectable]
23pub trait ArithmeticPlugin: Plugin + Send + Sync {}
24
25#[derive(Component)]
26pub struct ArithmeticPluginImpl {
27 component_provider: Arc<dyn TypeProvider<Components> + Send + Sync>,
28
29 #[component(default = "component_provider_registry")]
30 component_provider_registry: Arc<dyn ComponentProviderRegistry + Send + Sync>,
31
32 entity_types_provider: Arc<dyn TypeProvider<EntityTypes> + Send + Sync>,
33
34 #[component(default = "entity_types_provider_registry")]
35 entity_type_provider_registry: Arc<dyn EntityTypeProviderRegistry + Send + Sync>,
36
37 #[component(default = "entity_behaviour_registry")]
38 entity_behaviour_registry: Arc<dyn EntityBehaviourRegistry + Send + Sync>,
39}
40
41#[async_trait]
42#[component_alias]
43impl Plugin for ArithmeticPluginImpl {
44 async fn activate(&self) -> Result<(), PluginActivationError> {
45 self.component_provider_registry.register_provider(self.component_provider.clone()).await;
46 self.entity_type_provider_registry.register_provider(self.entity_types_provider.clone()).await;
47 self.entity_behaviour_registry.register_all(&ARITHMETIC_OPERATIONS_F64.get_factories()).await;
48 self.entity_behaviour_registry.register_all(&ARITHMETIC_OPERATIONS_I64.get_factories()).await;
49 self.entity_behaviour_registry.register_all(&ARITHMETIC_OPERATIONS_U64.get_factories()).await;
50 self.entity_behaviour_registry.register_all(&ARITHMETIC_GATES_F64.get_factories()).await;
51 self.entity_behaviour_registry.register_all(&ARITHMETIC_GATES_I64.get_factories()).await;
52 self.entity_behaviour_registry.register_all(&ARITHMETIC_GATES_U64.get_factories()).await;
53 self.entity_behaviour_registry
54 .register(ENTITY_BEHAVIOUR_COUNTER.clone(), Arc::new(CounterFactory::new(BEHAVIOUR_COUNTER.clone())))
55 .await;
56 Ok(())
57 }
58
59 async fn deactivate(&self) -> Result<(), PluginDeactivationError> {
60 self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_COUNTER).await;
61 self.entity_behaviour_registry
62 .unregister_all(&ARITHMETIC_GATES_U64.to_entity_behaviour_tys())
63 .await;
64 self.entity_behaviour_registry
65 .unregister_all(&ARITHMETIC_GATES_I64.to_entity_behaviour_tys())
66 .await;
67 self.entity_behaviour_registry
68 .unregister_all(&ARITHMETIC_GATES_F64.to_entity_behaviour_tys())
69 .await;
70 self.entity_behaviour_registry
71 .unregister_all(&ARITHMETIC_OPERATIONS_U64.to_entity_behaviour_tys())
72 .await;
73 self.entity_behaviour_registry
74 .unregister_all(&ARITHMETIC_OPERATIONS_I64.to_entity_behaviour_tys())
75 .await;
76 self.entity_behaviour_registry
77 .unregister_all(&ARITHMETIC_OPERATIONS_F64.to_entity_behaviour_tys())
78 .await;
79 self.entity_type_provider_registry.unregister_provider(self.entity_types_provider.id()).await;
80 self.component_provider_registry.unregister_provider(self.component_provider.id()).await;
81 Ok(())
82 }
83}