rust_tdlib/types/
message_sender.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Contains information about the sender of a message
8pub trait TDMessageSender: Debug + RObject {}
9
10/// Contains information about the sender of a message
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum MessageSender {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// The message was sent on behalf of a chat
18    #[serde(rename = "messageSenderChat")]
19    Chat(MessageSenderChat),
20    /// The message was sent by a known user
21    #[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/// The message was sent on behalf of a chat
63#[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    /// Identifier of the chat that sent the message
71
72    #[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/// The message was sent by a known user
137#[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    /// Identifier of the user that sent the message
145
146    #[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}