reactive_graph_std_arithmetic/behaviour/entity/operation/
behaviour_u64.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 serde_json::Value;
7use serde_json::json;
8use uuid::Uuid;
9
10use reactive_graph_std_arithmetic_model::ArithmeticOperationProperties::LHS;
11use reactive_graph_std_arithmetic_model::ArithmeticOperationProperties::RESULT;
12
13use crate::behaviour::as_u64;
14use crate::behaviour::entity::operation::function::ArithmeticOperationU64Function;
15
16entity_behaviour!(
17    ArithmeticOperationU64,
18    ArithmeticOperationU64Factory,
19    ArithmeticOperationU64Fsm,
20    ArithmeticOperationU64BehaviourTransitions,
21    ArithmeticOperationU64Validator,
22    f,
23    ArithmeticOperationU64Function
24);
25
26behaviour_validator!(ArithmeticOperationU64Validator, Uuid, ReactiveEntity, LHS.as_ref(), RESULT.as_ref());
27
28impl BehaviourInit<Uuid, ReactiveEntity> for ArithmeticOperationU64BehaviourTransitions {
29    fn init(&self) -> Result<(), BehaviourInitializationFailed> {
30        let lhs = self.reactive_instance.get(LHS).and_then(as_u64).ok_or(BehaviourInitializationFailed {})?;
31        let f = self.f;
32        self.reactive_instance.set(RESULT, json!(f(lhs)));
33        Ok(())
34    }
35}
36
37impl BehaviourConnect<Uuid, ReactiveEntity> for ArithmeticOperationU64BehaviourTransitions {
38    fn connect(&self) -> Result<(), BehaviourConnectFailed> {
39        let reactive_instance = self.property_observers.reactive_instance.clone();
40        let f = self.f;
41        self.property_observers.observe_with_handle(LHS.as_ref(), move |v: &Value| {
42            if let Some(v) = as_u64(v.clone()) {
43                reactive_instance.set(RESULT, json!(f(v)));
44            }
45        });
46        Ok(())
47    }
48}
49
50impl BehaviourShutdown<Uuid, ReactiveEntity> for ArithmeticOperationU64BehaviourTransitions {}
51impl BehaviourTransitions<Uuid, ReactiveEntity> for ArithmeticOperationU64BehaviourTransitions {}