rust_tdlib/types/
send_message.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Sends a message. Returns the sent message
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct SendMessage {
8    #[doc(hidden)]
9    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
10    extra: Option<String>,
11    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
12    client_id: Option<i32>,
13    /// Target chat
14
15    #[serde(default)]
16    chat_id: i64,
17    /// If not 0, a message thread identifier in which the message will be sent
18
19    #[serde(default)]
20    message_thread_id: i64,
21    /// Identifier of the message to reply to or 0
22
23    #[serde(default)]
24    reply_to_message_id: i64,
25    /// Options to be used to send the message; pass null to use default options
26    options: MessageSendOptions,
27    /// Markup for replying to the message; pass null if none; for bots only
28
29    #[serde(skip_serializing_if = "ReplyMarkup::_is_default")]
30    reply_markup: ReplyMarkup,
31    /// The content of the message to be sent
32
33    #[serde(skip_serializing_if = "InputMessageContent::_is_default")]
34    input_message_content: InputMessageContent,
35
36    #[serde(rename(serialize = "@type"))]
37    td_type: String,
38}
39
40impl RObject for SendMessage {
41    #[doc(hidden)]
42    fn extra(&self) -> Option<&str> {
43        self.extra.as_deref()
44    }
45    #[doc(hidden)]
46    fn client_id(&self) -> Option<i32> {
47        self.client_id
48    }
49}
50
51impl RFunction for SendMessage {}
52
53impl SendMessage {
54    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
55        Ok(serde_json::from_str(json.as_ref())?)
56    }
57    pub fn builder() -> SendMessageBuilder {
58        let mut inner = SendMessage::default();
59        inner.extra = Some(Uuid::new_v4().to_string());
60
61        inner.td_type = "sendMessage".to_string();
62
63        SendMessageBuilder { inner }
64    }
65
66    pub fn chat_id(&self) -> i64 {
67        self.chat_id
68    }
69
70    pub fn message_thread_id(&self) -> i64 {
71        self.message_thread_id
72    }
73
74    pub fn reply_to_message_id(&self) -> i64 {
75        self.reply_to_message_id
76    }
77
78    pub fn options(&self) -> &MessageSendOptions {
79        &self.options
80    }
81
82    pub fn reply_markup(&self) -> &ReplyMarkup {
83        &self.reply_markup
84    }
85
86    pub fn input_message_content(&self) -> &InputMessageContent {
87        &self.input_message_content
88    }
89}
90
91#[doc(hidden)]
92pub struct SendMessageBuilder {
93    inner: SendMessage,
94}
95
96#[deprecated]
97pub type RTDSendMessageBuilder = SendMessageBuilder;
98
99impl SendMessageBuilder {
100    pub fn build(&self) -> SendMessage {
101        self.inner.clone()
102    }
103
104    pub fn chat_id(&mut self, chat_id: i64) -> &mut Self {
105        self.inner.chat_id = chat_id;
106        self
107    }
108
109    pub fn message_thread_id(&mut self, message_thread_id: i64) -> &mut Self {
110        self.inner.message_thread_id = message_thread_id;
111        self
112    }
113
114    pub fn reply_to_message_id(&mut self, reply_to_message_id: i64) -> &mut Self {
115        self.inner.reply_to_message_id = reply_to_message_id;
116        self
117    }
118
119    pub fn options<T: AsRef<MessageSendOptions>>(&mut self, options: T) -> &mut Self {
120        self.inner.options = options.as_ref().clone();
121        self
122    }
123
124    pub fn reply_markup<T: AsRef<ReplyMarkup>>(&mut self, reply_markup: T) -> &mut Self {
125        self.inner.reply_markup = reply_markup.as_ref().clone();
126        self
127    }
128
129    pub fn input_message_content<T: AsRef<InputMessageContent>>(
130        &mut self,
131        input_message_content: T,
132    ) -> &mut Self {
133        self.inner.input_message_content = input_message_content.as_ref().clone();
134        self
135    }
136}
137
138impl AsRef<SendMessage> for SendMessage {
139    fn as_ref(&self) -> &SendMessage {
140        self
141    }
142}
143
144impl AsRef<SendMessage> for SendMessageBuilder {
145    fn as_ref(&self) -> &SendMessage {
146        &self.inner
147    }
148}