titanium_model/builder/
channel.rs1use crate::TitanString;
2
3#[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#[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}