Skip to main content

neptunium_http/endpoints/channel/
set_permission_overwrite.rs

1use 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    /// Can be either a role ID or a user ID
20    pub id: Id<GenericMarker>,
21    /// The type of entity this overwrite applies to.
22    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}