rive_http/servers/
server_permissions.rs

1use crate::prelude::*;
2use rive_models::{
3    data::{
4        CreateRoleData, EditRoleData, SetDefaultRolePermissionData, SetServerRolePermissionData,
5    },
6    server::{NewRole, Role, Server},
7};
8
9impl Client {
10    /// Creates a new server role.
11    pub async fn create_role(
12        &self,
13        server_id: impl Into<String>,
14        data: CreateRoleData,
15    ) -> Result<NewRole> {
16        Ok(self
17            .client
18            .post(ep!(self, "/servers/{}/roles", server_id.into()))
19            .json(&data)
20            .auth(&self.authentication)
21            .send()
22            .await?
23            .process_error()
24            .await?
25            .json()
26            .await?)
27    }
28
29    /// Delete a server role by its ID.
30    pub async fn delete_role(
31        &self,
32        server_id: impl Into<String>,
33        role_id: impl Into<String>,
34    ) -> Result<()> {
35        self.client
36            .delete(ep!(
37                self,
38                "/servers/{}/roles/{}",
39                server_id.into(),
40                role_id.into()
41            ))
42            .auth(&self.authentication)
43            .send()
44            .await?
45            .process_error()
46            .await?;
47        Ok(())
48    }
49
50    /// Edit a role by its ID.
51    pub async fn edit_role(
52        &self,
53        server_id: impl Into<String>,
54        role_id: impl Into<String>,
55        data: EditRoleData,
56    ) -> Result<Role> {
57        Ok(self
58            .client
59            .patch(ep!(
60                self,
61                "/servers/{}/roles/{}",
62                server_id.into(),
63                role_id.into()
64            ))
65            .json(&data)
66            .auth(&self.authentication)
67            .send()
68            .await?
69            .process_error()
70            .await?
71            .json()
72            .await?)
73    }
74
75    /// Sets permissions for the specified role in the server.
76    pub async fn set_role_permission(
77        &self,
78        server_id: impl Into<String>,
79        role_id: impl Into<String>,
80        data: SetServerRolePermissionData,
81    ) -> Result<Server> {
82        Ok(self
83            .client
84            .put(ep!(
85                self,
86                "/servers/{}/permissions/{}",
87                server_id.into(),
88                role_id.into()
89            ))
90            .json(&data)
91            .auth(&self.authentication)
92            .send()
93            .await?
94            .process_error()
95            .await?
96            .json()
97            .await?)
98    }
99
100    /// Sets permissions for the default role in the server.
101    pub async fn set_default_permission(
102        &self,
103        server_id: impl Into<String>,
104        data: SetDefaultRolePermissionData,
105    ) -> Result<Server> {
106        Ok(self
107            .client
108            .put(ep!(
109                self,
110                "/servers/{}/permissions/default",
111                server_id.into(),
112            ))
113            .json(&data)
114            .auth(&self.authentication)
115            .send()
116            .await?
117            .process_error()
118            .await?
119            .json()
120            .await?)
121    }
122}