reactive_graph_plugin_api/instances/relations/
relation_instance_manager.rs1use serde_json::Value;
2use uuid::Uuid;
3
4use reactive_graph_behaviour_model_api::BehaviourTypeId;
5use reactive_graph_graph::ComponentTypeId;
6use reactive_graph_graph::Mutability;
7use reactive_graph_graph::RelationInstance;
8use reactive_graph_graph::RelationInstanceId;
9use reactive_graph_graph::RelationTypeId;
10use reactive_graph_reactive_model_impl::ReactiveRelation;
11use reactive_graph_reactive_service_api::ReactiveRelationComponentAddError;
12use reactive_graph_reactive_service_api::ReactiveRelationComponentRemoveError;
13use reactive_graph_reactive_service_api::ReactiveRelationCreationError;
14use reactive_graph_reactive_service_api::ReactiveRelationPropertyAddError;
15use reactive_graph_reactive_service_api::ReactiveRelationPropertyRemoveError;
16use reactive_graph_reactive_service_api::ReactiveRelationRegistrationError;
17
18#[derive(Debug)]
19pub enum RelationInstanceManagerError {
20 InitializationError,
21}
22
23pub trait RelationInstanceManager: Send + Sync {
24 fn has(&self, id: &RelationInstanceId) -> bool;
27
28 fn get(&self, id: &RelationInstanceId) -> Option<ReactiveRelation>;
31
32 fn get_by_outbound_entity(&self, outbound_entity_id: Uuid) -> Vec<ReactiveRelation>;
34
35 fn get_by_inbound_entity(&self, inbound_entity_id: Uuid) -> Vec<ReactiveRelation>;
37
38 fn get_all(&self) -> Vec<ReactiveRelation>;
40
41 fn get_by_type(&self, ty: &RelationTypeId) -> Vec<ReactiveRelation>;
43
44 fn get_by_namespace(&self, namespace: &str) -> Vec<ReactiveRelation>;
46
47 fn get_keys(&self) -> Vec<RelationInstanceId>;
49
50 fn count(&self) -> usize;
52
53 fn count_by_type(&self, ty: &RelationTypeId) -> usize;
55
56 fn count_by_component(&self, component: &ComponentTypeId) -> usize;
58
59 fn count_by_behaviour(&self, behaviour_ty: &BehaviourTypeId) -> usize;
61
62 fn create(&self, relation_instance: RelationInstance) -> Result<ReactiveRelation, ReactiveRelationCreationError>;
64
65 fn register(&self, reactive_relation: ReactiveRelation) -> Result<ReactiveRelation, ReactiveRelationRegistrationError>;
67
68 fn add_component(&self, relation_instance_id: &RelationInstanceId, component: &ComponentTypeId) -> Result<(), ReactiveRelationComponentAddError>;
70
71 fn remove_component(&self, relation_instance_id: &RelationInstanceId, component: &ComponentTypeId) -> Result<(), ReactiveRelationComponentRemoveError>;
73
74 fn add_property(
76 &self,
77 relation_instance_id: &RelationInstanceId,
78 property_name: &str,
79 mutability: Mutability,
80 value: Value,
81 ) -> Result<(), ReactiveRelationPropertyAddError>;
82
83 fn remove_property(&self, relation_instance_id: &RelationInstanceId, property_name: &str) -> Result<(), ReactiveRelationPropertyRemoveError>;
85
86 fn delete(&self, relation_instance_id: &RelationInstanceId) -> bool;
88}