reactive_graph_plugin_delegates/
relation_component_behaviour_registry_impl.rs1use 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}