titanium_model/builder/
channel.rs

1use crate::TitanString;
2
3/// Payload for creating a channel.
4#[derive(Debug, Clone, serde::Serialize, Default)]
5pub struct CreateChannel<'a> {
6    pub name: TitanString<'a>,
7    #[serde(skip_serializing_if = "Option::is_none", rename = "type")]
8    pub kind: Option<u8>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub topic: Option<TitanString<'a>>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub bitrate: Option<u32>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub user_limit: Option<u32>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub rate_limit_per_user: Option<u32>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub position: Option<u32>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub permission_overwrites: Option<Vec<crate::json::Value>>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub parent_id: Option<crate::Snowflake>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub nsfw: Option<bool>,
25}
26
27/// Builder for creating a Channel.
28#[derive(Debug, Clone, Default)]
29pub struct CreateChannelBuilder<'a> {
30    params: CreateChannel<'a>,
31}
32
33impl<'a> CreateChannelBuilder<'a> {
34    pub fn new(name: impl Into<TitanString<'a>>) -> Self {
35        let mut builder = Self::default();
36        builder.params.name = name.into();
37        builder
38    }
39
40    #[must_use]
41    pub fn kind(mut self, kind: u8) -> Self {
42        self.params.kind = Some(kind);
43        self
44    }
45
46    pub fn topic(mut self, topic: impl Into<TitanString<'a>>) -> Self {
47        self.params.topic = Some(topic.into());
48        self
49    }
50
51    #[must_use]
52    pub fn build(self) -> CreateChannel<'a> {
53        self.params
54    }
55}