neptunium_http/endpoints/guild/channels/
create_guild_channel.rs1use 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 #[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}