revolt_database/models/servers/
ops.rs

1use revolt_result::Result;
2
3use crate::{FieldsRole, FieldsServer, PartialRole, PartialServer, Role, Server};
4
5#[cfg(feature = "mongodb")]
6mod mongodb;
7mod reference;
8
9#[async_trait]
10pub trait AbstractServers: Sync + Send {
11    /// Insert a new server into database
12    async fn insert_server(&self, server: &Server) -> Result<()>;
13
14    /// Fetch a server by its id
15    async fn fetch_server(&self, id: &str) -> Result<Server>;
16
17    /// Fetch a servers by their ids
18    async fn fetch_servers<'a>(&self, ids: &'a [String]) -> Result<Vec<Server>>;
19
20    /// Update a server with new information
21    async fn update_server(
22        &self,
23        id: &str,
24        partial: &PartialServer,
25        remove: Vec<FieldsServer>,
26    ) -> Result<()>;
27
28    /// Delete a server by its id
29    async fn delete_server(&self, id: &str) -> Result<()>;
30
31    /// Insert a new role into server object
32    async fn insert_role(&self, server_id: &str, role: &Role) -> Result<()>;
33
34    /// Update an existing role on a server
35    async fn update_role(
36        &self,
37        server_id: &str,
38        role_id: &str,
39        partial: &PartialRole,
40        remove: Vec<FieldsRole>,
41    ) -> Result<()>;
42
43    /// Delete a role from a server
44    ///
45    /// Also updates channels and members.
46    async fn delete_role(&self, server_id: &str, role_id: &str) -> Result<()>;
47}