sos_backend/
server_origins.rs1use crate::{BackendTarget, Error};
2use async_trait::async_trait;
3use sos_core::{AccountId, Origin, RemoteOrigins};
4use std::collections::HashSet;
5
6type BoxedServerOrigins =
7 Box<dyn RemoteOrigins<Error = Error> + Send + Sync + 'static>;
8
9pub struct ServerOrigins(BoxedServerOrigins);
11
12impl ServerOrigins {
13 pub fn new(target: BackendTarget, account_id: &AccountId) -> Self {
15 match target {
16 BackendTarget::FileSystem(paths) => {
17 Self(Box::new(sos_filesystem::ServerOrigins::new(paths)))
18 }
19 BackendTarget::Database(_, client) => Self(Box::new(
20 sos_database::ServerOrigins::new(*account_id, client),
21 )),
22 }
23 }
24}
25
26#[async_trait]
27impl RemoteOrigins for ServerOrigins {
28 type Error = Error;
29
30 async fn list_servers(&self) -> Result<HashSet<Origin>, Self::Error> {
31 self.0.list_servers().await
32 }
33
34 async fn add_server(
35 &mut self,
36 origin: Origin,
37 ) -> Result<(), Self::Error> {
38 self.0.add_server(origin).await
39 }
40
41 async fn replace_server(
42 &mut self,
43 old_origin: &Origin,
44 new_origin: Origin,
45 ) -> Result<(), Self::Error> {
46 self.0.replace_server(old_origin, new_origin).await
47 }
48
49 async fn remove_server(
50 &mut self,
51 origin: &Origin,
52 ) -> Result<(), Self::Error> {
53 self.0.remove_server(origin).await
54 }
55}