rust_tdlib/types/
message_sender.rs1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDMessageSender: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum MessageSender {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "messageSenderChat")]
19 Chat(MessageSenderChat),
20 #[serde(rename = "messageSenderUser")]
22 User(MessageSenderUser),
23}
24
25impl RObject for MessageSender {
26 #[doc(hidden)]
27 fn extra(&self) -> Option<&str> {
28 match self {
29 MessageSender::Chat(t) => t.extra(),
30 MessageSender::User(t) => t.extra(),
31
32 _ => None,
33 }
34 }
35 #[doc(hidden)]
36 fn client_id(&self) -> Option<i32> {
37 match self {
38 MessageSender::Chat(t) => t.client_id(),
39 MessageSender::User(t) => t.client_id(),
40
41 _ => None,
42 }
43 }
44}
45
46impl MessageSender {
47 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
48 Ok(serde_json::from_str(json.as_ref())?)
49 }
50 #[doc(hidden)]
51 pub fn _is_default(&self) -> bool {
52 matches!(self, MessageSender::_Default)
53 }
54}
55
56impl AsRef<MessageSender> for MessageSender {
57 fn as_ref(&self) -> &MessageSender {
58 self
59 }
60}
61
62#[derive(Debug, Clone, Default, Serialize, Deserialize)]
64pub struct MessageSenderChat {
65 #[doc(hidden)]
66 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
67 extra: Option<String>,
68 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
69 client_id: Option<i32>,
70 #[serde(default)]
73 chat_id: i64,
74}
75
76impl RObject for MessageSenderChat {
77 #[doc(hidden)]
78 fn extra(&self) -> Option<&str> {
79 self.extra.as_deref()
80 }
81 #[doc(hidden)]
82 fn client_id(&self) -> Option<i32> {
83 self.client_id
84 }
85}
86
87impl TDMessageSender for MessageSenderChat {}
88
89impl MessageSenderChat {
90 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
91 Ok(serde_json::from_str(json.as_ref())?)
92 }
93 pub fn builder() -> MessageSenderChatBuilder {
94 let mut inner = MessageSenderChat::default();
95 inner.extra = Some(Uuid::new_v4().to_string());
96
97 MessageSenderChatBuilder { inner }
98 }
99
100 pub fn chat_id(&self) -> i64 {
101 self.chat_id
102 }
103}
104
105#[doc(hidden)]
106pub struct MessageSenderChatBuilder {
107 inner: MessageSenderChat,
108}
109
110#[deprecated]
111pub type RTDMessageSenderChatBuilder = MessageSenderChatBuilder;
112
113impl MessageSenderChatBuilder {
114 pub fn build(&self) -> MessageSenderChat {
115 self.inner.clone()
116 }
117
118 pub fn chat_id(&mut self, chat_id: i64) -> &mut Self {
119 self.inner.chat_id = chat_id;
120 self
121 }
122}
123
124impl AsRef<MessageSenderChat> for MessageSenderChat {
125 fn as_ref(&self) -> &MessageSenderChat {
126 self
127 }
128}
129
130impl AsRef<MessageSenderChat> for MessageSenderChatBuilder {
131 fn as_ref(&self) -> &MessageSenderChat {
132 &self.inner
133 }
134}
135
136#[derive(Debug, Clone, Default, Serialize, Deserialize)]
138pub struct MessageSenderUser {
139 #[doc(hidden)]
140 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
141 extra: Option<String>,
142 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
143 client_id: Option<i32>,
144 #[serde(default)]
147 user_id: i64,
148}
149
150impl RObject for MessageSenderUser {
151 #[doc(hidden)]
152 fn extra(&self) -> Option<&str> {
153 self.extra.as_deref()
154 }
155 #[doc(hidden)]
156 fn client_id(&self) -> Option<i32> {
157 self.client_id
158 }
159}
160
161impl TDMessageSender for MessageSenderUser {}
162
163impl MessageSenderUser {
164 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
165 Ok(serde_json::from_str(json.as_ref())?)
166 }
167 pub fn builder() -> MessageSenderUserBuilder {
168 let mut inner = MessageSenderUser::default();
169 inner.extra = Some(Uuid::new_v4().to_string());
170
171 MessageSenderUserBuilder { inner }
172 }
173
174 pub fn user_id(&self) -> i64 {
175 self.user_id
176 }
177}
178
179#[doc(hidden)]
180pub struct MessageSenderUserBuilder {
181 inner: MessageSenderUser,
182}
183
184#[deprecated]
185pub type RTDMessageSenderUserBuilder = MessageSenderUserBuilder;
186
187impl MessageSenderUserBuilder {
188 pub fn build(&self) -> MessageSenderUser {
189 self.inner.clone()
190 }
191
192 pub fn user_id(&mut self, user_id: i64) -> &mut Self {
193 self.inner.user_id = user_id;
194 self
195 }
196}
197
198impl AsRef<MessageSenderUser> for MessageSenderUser {
199 fn as_ref(&self) -> &MessageSenderUser {
200 self
201 }
202}
203
204impl AsRef<MessageSenderUser> for MessageSenderUserBuilder {
205 fn as_ref(&self) -> &MessageSenderUser {
206 &self.inner
207 }
208}