robespierre_http/
server_permissions.rs

1use robespierre_models::{
2    channels::ChannelPermissions,
3    id::{RoleId, ServerId},
4    servers::{PermissionTuple, ServerPermissions},
5};
6
7use super::impl_prelude::*;
8
9impl Http {
10    pub async fn set_role_permissions(
11        &self,
12        server: ServerId,
13        role: RoleId,
14        permissions: PermissionTuple,
15    ) -> Result {
16        let (sp, cp) = permissions;
17
18        self.client
19            .put(ep!(self, "/servers/{}/permissions/{}" server, role))
20            .json(&SetPermissionsRequest {
21                server: sp,
22                channel: cp,
23            })
24            .send()
25            .await?
26            .error_for_status()?;
27
28        Ok(())
29    }
30
31    pub async fn set_default_role_permissions(
32        &self,
33        server: ServerId,
34        permissions: PermissionTuple,
35    ) -> Result {
36        let (sp, cp) = permissions;
37
38        self.client
39            .put(ep!(self, "/servers/{}/permissions/default" server))
40            .json(&SetPermissionsRequest {
41                server: sp,
42                channel: cp,
43            })
44            .send()
45            .await?
46            .error_for_status()?;
47
48        Ok(())
49    }
50
51    pub async fn create_role(&self, server: ServerId, name: &str) -> Result<RoleIdAndPermissions> {
52        #[derive(serde::Serialize)]
53        struct CreateRoleRequest<'a> {
54            name: &'a str,
55        }
56
57        Ok(self
58            .client
59            .post(ep!(self, "/servers/{}/roles" server))
60            .json(&CreateRoleRequest { name })
61            .send()
62            .await?
63            .error_for_status()?
64            .json()
65            .await?)
66    }
67
68    // TODO: edit role
69
70    pub async fn delete_role(&self, server: ServerId, role: RoleId) -> Result {
71        self.client
72            .delete(ep!(self, "/servers/{}/roles/{}" server, role))
73            .send()
74            .await?
75            .error_for_status()?;
76
77        Ok(())
78    }
79}
80
81#[derive(serde::Deserialize)]
82pub struct RoleIdAndPermissions {
83    pub id: RoleId,
84    pub permissions: PermissionTuple,
85}
86
87#[derive(serde::Serialize)]
88pub struct SetPermissionsRequest {
89    pub server: ServerPermissions,
90    pub channel: ChannelPermissions,
91}