reactive_graph_plugin_delegates/
relation_component_behaviour_registry_impl.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4
5use reactive_graph_behaviour_model_api::prelude::*;
6use reactive_graph_graph::RelationInstanceId;
7use reactive_graph_reactive_model_impl::ReactiveRelation;
8
9pub struct RelationComponentBehaviourRegistryDelegate {
10    relation_component_behaviour_manager: Arc<dyn reactive_graph_behaviour_service_api::RelationComponentBehaviourManager + Send + Sync>,
11    relation_component_behaviour_registry: Arc<dyn reactive_graph_behaviour_service_api::RelationComponentBehaviourRegistry + Send + Sync>,
12    reactive_relation_manager: Arc<dyn reactive_graph_reactive_service_api::ReactiveRelationManager + Send + Sync>,
13}
14
15impl RelationComponentBehaviourRegistryDelegate {
16    pub fn new(
17        relation_component_behaviour_manager: Arc<dyn reactive_graph_behaviour_service_api::RelationComponentBehaviourManager + Send + Sync>,
18        relation_component_behaviour_registry: Arc<dyn reactive_graph_behaviour_service_api::RelationComponentBehaviourRegistry + Send + Sync>,
19        reactive_relation_manager: Arc<dyn reactive_graph_reactive_service_api::ReactiveRelationManager + Send + Sync>,
20    ) -> Self {
21        Self {
22            relation_component_behaviour_manager,
23            relation_component_behaviour_registry,
24            reactive_relation_manager,
25        }
26    }
27}
28
29#[async_trait]
30impl reactive_graph_plugin_api::RelationComponentBehaviourRegistry for RelationComponentBehaviourRegistryDelegate {
31    async fn register(
32        &self,
33        component_behaviour_ty: ComponentBehaviourTypeId,
34        factory: Arc<dyn BehaviourFactory<RelationInstanceId, ReactiveRelation> + Send + Sync>,
35    ) {
36        self.relation_component_behaviour_registry.register(component_behaviour_ty.clone(), factory);
37        self.reactive_relation_manager.add_behaviour_to_all_relation_components(&component_behaviour_ty);
38    }
39
40    async fn unregister(&self, component_behaviour_ty: &ComponentBehaviourTypeId) {
41        self.relation_component_behaviour_registry.unregister(component_behaviour_ty);
42        self.relation_component_behaviour_manager
43            .remove_behaviours_by_behaviour(&component_behaviour_ty.behaviour_ty);
44    }
45}