sos_backend/
server_origins.rs

1use 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
9/// Collection of server origins.
10pub struct ServerOrigins(BoxedServerOrigins);
11
12impl ServerOrigins {
13    /// Create new server origins.
14    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}