reactive_graph_remotes_api/
remotes_manager.rs1use std::collections::HashSet;
2
3use async_trait::async_trait;
4use springtime_di::injectable;
5
6use reactive_graph_lifecycle::Lifecycle;
7use reactive_graph_remotes_model::InstanceAddress;
8use reactive_graph_remotes_model::InstanceInfo;
9
10use crate::FailedToAddInstance;
11use crate::FailedToFetchRemoteInstances;
12use crate::FailedToUpdateInstance;
13
14#[injectable]
16#[async_trait]
17pub trait RemotesManager: Send + Sync + Lifecycle {
18 fn get_all(&self) -> Vec<InstanceInfo>;
20
21 fn get(&self, address: &InstanceAddress) -> Option<InstanceInfo>;
23
24 fn has(&self, address: &InstanceAddress) -> bool;
26
27 fn get_all_addresses(&self) -> HashSet<InstanceAddress>;
29
30 async fn add(&self, address: &InstanceAddress) -> Result<InstanceInfo, FailedToAddInstance>;
32
33 fn remove(&self, address: &InstanceAddress) -> bool;
35
36 fn remove_all(&self);
38
39 async fn update(&self, address: &InstanceAddress) -> Result<InstanceInfo, FailedToUpdateInstance>;
41
42 async fn update_all(&self) -> Vec<InstanceInfo>;
44
45 async fn fetch_and_add_remotes_from_remote(&self, address: &InstanceAddress) -> Result<Vec<InstanceInfo>, FailedToFetchRemoteInstances>;
47
48 async fn fetch_and_add_remotes_from_all_remotes(&self) -> Vec<InstanceInfo>;
50}