titanium_model/builder/
command.rs

1use crate::TitanString;
2
3/// Builder for creating an Application Command (Slash Command).
4#[derive(Debug, Clone, serde::Serialize)]
5pub struct CommandBuilder<'a> {
6    pub name: TitanString<'a>,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub name_localizations: Option<std::collections::HashMap<String, String>>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub description: Option<TitanString<'a>>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub description_localizations: Option<std::collections::HashMap<String, String>>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub default_member_permissions: Option<TitanString<'a>>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub dm_permission: Option<bool>,
17    #[serde(default)]
18    #[serde(rename = "type")]
19    pub kind: Option<crate::command::CommandType>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub nsfw: Option<bool>,
22}
23
24impl<'a> CommandBuilder<'a> {
25    pub fn new(name: impl Into<TitanString<'a>>, description: impl Into<TitanString<'a>>) -> Self {
26        Self {
27            name: name.into(),
28            description: Some(description.into()),
29            name_localizations: None,
30            description_localizations: None,
31            default_member_permissions: None,
32            dm_permission: None,
33            kind: Some(crate::command::CommandType::ChatInput),
34            nsfw: None,
35        }
36    }
37
38    #[must_use]
39    pub fn build(self) -> Self {
40        self
41    }
42}