rust_tdlib/types/
send_message.rs1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5#[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 #[serde(default)]
16 chat_id: i64,
17 #[serde(default)]
20 message_thread_id: i64,
21 #[serde(default)]
24 reply_to_message_id: i64,
25 options: MessageSendOptions,
27 #[serde(skip_serializing_if = "ReplyMarkup::_is_default")]
30 reply_markup: ReplyMarkup,
31 #[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}