reactive_graph_std_connector/behaviour/component/propagation_counter/
mod.rs

1use reactive_graph_behaviour_model_api::behaviour_validator;
2use reactive_graph_behaviour_model_api::prelude::*;
3use reactive_graph_behaviour_model_impl::relation_behaviour;
4use reactive_graph_graph::prelude::*;
5use reactive_graph_reactive_model_impl::ReactiveRelation;
6use serde_json::json;
7
8use reactive_graph_std_connector_model::ConnectorProperties::OUTBOUND_PROPERTY_NAME;
9use reactive_graph_std_connector_model::PropagationCounterProperties::PROPAGATION_COUNT;
10
11relation_behaviour!(
12    PropagationCounter,
13    PropagationCounterFactory,
14    PropagationCounterFsm,
15    PropagationCounterBehaviourTransitions,
16    PropagationCounterValidator
17);
18
19behaviour_validator!(
20    PropagationCounterValidator,
21    RelationInstanceId,
22    ReactiveRelation,
23    OUTBOUND_PROPERTY_NAME.as_ref(),
24    PROPAGATION_COUNT.as_ref()
25);
26
27impl PropagationCounterBehaviourTransitions {
28    fn get_outbound_property_name(&self) -> Option<String> {
29        self.reactive_instance.as_string(OUTBOUND_PROPERTY_NAME.as_ref())
30    }
31}
32
33impl BehaviourInit<RelationInstanceId, ReactiveRelation> for PropagationCounterBehaviourTransitions {}
34
35impl BehaviourShutdown<RelationInstanceId, ReactiveRelation> for PropagationCounterBehaviourTransitions {}
36
37impl BehaviourConnect<RelationInstanceId, ReactiveRelation> for PropagationCounterBehaviourTransitions {
38    fn connect(&self) -> Result<(), BehaviourConnectFailed> {
39        let outbound_property_name = self.get_outbound_property_name().ok_or(BehaviourConnectFailed {})?;
40        let reactive_instance = self.reactive_instance.clone();
41        self.outbound_property_observers.observe_with_handle(outbound_property_name.as_str(), move |_| {
42            if let Some(mut count) = reactive_instance.as_u64(PROPAGATION_COUNT) {
43                count += 1;
44                reactive_instance.set(PROPAGATION_COUNT.as_ref(), json!(count));
45            }
46        });
47        Ok(())
48    }
49}
50
51impl BehaviourTransitions<RelationInstanceId, ReactiveRelation> for PropagationCounterBehaviourTransitions {}