reactive_graph_behaviour_model_api/
transition.rs1use reactive_graph_reactive_model_api::ReactiveInstance;
2use reactive_graph_reactive_model_api::ReactiveInstanceContainer;
3
4use crate::BehaviourConnectFailed;
5use crate::BehaviourDisconnectFailed;
6use crate::BehaviourInitializationFailed;
7use crate::BehaviourReconnectFailed;
8use crate::BehaviourShutdownFailed;
9use crate::BehaviourTypesContainer;
10
11#[allow(drop_bounds)]
12pub trait BehaviourTransitions<ID: Clone, T: ReactiveInstance<ID> + BehaviourTypesContainer>:
13 ReactiveInstanceContainer<ID, T> + BehaviourInit<ID, T> + BehaviourShutdown<ID, T> + BehaviourConnect<ID, T> + BehaviourDisconnect<ID, T> + Drop
14{
15 fn reconnect(&self) -> Result<(), BehaviourReconnectFailed> {
17 self.disconnect().map_err(BehaviourReconnectFailed::BehaviourDisconnectFailed)?;
18 self.connect().map_err(BehaviourReconnectFailed::BehaviourConnectFailed)?;
19 Ok(())
20 }
21}
22
23pub trait BehaviourInit<ID: Clone, T: ReactiveInstance<ID>> {
24 fn init(&self) -> Result<(), BehaviourInitializationFailed> {
26 Ok(())
27 }
28}
29
30pub trait BehaviourShutdown<ID: Clone, T: ReactiveInstance<ID>> {
31 fn shutdown(&self) -> Result<(), BehaviourShutdownFailed> {
33 Ok(())
34 }
35}
36
37pub trait BehaviourConnect<ID: Clone, T: ReactiveInstance<ID>> {
38 fn connect(&self) -> Result<(), BehaviourConnectFailed> {
40 Ok(())
41 }
42}
43
44pub trait BehaviourDisconnect<ID: Clone, T: ReactiveInstance<ID>> {
45 fn disconnect(&self) -> Result<(), BehaviourDisconnectFailed> {
47 Ok(())
48 }
49}