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