reactive_graph_std_random/
plugin.rs

1use crate::behaviour::entity::random_bool::RandomBoolFactory;
2use crate::behaviour::entity::random_f64::RandomF64Factory;
3use crate::behaviour::entity::random_f64_pseudo::RandomF64PseudoFactory;
4use crate::behaviour::entity::random_f64_range::RandomF64RangeFactory;
5use crate::behaviour::entity::random_i64::RandomI64Factory;
6use crate::behaviour::entity::random_i64_pseudo::RandomI64PseudoFactory;
7use crate::behaviour::entity::random_i64_range::RandomI64RangeFactory;
8use crate::behaviour::entity::random_string::RandomStringFactory;
9use crate::behaviour::entity::random_u64::RandomU64Factory;
10use crate::behaviour::entity::random_u64_pseudo::RandomU64PseudoFactory;
11use crate::behaviour::entity::random_u64_range::RandomU64RangeFactory;
12use crate::behaviour::entity::random_uuid::RandomUuidFactory;
13use reactive_graph_plugin_api::EntityBehaviourRegistry;
14use reactive_graph_plugin_api::prelude::plugin::*;
15use reactive_graph_plugin_api::prelude::providers::*;
16use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_BOOL;
17use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_F64;
18use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_F64_PSEUDO;
19use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_F64_RANGE;
20use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_I64;
21use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_I64_PSEUDO;
22use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_I64_RANGE;
23use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_STRING;
24use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_U64;
25use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_U64_PSEUDO;
26use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_U64_RANGE;
27use reactive_graph_std_random_model::BEHAVIOUR_RANDOM_UUID;
28use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_BOOL;
29use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_F64;
30use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_F64_PSEUDO;
31use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_F64_RANGE;
32use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_I64;
33use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_I64_PSEUDO;
34use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_I64_RANGE;
35use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_STRING;
36use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_U64;
37use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_U64_PSEUDO;
38use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_U64_RANGE;
39use reactive_graph_std_random_model::ENTITY_BEHAVIOUR_RANDOM_UUID;
40
41export_plugin!({
42    "dependencies": [
43        { "name": "reactive-graph-std-base", "version": ">=0.10.0, <0.11.0" },
44        { "name": "reactive-graph-std-result", "version": ">=0.10.0, <0.11.0" },
45        { "name": "reactive-graph-std-trigger", "version": ">=0.10.0, <0.11.0" }
46    ]
47});
48
49#[injectable]
50pub trait RandomPlugin: Plugin + Send + Sync {}
51
52#[derive(Component)]
53pub struct RandomPluginImpl {
54    component_provider: Arc<dyn TypeProvider<Components> + Send + Sync>,
55
56    #[component(default = "component_provider_registry")]
57    component_provider_registry: Arc<dyn ComponentProviderRegistry + Send + Sync>,
58
59    entity_types_provider: Arc<dyn TypeProvider<EntityTypes> + Send + Sync>,
60
61    #[component(default = "entity_types_provider_registry")]
62    entity_type_provider_registry: Arc<dyn EntityTypeProviderRegistry + Send + Sync>,
63
64    #[component(default = "entity_behaviour_registry")]
65    entity_behaviour_registry: Arc<dyn EntityBehaviourRegistry + Send + Sync>,
66}
67
68#[async_trait]
69#[component_alias]
70impl Plugin for RandomPluginImpl {
71    async fn activate(&self) -> Result<(), PluginActivationError> {
72        self.component_provider_registry.register_provider(self.component_provider.clone()).await;
73        self.entity_type_provider_registry.register_provider(self.entity_types_provider.clone()).await;
74        self.entity_behaviour_registry
75            .register(ENTITY_BEHAVIOUR_RANDOM_BOOL.clone(), Arc::new(RandomBoolFactory::new(BEHAVIOUR_RANDOM_BOOL.clone())))
76            .await;
77        self.entity_behaviour_registry
78            .register(ENTITY_BEHAVIOUR_RANDOM_F64.clone(), Arc::new(RandomF64Factory::new(BEHAVIOUR_RANDOM_F64.clone())))
79            .await;
80        self.entity_behaviour_registry
81            .register(
82                ENTITY_BEHAVIOUR_RANDOM_F64_PSEUDO.clone(),
83                Arc::new(RandomF64PseudoFactory::new(BEHAVIOUR_RANDOM_F64_PSEUDO.clone())),
84            )
85            .await;
86        self.entity_behaviour_registry
87            .register(
88                ENTITY_BEHAVIOUR_RANDOM_F64_RANGE.clone(),
89                Arc::new(RandomF64RangeFactory::new(BEHAVIOUR_RANDOM_F64_RANGE.clone())),
90            )
91            .await;
92        self.entity_behaviour_registry
93            .register(ENTITY_BEHAVIOUR_RANDOM_I64.clone(), Arc::new(RandomI64Factory::new(BEHAVIOUR_RANDOM_I64.clone())))
94            .await;
95        self.entity_behaviour_registry
96            .register(
97                ENTITY_BEHAVIOUR_RANDOM_I64_PSEUDO.clone(),
98                Arc::new(RandomI64PseudoFactory::new(BEHAVIOUR_RANDOM_I64_PSEUDO.clone())),
99            )
100            .await;
101        self.entity_behaviour_registry
102            .register(
103                ENTITY_BEHAVIOUR_RANDOM_I64_RANGE.clone(),
104                Arc::new(RandomI64RangeFactory::new(BEHAVIOUR_RANDOM_I64_RANGE.clone())),
105            )
106            .await;
107        self.entity_behaviour_registry
108            .register(ENTITY_BEHAVIOUR_RANDOM_STRING.clone(), Arc::new(RandomStringFactory::new(BEHAVIOUR_RANDOM_STRING.clone())))
109            .await;
110        self.entity_behaviour_registry
111            .register(ENTITY_BEHAVIOUR_RANDOM_U64.clone(), Arc::new(RandomU64Factory::new(BEHAVIOUR_RANDOM_U64.clone())))
112            .await;
113        self.entity_behaviour_registry
114            .register(
115                ENTITY_BEHAVIOUR_RANDOM_U64_PSEUDO.clone(),
116                Arc::new(RandomU64PseudoFactory::new(BEHAVIOUR_RANDOM_U64_PSEUDO.clone())),
117            )
118            .await;
119        self.entity_behaviour_registry
120            .register(
121                ENTITY_BEHAVIOUR_RANDOM_U64_RANGE.clone(),
122                Arc::new(RandomU64RangeFactory::new(BEHAVIOUR_RANDOM_U64_RANGE.clone())),
123            )
124            .await;
125        self.entity_behaviour_registry
126            .register(ENTITY_BEHAVIOUR_RANDOM_UUID.clone(), Arc::new(RandomUuidFactory::new(BEHAVIOUR_RANDOM_UUID.clone())))
127            .await;
128        Ok(())
129    }
130
131    async fn deactivate(&self) -> Result<(), PluginDeactivationError> {
132        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_BOOL).await;
133        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_F64).await;
134        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_F64_PSEUDO).await;
135        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_F64_RANGE).await;
136        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_I64).await;
137        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_I64_PSEUDO).await;
138        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_I64_RANGE).await;
139        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_STRING).await;
140        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_U64).await;
141        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_U64_PSEUDO).await;
142        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_U64_RANGE).await;
143        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_UUID).await;
144
145        self.entity_behaviour_registry.unregister(&ENTITY_BEHAVIOUR_RANDOM_BOOL).await;
146        self.entity_type_provider_registry.unregister_provider(self.entity_types_provider.id()).await;
147        self.component_provider_registry.unregister_provider(self.component_provider.id()).await;
148        Ok(())
149    }
150}