use revolt_result::Result;
use crate::{FieldsRole, FieldsServer, PartialRole, PartialServer, Role, Server};
mod mongodb;
mod reference;
#[async_trait]
pub trait AbstractServers: Sync + Send {
async fn insert_server(&self, server: &Server) -> Result<()>;
async fn fetch_server(&self, id: &str) -> Result<Server>;
async fn fetch_servers<'a>(&self, ids: &'a [String]) -> Result<Vec<Server>>;
async fn update_server(
&self,
id: &str,
partial: &PartialServer,
remove: Vec<FieldsServer>,
) -> Result<()>;
async fn delete_server(&self, id: &str) -> Result<()>;
async fn insert_role(&self, server_id: &str, role_id: &str, role: &Role) -> Result<()>;
async fn update_role(
&self,
server_id: &str,
role_id: &str,
partial: &PartialRole,
remove: Vec<FieldsRole>,
) -> Result<()>;
async fn delete_role(&self, server_id: &str, role_id: &str) -> Result<()>;
}