neptunium_http/endpoints/channel/
set_permission_overwrite.rs1use bon::Builder;
2use neptunium_model::{
3 channel::PermissionOverwriteEntity,
4 guild::permissions::Permissions,
5 id::{
6 Id,
7 marker::{ChannelMarker, GenericMarker},
8 },
9};
10use reqwest::Method;
11use serde_json::json;
12
13use crate::{endpoints::Endpoint, request::Request};
14
15#[derive(Builder, Copy, Clone, Debug)]
16pub struct PermissionOverwriteUpdate {
17 pub allow: Option<Permissions>,
18 pub deny: Option<Permissions>,
19 pub id: Id<GenericMarker>,
21 pub r#type: PermissionOverwriteEntity,
23}
24
25#[derive(Builder, Copy, Clone, Debug)]
26pub struct SetPermissionOverwrite {
27 pub channel_id: Id<ChannelMarker>,
28 pub overwrite: PermissionOverwriteUpdate,
29}
30
31impl Endpoint for SetPermissionOverwrite {
32 type Response = ();
33
34 fn into_request(self) -> crate::request::Request {
35 let mut body = json!({
36 "type": self.overwrite.r#type,
37 });
38
39 if let Some(allow) = self.overwrite.allow {
40 body["allow"] = serde_json::to_value(allow).unwrap();
41 }
42 if let Some(deny) = self.overwrite.deny {
43 body["deny"] = serde_json::to_value(deny).unwrap();
44 }
45
46 Request::builder()
47 .method(Method::PUT)
48 .body(body.to_string())
49 .path(format!(
50 "/channels/{}/permissions/{}",
51 self.channel_id, self.overwrite.id
52 ))
53 .build()
54 }
55}