titanium_model/builder/
guild.rs

1use crate::TitanString;
2
3/// Payload for modifying a guild.
4#[derive(Debug, Clone, serde::Serialize, Default)]
5pub struct ModifyGuild<'a> {
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub name: Option<TitanString<'a>>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub region: Option<TitanString<'a>>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub verification_level: Option<u8>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub default_message_notifications: Option<u8>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub explicit_content_filter: Option<u8>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub afk_channel_id: Option<crate::Snowflake>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub afk_timeout: Option<u32>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub icon: Option<TitanString<'a>>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub owner_id: Option<crate::Snowflake>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub splash: Option<TitanString<'a>>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub discovery_splash: Option<TitanString<'a>>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub banner: Option<TitanString<'a>>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub system_channel_id: Option<crate::Snowflake>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub system_channel_flags: Option<u64>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub rules_channel_id: Option<crate::Snowflake>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub public_updates_channel_id: Option<crate::Snowflake>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub preferred_locale: Option<TitanString<'a>>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub features: Option<Vec<TitanString<'a>>>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub description: Option<TitanString<'a>>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub premium_progress_bar_enabled: Option<bool>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub safety_alerts_channel_id: Option<crate::Snowflake>,
48}
49
50/// Builder for modifying a Guild.
51#[derive(Debug, Clone, Default)]
52#[must_use]
53pub struct ModifyGuildBuilder<'a> {
54    params: ModifyGuild<'a>,
55}
56
57impl<'a> ModifyGuildBuilder<'a> {
58    /// Create a new `ModifyGuildBuilder`.
59    pub fn new() -> Self {
60        Self::default()
61    }
62
63    /// Set name.
64    pub fn name(mut self, name: impl Into<TitanString<'a>>) -> Self {
65        self.params.name = Some(name.into());
66        self
67    }
68
69    /// Set region (deprecated).
70    pub fn region(mut self, region: impl Into<TitanString<'a>>) -> Self {
71        self.params.region = Some(region.into());
72        self
73    }
74
75    /// Set verification level.
76    pub fn verification_level(mut self, level: u8) -> Self {
77        self.params.verification_level = Some(level);
78        self
79    }
80
81    /// Set default message notifications.
82    pub fn default_message_notifications(mut self, level: u8) -> Self {
83        self.params.default_message_notifications = Some(level);
84        self
85    }
86
87    /// Set explicit content filter.
88    pub fn explicit_content_filter(mut self, level: u8) -> Self {
89        self.params.explicit_content_filter = Some(level);
90        self
91    }
92
93    /// Set AFK channel ID.
94    pub fn afk_channel_id(mut self, id: impl Into<crate::Snowflake>) -> Self {
95        self.params.afk_channel_id = Some(id.into());
96        self
97    }
98
99    /// Set AFK timeout.
100    pub fn afk_timeout(mut self, timeout: u32) -> Self {
101        self.params.afk_timeout = Some(timeout);
102        self
103    }
104
105    /// Set icon (base64).
106    pub fn icon(mut self, icon: impl Into<TitanString<'a>>) -> Self {
107        self.params.icon = Some(icon.into());
108        self
109    }
110
111    /// Set system channel ID.
112    pub fn system_channel_id(mut self, id: impl Into<crate::Snowflake>) -> Self {
113        self.params.system_channel_id = Some(id.into());
114        self
115    }
116
117    /// Build the `ModifyGuild` payload.
118    #[must_use]
119    pub fn build(self) -> ModifyGuild<'a> {
120        self.params
121    }
122}
123
124/// Payload for creating a Guild.
125#[derive(Debug, Clone, serde::Serialize, Default)]
126pub struct CreateGuild {
127    pub name: String,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    pub icon: Option<String>,
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub verification_level: Option<u8>,
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub default_message_notifications: Option<u8>,
134    #[serde(skip_serializing_if = "Option::is_none")]
135    pub explicit_content_filter: Option<u8>,
136    #[serde(skip_serializing_if = "Vec::is_empty")]
137    pub roles: Vec<crate::json::Value>,
138    #[serde(skip_serializing_if = "Vec::is_empty")]
139    pub channels: Vec<crate::json::Value>,
140    #[serde(skip_serializing_if = "Option::is_none")]
141    pub afk_channel_id: Option<crate::Snowflake>,
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub afk_timeout: Option<u32>,
144    #[serde(skip_serializing_if = "Option::is_none")]
145    pub system_channel_id: Option<crate::Snowflake>,
146    #[serde(skip_serializing_if = "Option::is_none")]
147    pub system_channel_flags: Option<u64>,
148}
149
150/// Builder for creating a Guild.
151#[derive(Debug, Clone)]
152pub struct CreateGuildBuilder {
153    params: CreateGuild,
154}
155
156impl CreateGuildBuilder {
157    pub fn new(name: impl Into<String>) -> Self {
158        Self {
159            params: CreateGuild {
160                name: name.into(),
161                ..Default::default()
162            },
163        }
164    }
165
166    #[inline]
167    pub fn icon(mut self, icon: impl Into<String>) -> Self {
168        self.params.icon = Some(icon.into());
169        self
170    }
171
172    #[must_use]
173    pub fn verification_level(mut self, level: u8) -> Self {
174        self.params.verification_level = Some(level);
175        self
176    }
177
178    #[must_use]
179    pub fn build(self) -> CreateGuild {
180        self.params
181    }
182}