Skip to main content

neptunium_http/endpoints/guild/channels/
create_guild_channel.rs

1use bon::Builder;
2use neptunium_model::{
3    channel::Channel,
4    id::{Id, marker::GuildMarker},
5};
6use reqwest::Method;
7use serde::Serialize;
8use serde_repr::{Deserialize_repr, Serialize_repr};
9
10use crate::{
11    endpoints::{Endpoint, guild::channels::ChannelRequestBase},
12    request::Request,
13};
14
15#[derive(Serialize_repr, Deserialize_repr, Copy, Clone, Debug)]
16#[repr(u16)]
17pub enum GuildChannelCreateType {
18    Text = 0,
19    Voice = 2,
20    Category = 4,
21    Link = 998,
22}
23
24#[derive(Serialize, Builder, Clone, Debug)]
25pub struct GuildChannelCreateRequest {
26    #[serde(flatten)]
27    pub base: ChannelRequestBase,
28    #[builder(default = false)]
29    #[serde(skip_serializing_if = "std::ops::Not::not")]
30    pub nsfw: bool,
31    /// The channel name.
32    #[builder(into)]
33    pub name: String,
34    #[serde(rename = "type")]
35    pub r#type: GuildChannelCreateType,
36}
37
38#[derive(Builder, Clone, Debug)]
39pub struct CreateGuildChannel {
40    pub guild_id: Id<GuildMarker>,
41    pub body: GuildChannelCreateRequest,
42}
43
44impl Endpoint for CreateGuildChannel {
45    type Response = Channel;
46
47    fn into_request(self) -> crate::request::Request {
48        Request::builder()
49            .method(Method::POST)
50            .body(serde_json::to_string(&self.body).unwrap())
51            .path(format!("/guilds/{}/channels", self.guild_id))
52            .build()
53    }
54}