reactive_graph_plugin_api/behaviours/entities/
entity_behaviour_registry.rs1use std::ops::Deref;
2use std::sync::Arc;
3
4use async_trait::async_trait;
5use tokio_stream::StreamExt;
6use uuid::Uuid;
7
8use reactive_graph_behaviour_model_api::prelude::*;
9
10use reactive_graph_reactive_model_impl::ReactiveEntity;
11
12#[async_trait]
13pub trait EntityBehaviourRegistry: Send + Sync {
14 #[allow(unused_variables)]
18 async fn register(&self, entity_behaviour_ty: EntityBehaviourTypeId, factory: Arc<dyn BehaviourFactory<Uuid, ReactiveEntity> + Send + Sync>);
19
20 async fn register_all(&self, factories: &BehaviourFactories<Uuid, ReactiveEntity>) {
21 let mut factories = tokio_stream::iter(factories.deref().clone());
22 while let Some((ty, factory)) = factories.next().await {
23 self.register(EntityBehaviourTypeId::from(&ty), factory).await
24 }
25 }
26
27 #[allow(unused_variables)]
29 async fn unregister(&self, entity_behaviour_ty: &EntityBehaviourTypeId);
30
31 async fn unregister_all(&self, tys: &EntityBehaviourTypeIds) {
33 let mut tys = tokio_stream::iter(tys.iter());
34 while let Some(ty) = tys.next().await {
35 self.unregister(&ty).await
36 }
37 }
38}