reactive_graph_behaviour_model_impl/behaviour/relation/
transition.rs1#[macro_export]
2macro_rules! relation_behaviour_transitions {
3 ($transitions: ident $(, $fn_name:ident, $fn_ident: ident)*) => {
4 pub struct $transitions {
5 pub reactive_instance: reactive_graph_reactive_model_impl::ReactiveRelation,
6 pub outbound_property_observers: $crate::EntityPropertyObserverContainerImpl,
7 pub property_observers: $crate::RelationPropertyObserverContainerImpl,
8 pub inbound_property_observers: $crate::EntityPropertyObserverContainerImpl,
9 pub ty: reactive_graph_behaviour_model_api::BehaviourTypeId,
10 $(pub $fn_name: $fn_ident,)*
11 }
12
13 impl $transitions {
14 pub fn new(reactive_instance: reactive_graph_reactive_model_impl::ReactiveRelation, ty: reactive_graph_behaviour_model_api::BehaviourTypeId $(, $fn_name: $fn_ident)*) -> Self {
15 let outbound_property_observers = $crate::EntityPropertyObserverContainerImpl::new(reactive_instance.outbound.clone());
16 let property_observers = $crate::RelationPropertyObserverContainerImpl::new(reactive_instance.clone());
17 let inbound_property_observers = $crate::EntityPropertyObserverContainerImpl::new(reactive_instance.inbound.clone());
18 $transitions {
19 reactive_instance,
20 outbound_property_observers,
21 property_observers,
22 inbound_property_observers,
23 ty,
24 $($fn_name,)*
25 }
26 }
27 }
28
29 impl $crate::BehaviourDisconnect<reactive_graph_graph::RelationInstanceId, reactive_graph_reactive_model_impl::ReactiveRelation> for $transitions {
30 fn disconnect(&self) -> Result<(), $crate::BehaviourDisconnectFailed> {
31 self.inbound_property_observers.remove_all_observers();
32 self.property_observers.remove_all_observers();
33 self.outbound_property_observers.remove_all_observers();
34 Ok(())
35 }
36 }
37
38 impl reactive_graph_reactive_model_api::ReactiveInstanceContainer<reactive_graph_graph::RelationInstanceId, reactive_graph_reactive_model_impl::ReactiveRelation> for $transitions {
39 fn get_reactive_instance(&self) -> &reactive_graph_reactive_model_impl::ReactiveRelation {
40 &self.reactive_instance
41 }
42 }
43
44 impl Drop for $transitions {
45 fn drop(&mut self) {
46 let _ = self.disconnect();
47 self.reactive_instance.remove_behaviour(&self.ty);
48 let _ = self.shutdown();
49 }
50 }
51 };
52}