rtdlib/types/
chat_list.rs1
2use crate::types::*;
3use crate::errors::*;
4use uuid::Uuid;
5
6
7
8
9use std::fmt::Debug;
10use serde::de::{Deserialize, Deserializer};
11
12
13
14pub trait TDChatList: Debug + RObject {}
16
17#[derive(Debug, Clone, Serialize)]
19#[serde(untagged)]
20pub enum ChatList {
21 #[doc(hidden)] _Default(()),
22 Archive(ChatListArchive),
24 Filter(ChatListFilter),
26 Main(ChatListMain),
28
29}
30
31impl Default for ChatList {
32 fn default() -> Self { ChatList::_Default(()) }
33}
34
35impl<'de> Deserialize<'de> for ChatList {
36 fn deserialize<D>(deserializer: D) -> Result<ChatList, D::Error> where D: Deserializer<'de> {
37 use serde::de::Error;
38 rtd_enum_deserialize!(
39 ChatList,
40 (chatListArchive, Archive);
41 (chatListFilter, Filter);
42 (chatListMain, Main);
43
44 )(deserializer)
45 }
46}
47
48impl RObject for ChatList {
49 #[doc(hidden)] fn td_name(&self) -> &'static str {
50 match self {
51 ChatList::Archive(t) => t.td_name(),
52 ChatList::Filter(t) => t.td_name(),
53 ChatList::Main(t) => t.td_name(),
54
55 _ => "-1",
56 }
57 }
58 #[doc(hidden)] fn extra(&self) -> Option<String> {
59 match self {
60 ChatList::Archive(t) => t.extra(),
61 ChatList::Filter(t) => t.extra(),
62 ChatList::Main(t) => t.extra(),
63
64 _ => None,
65 }
66 }
67 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
68}
69
70impl ChatList {
71 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
72 #[doc(hidden)] pub fn _is_default(&self) -> bool { if let ChatList::_Default(_) = self { true } else { false } }
73
74 pub fn is_archive(&self) -> bool { if let ChatList::Archive(_) = self { true } else { false } }
75 pub fn is_filter(&self) -> bool { if let ChatList::Filter(_) = self { true } else { false } }
76 pub fn is_main(&self) -> bool { if let ChatList::Main(_) = self { true } else { false } }
77
78 pub fn on_archive<F: FnOnce(&ChatListArchive)>(&self, fnc: F) -> &Self { if let ChatList::Archive(t) = self { fnc(t) }; self }
79 pub fn on_filter<F: FnOnce(&ChatListFilter)>(&self, fnc: F) -> &Self { if let ChatList::Filter(t) = self { fnc(t) }; self }
80 pub fn on_main<F: FnOnce(&ChatListMain)>(&self, fnc: F) -> &Self { if let ChatList::Main(t) = self { fnc(t) }; self }
81
82 pub fn as_archive(&self) -> Option<&ChatListArchive> { if let ChatList::Archive(t) = self { return Some(t) } None }
83 pub fn as_filter(&self) -> Option<&ChatListFilter> { if let ChatList::Filter(t) = self { return Some(t) } None }
84 pub fn as_main(&self) -> Option<&ChatListMain> { if let ChatList::Main(t) = self { return Some(t) } None }
85
86
87
88 pub fn archive<T: AsRef<ChatListArchive>>(t: T) -> Self { ChatList::Archive(t.as_ref().clone()) }
89
90 pub fn filter<T: AsRef<ChatListFilter>>(t: T) -> Self { ChatList::Filter(t.as_ref().clone()) }
91
92 pub fn main<T: AsRef<ChatListMain>>(t: T) -> Self { ChatList::Main(t.as_ref().clone()) }
93
94}
95
96impl AsRef<ChatList> for ChatList {
97 fn as_ref(&self) -> &ChatList { self }
98}
99
100
101
102
103
104
105
106#[derive(Debug, Clone, Default, Serialize, Deserialize)]
108pub struct ChatListArchive {
109 #[doc(hidden)]
110 #[serde(rename(serialize = "@type", deserialize = "@type"))]
111 td_name: String,
112 #[doc(hidden)]
113 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
114 extra: Option<String>,
115
116}
117
118impl RObject for ChatListArchive {
119 #[doc(hidden)] fn td_name(&self) -> &'static str { "chatListArchive" }
120 #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
121 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
122}
123
124
125impl TDChatList for ChatListArchive {}
126
127
128
129impl ChatListArchive {
130 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
131 pub fn builder() -> RTDChatListArchiveBuilder {
132 let mut inner = ChatListArchive::default();
133 inner.td_name = "chatListArchive".to_string();
134 inner.extra = Some(Uuid::new_v4().to_string());
135 RTDChatListArchiveBuilder { inner }
136 }
137
138}
139
140#[doc(hidden)]
141pub struct RTDChatListArchiveBuilder {
142 inner: ChatListArchive
143}
144
145impl RTDChatListArchiveBuilder {
146 pub fn build(&self) -> ChatListArchive { self.inner.clone() }
147
148}
149
150impl AsRef<ChatListArchive> for ChatListArchive {
151 fn as_ref(&self) -> &ChatListArchive { self }
152}
153
154impl AsRef<ChatListArchive> for RTDChatListArchiveBuilder {
155 fn as_ref(&self) -> &ChatListArchive { &self.inner }
156}
157
158
159
160
161
162
163
164#[derive(Debug, Clone, Default, Serialize, Deserialize)]
166pub struct ChatListFilter {
167 #[doc(hidden)]
168 #[serde(rename(serialize = "@type", deserialize = "@type"))]
169 td_name: String,
170 #[doc(hidden)]
171 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
172 extra: Option<String>,
173 chat_filter_id: i64,
175
176}
177
178impl RObject for ChatListFilter {
179 #[doc(hidden)] fn td_name(&self) -> &'static str { "chatListFilter" }
180 #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
181 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
182}
183
184
185impl TDChatList for ChatListFilter {}
186
187
188
189impl ChatListFilter {
190 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
191 pub fn builder() -> RTDChatListFilterBuilder {
192 let mut inner = ChatListFilter::default();
193 inner.td_name = "chatListFilter".to_string();
194 inner.extra = Some(Uuid::new_v4().to_string());
195 RTDChatListFilterBuilder { inner }
196 }
197
198 pub fn chat_filter_id(&self) -> i64 { self.chat_filter_id }
199
200}
201
202#[doc(hidden)]
203pub struct RTDChatListFilterBuilder {
204 inner: ChatListFilter
205}
206
207impl RTDChatListFilterBuilder {
208 pub fn build(&self) -> ChatListFilter { self.inner.clone() }
209
210
211 pub fn chat_filter_id(&mut self, chat_filter_id: i64) -> &mut Self {
212 self.inner.chat_filter_id = chat_filter_id;
213 self
214 }
215
216}
217
218impl AsRef<ChatListFilter> for ChatListFilter {
219 fn as_ref(&self) -> &ChatListFilter { self }
220}
221
222impl AsRef<ChatListFilter> for RTDChatListFilterBuilder {
223 fn as_ref(&self) -> &ChatListFilter { &self.inner }
224}
225
226
227
228
229
230
231
232#[derive(Debug, Clone, Default, Serialize, Deserialize)]
234pub struct ChatListMain {
235 #[doc(hidden)]
236 #[serde(rename(serialize = "@type", deserialize = "@type"))]
237 td_name: String,
238 #[doc(hidden)]
239 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
240 extra: Option<String>,
241
242}
243
244impl RObject for ChatListMain {
245 #[doc(hidden)] fn td_name(&self) -> &'static str { "chatListMain" }
246 #[doc(hidden)] fn extra(&self) -> Option<String> { self.extra.clone() }
247 fn to_json(&self) -> RTDResult<String> { Ok(serde_json::to_string(self)?) }
248}
249
250
251impl TDChatList for ChatListMain {}
252
253
254
255impl ChatListMain {
256 pub fn from_json<S: AsRef<str>>(json: S) -> RTDResult<Self> { Ok(serde_json::from_str(json.as_ref())?) }
257 pub fn builder() -> RTDChatListMainBuilder {
258 let mut inner = ChatListMain::default();
259 inner.td_name = "chatListMain".to_string();
260 inner.extra = Some(Uuid::new_v4().to_string());
261 RTDChatListMainBuilder { inner }
262 }
263
264}
265
266#[doc(hidden)]
267pub struct RTDChatListMainBuilder {
268 inner: ChatListMain
269}
270
271impl RTDChatListMainBuilder {
272 pub fn build(&self) -> ChatListMain { self.inner.clone() }
273
274}
275
276impl AsRef<ChatListMain> for ChatListMain {
277 fn as_ref(&self) -> &ChatListMain { self }
278}
279
280impl AsRef<ChatListMain> for RTDChatListMainBuilder {
281 fn as_ref(&self) -> &ChatListMain { &self.inner }
282}
283
284
285