reactive_graph_std_random/behaviour/entity/
random_uuid.rs

1use reactive_graph_behaviour_model_api::behaviour_validator;
2use reactive_graph_behaviour_model_api::prelude::*;
3use reactive_graph_behaviour_model_impl::entity_behaviour;
4use reactive_graph_graph::prelude::*;
5use reactive_graph_reactive_model_impl::ReactiveEntity;
6use reactive_graph_runtime_model::ActionProperties::TRIGGER;
7use serde_json::Value;
8use serde_json::json;
9use uuid::Uuid;
10
11use reactive_graph_std_result_model::ResultStringProperties::RESULT;
12
13entity_behaviour!(RandomUuid, RandomUuidFactory, RandomUuidFsm, RandomUuidBehaviourTransitions, RandomUuidValidator);
14
15behaviour_validator!(RandomUuidValidator, Uuid, ReactiveEntity, TRIGGER.as_ref(), RESULT.as_ref());
16
17impl BehaviourInit<Uuid, ReactiveEntity> for RandomUuidBehaviourTransitions {
18    fn init(&self) -> Result<(), BehaviourInitializationFailed> {
19        if self.reactive_instance.as_bool(TRIGGER).unwrap_or(false) {
20            self.reactive_instance.set(RESULT, random());
21        }
22        Ok(())
23    }
24}
25
26impl BehaviourConnect<Uuid, ReactiveEntity> for RandomUuidBehaviourTransitions {
27    fn connect(&self) -> Result<(), BehaviourConnectFailed> {
28        let reactive_instance = self.reactive_instance.clone();
29        self.property_observers.observe_with_handle(TRIGGER.as_ref(), move |trigger: &Value| {
30            if !trigger.as_bool().unwrap_or(false) {
31                return;
32            }
33            reactive_instance.set(RESULT, random());
34        });
35        Ok(())
36    }
37}
38
39impl BehaviourShutdown<Uuid, ReactiveEntity> for RandomUuidBehaviourTransitions {}
40impl BehaviourTransitions<Uuid, ReactiveEntity> for RandomUuidBehaviourTransitions {}
41
42fn random() -> Value {
43    json!(Uuid::new_v4())
44}