robespierre_http/
channel_information.rs1use serde::Serialize;
2
3use robespierre_models::{
4 autumn::AttachmentId,
5 channels::{Channel, ChannelField, ChannelPermissions, CreateChannelInviteResponse},
6 id::{ChannelId, RoleId},
7};
8
9use super::impl_prelude::*;
10
11impl Http {
12 pub async fn fetch_channel(&self, channel_id: ChannelId) -> Result<Channel> {
14 Ok(self
15 .client
16 .get(ep!(self, "/channels/{}" channel_id))
17 .send()
18 .await?
19 .error_for_status()?
20 .json()
21 .await?)
22 }
23
24 pub async fn edit_channel(
26 &self,
27 channel_id: ChannelId,
28 name: Option<String>,
29 description: Option<String>,
30 icon: Option<AttachmentId>,
31 nsfw: Option<bool>,
32 remove: Option<ChannelField>,
33 ) -> Result {
34 #[derive(serde::Serialize)]
35 struct PatchChannelRequest {
36 #[serde(skip_serializing_if = "Option::is_none")]
37 name: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 description: Option<String>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 icon: Option<AttachmentId>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 nsfw: Option<bool>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 remove: Option<ChannelField>,
46 }
47
48 self.client
49 .patch(ep!(self, "/channels/{}" channel_id))
50 .json(&PatchChannelRequest {
51 name,
52 description,
53 icon,
54 nsfw,
55 remove,
56 })
57 .send()
58 .await?
59 .error_for_status()?;
60
61 Ok(())
62 }
63
64 pub async fn close_channel(&self, channel_id: ChannelId) -> Result {
66 self.client
67 .delete(ep!(self, "/channels/{}" channel_id))
68 .send()
69 .await?
70 .error_for_status()?;
71
72 Ok(())
73 }
74
75 pub async fn create_invite(
77 &self,
78 channel_id: ChannelId,
79 ) -> Result<CreateChannelInviteResponse> {
80 Ok(self
81 .client
82 .post(ep!(self, "/channels/{}/invites" channel_id))
83 .send()
84 .await?
85 .error_for_status()?
86 .json()
87 .await?)
88 }
89
90 pub async fn set_channel_role_permissions(
92 &self,
93 channel_id: ChannelId,
94 role_id: RoleId,
95 permissions: ChannelPermissions,
96 ) -> Result {
97 self.client
98 .put(ep!(self, "/channels/{}/permissions/{}" channel_id, role_id))
99 .json(&PermissionsUpdateRequest { permissions })
100 .send()
101 .await?
102 .error_for_status()?;
103
104 Ok(())
105 }
106
107 pub async fn set_channel_default_role_permissions(
109 &self,
110 channel_id: ChannelId,
111 permissions: ChannelPermissions,
112 ) -> Result {
113 self.client
114 .put(ep!(self, "/channels/{}/permissions/default" channel_id))
115 .json(&PermissionsUpdateRequest { permissions })
116 .send()
117 .await?
118 .error_for_status()?;
119
120 Ok(())
121 }
122}
123
124#[derive(Serialize)]
125pub struct PermissionsUpdateRequest {
126 pub permissions: ChannelPermissions,
127}