reactive_graph_std_random/
plugin.rs1use 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}