robespierre_http/
server_permissions.rs1use 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 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}