reactive_graph_std_random/behaviour/entity/
random_f64.rs1use rand::Rng;
2use reactive_graph_behaviour_model_api::behaviour_validator;
3use reactive_graph_behaviour_model_api::prelude::*;
4use reactive_graph_behaviour_model_impl::entity_behaviour;
5use reactive_graph_graph::prelude::*;
6use reactive_graph_reactive_model_impl::ReactiveEntity;
7use reactive_graph_runtime_model::ActionProperties::TRIGGER;
8use serde_json::Value;
9use serde_json::json;
10use uuid::Uuid;
11
12use reactive_graph_std_result_model::ResultNumberF64Properties::RESULT;
13
14entity_behaviour!(RandomF64, RandomF64Factory, RandomF64Fsm, RandomF64BehaviourTransitions, RandomF64Validator);
15
16behaviour_validator!(RandomF64Validator, Uuid, ReactiveEntity, TRIGGER.as_ref(), RESULT.as_ref());
17
18impl BehaviourInit<Uuid, ReactiveEntity> for RandomF64BehaviourTransitions {
19 fn init(&self) -> Result<(), BehaviourInitializationFailed> {
20 if self.reactive_instance.as_bool(TRIGGER).unwrap_or(false) {
21 self.reactive_instance.set(RESULT, random());
22 }
23 Ok(())
24 }
25}
26
27impl BehaviourConnect<Uuid, ReactiveEntity> for RandomF64BehaviourTransitions {
28 fn connect(&self) -> Result<(), BehaviourConnectFailed> {
29 let reactive_instance = self.reactive_instance.clone();
30 self.property_observers.observe_with_handle(TRIGGER.as_ref(), move |trigger: &Value| {
31 if !trigger.as_bool().unwrap_or(false) {
32 return;
33 }
34 reactive_instance.set(RESULT, random());
35 });
36 Ok(())
37 }
38}
39
40impl BehaviourShutdown<Uuid, ReactiveEntity> for RandomF64BehaviourTransitions {}
41impl BehaviourTransitions<Uuid, ReactiveEntity> for RandomF64BehaviourTransitions {}
42
43fn random() -> Value {
44 let mut rng = rand::rng();
45 json!(rng.random::<f64>())
46}