reactive_graph_std_date_time/behaviour/entity/
utc_now.rs1use 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 serde_json::Value;
7use serde_json::json;
8use uuid::Uuid;
9
10use reactive_graph_runtime_model::ActionProperties::TRIGGER;
11use reactive_graph_std_result_model::ResultNumberU64Properties::RESULT;
12
13entity_behaviour!(UtcNow, UtcNowFactory, UtcNowFsm, UtcNowBehaviourTransitions, UtcNowValidator);
14
15behaviour_validator!(UtcNowValidator, Uuid, ReactiveEntity, TRIGGER.as_ref(), RESULT.as_ref());
16
17impl BehaviourInit<Uuid, ReactiveEntity> for UtcNowBehaviourTransitions {
18 fn init(&self) -> Result<(), BehaviourInitializationFailed> {
19 if let Some(trigger) = self.reactive_instance.get(TRIGGER) {
20 if trigger.as_bool().unwrap_or(false) {
21 self.reactive_instance.set(RESULT, json!(chrono::Utc::now().to_rfc3339()));
22 }
23 }
24 Ok(())
25 }
26}
27
28impl BehaviourConnect<Uuid, ReactiveEntity> for UtcNowBehaviourTransitions {
29 fn connect(&self) -> Result<(), BehaviourConnectFailed> {
30 let reactive_instance = self.reactive_instance.clone();
31 self.property_observers.observe_with_handle(TRIGGER.as_ref(), move |trigger: &Value| {
32 if !trigger.as_bool().unwrap_or(false) {
33 return;
34 }
35 reactive_instance.set(RESULT, json!(chrono::Utc::now().to_rfc3339()));
36 });
37 Ok(())
38 }
39}
40
41impl BehaviourShutdown<Uuid, ReactiveEntity> for UtcNowBehaviourTransitions {}
42impl BehaviourTransitions<Uuid, ReactiveEntity> for UtcNowBehaviourTransitions {}