reactive_graph_behaviour_model_impl/behaviour/entity/
transition.rs

1#[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}