titanium_model/
create_message.rs1use crate::{Component, Embed};
2
3use crate::TitanString;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize, Default)]
8pub struct CreateMessage<'a> {
9 #[serde(skip_serializing_if = "Option::is_none")]
11 pub content: Option<TitanString<'a>>,
12
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub tts: Option<bool>,
16
17 #[serde(skip_serializing_if = "Option::is_none", borrow)]
19 pub embeds: Option<Vec<Embed<'a>>>,
20
21 #[serde(skip_serializing_if = "Option::is_none", borrow)]
23 pub components: Option<Vec<Component<'a>>>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub flags: Option<u64>,
28
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub message_reference: Option<crate::MessageReference>,
32
33 #[serde(skip)]
35 pub files: Vec<crate::file::FileUpload>,
36}
37
38impl<'a> CreateMessage<'a> {
39 pub fn new(content: impl Into<String>) -> Self {
41 Self {
42 content: Some(content.into().into()),
43 ..Default::default()
44 }
45 }
46
47 pub fn embed(mut self, embed: Embed<'a>) -> Self {
49 if let Some(embeds) = &mut self.embeds {
50 embeds.push(embed);
51 } else {
52 self.embeds = Some(vec![embed]);
53 }
54 self
55 }
56
57 pub fn component(mut self, component: Component<'a>) -> Self {
59 if let Some(components) = &mut self.components {
60 components.push(component);
61 } else {
62 self.components = Some(vec![component]);
63 }
64 self
65 }
66}