reactive_graph_std_connector/behaviour/relation/complex_connector/
mod.rs1use reactive_graph_behaviour_model_api::prelude::*;
2use reactive_graph_behaviour_model_impl::relation_behaviour;
3use reactive_graph_graph::prelude::*;
4use reactive_graph_reactive_model_impl::ReactiveRelation;
5use serde_json::Value;
6
7pub use function::COMPLEX_CONNECTOR_BEHAVIOURS;
8pub use function::ComplexConnectorFunction;
9use reactive_graph_std_connector_model::ConnectorProperties::INBOUND_PROPERTY_NAME;
10use reactive_graph_std_connector_model::ConnectorProperties::OUTBOUND_PROPERTY_NAME;
11
12use crate::behaviour::relation::complex_connector::validator::ComplexConnectorValidator;
13
14pub mod function;
15pub mod validator;
16
17relation_behaviour!(
18 ComplexConnector,
19 ComplexConnectorFactory,
20 ComplexConnectorFsm,
21 ComplexConnectorBehaviourTransitions,
22 ComplexConnectorValidator,
23 f,
24 ComplexConnectorFunction
25);
26
27impl ComplexConnectorBehaviourTransitions {
28 fn get_outbound_property_name(&self) -> Option<String> {
29 self.reactive_instance.as_string(OUTBOUND_PROPERTY_NAME.as_ref())
30 }
31
32 fn get_inbound_property_name(&self) -> Option<String> {
33 self.reactive_instance.as_string(INBOUND_PROPERTY_NAME.as_ref())
34 }
35}
36
37impl BehaviourInit<RelationInstanceId, ReactiveRelation> for ComplexConnectorBehaviourTransitions {}
38
39impl BehaviourShutdown<RelationInstanceId, ReactiveRelation> for ComplexConnectorBehaviourTransitions {}
40
41impl BehaviourConnect<RelationInstanceId, ReactiveRelation> for ComplexConnectorBehaviourTransitions {
42 fn connect(&self) -> Result<(), BehaviourConnectFailed> {
43 let outbound_property_name = self.get_outbound_property_name().ok_or(BehaviourConnectFailed {})?;
44 let inbound_property_name = self.get_inbound_property_name().ok_or(BehaviourConnectFailed {})?;
45 let f = self.f;
46 let relation_instance = self.reactive_instance.clone();
47 self.outbound_property_observers
48 .observe_with_handle(&outbound_property_name, move |value: &Value| {
49 f(value.clone(), inbound_property_name.clone(), relation_instance.clone());
51 });
52 Ok(())
53 }
54}
55
56impl BehaviourTransitions<RelationInstanceId, ReactiveRelation> for ComplexConnectorBehaviourTransitions {}