reactive_graph_behaviour_model_impl/behaviour/relation/
container.rs

1use reactive_graph_behaviour_model_api::prelude::*;
2
3use reactive_graph_graph::RelationInstanceId;
4use reactive_graph_reactive_model_api::ReactiveInstanceContainer;
5use reactive_graph_reactive_model_impl::ReactiveEntity;
6use reactive_graph_reactive_model_impl::ReactiveRelation;
7
8pub trait BehaviourRelationInstanceContainer: ReactiveInstanceContainer<RelationInstanceId, ReactiveRelation> {
9    /// Returns the outbound instance of the behaviour.
10    fn get_outbound(&self) -> &ReactiveEntity;
11
12    /// Returns the inbound instance of the behaviour.
13    fn get_inbound(&self) -> &ReactiveEntity;
14}
15
16pub struct RelationReactiveInstanceContainerImpl {
17    pub reactive_instance: ReactiveRelation,
18}
19
20impl ReactiveInstanceContainer<RelationInstanceId, ReactiveRelation> for RelationReactiveInstanceContainerImpl {
21    fn get_reactive_instance(&self) -> &ReactiveRelation {
22        &self.reactive_instance
23    }
24}
25
26impl BehaviourTypesContainer for RelationReactiveInstanceContainerImpl {
27    fn get_behaviours(&self) -> Vec<BehaviourTypeId> {
28        self.reactive_instance.get_behaviours()
29    }
30
31    fn add_behaviour(&self, ty: BehaviourTypeId) {
32        self.reactive_instance.add_behaviour(ty);
33    }
34
35    fn remove_behaviour(&self, ty: &BehaviourTypeId) {
36        self.reactive_instance.remove_behaviour(ty);
37    }
38
39    fn behaves_as(&self, ty: &BehaviourTypeId) -> bool {
40        self.reactive_instance.behaves_as(ty)
41    }
42}
43
44impl BehaviourRelationInstanceContainer for RelationReactiveInstanceContainerImpl {
45    fn get_outbound(&self) -> &ReactiveEntity {
46        &self.reactive_instance.outbound
47    }
48
49    fn get_inbound(&self) -> &ReactiveEntity {
50        &self.reactive_instance.inbound
51    }
52}