rust_tdlib/types/
public_chat_type.rs1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7pub trait TDPublicChatType: Debug + RObject {}
9
10#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum PublicChatType {
14 #[doc(hidden)]
15 #[default]
16 _Default,
17 #[serde(rename = "publicChatTypeHasUsername")]
19 HasUsername(PublicChatTypeHasUsername),
20 #[serde(rename = "publicChatTypeIsLocationBased")]
22 IsLocationBased(PublicChatTypeIsLocationBased),
23}
24
25impl RObject for PublicChatType {
26 #[doc(hidden)]
27 fn extra(&self) -> Option<&str> {
28 match self {
29 PublicChatType::HasUsername(t) => t.extra(),
30 PublicChatType::IsLocationBased(t) => t.extra(),
31
32 _ => None,
33 }
34 }
35 #[doc(hidden)]
36 fn client_id(&self) -> Option<i32> {
37 match self {
38 PublicChatType::HasUsername(t) => t.client_id(),
39 PublicChatType::IsLocationBased(t) => t.client_id(),
40
41 _ => None,
42 }
43 }
44}
45
46impl PublicChatType {
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, PublicChatType::_Default)
53 }
54}
55
56impl AsRef<PublicChatType> for PublicChatType {
57 fn as_ref(&self) -> &PublicChatType {
58 self
59 }
60}
61
62#[derive(Debug, Clone, Default, Serialize, Deserialize)]
64pub struct PublicChatTypeHasUsername {
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}
71
72impl RObject for PublicChatTypeHasUsername {
73 #[doc(hidden)]
74 fn extra(&self) -> Option<&str> {
75 self.extra.as_deref()
76 }
77 #[doc(hidden)]
78 fn client_id(&self) -> Option<i32> {
79 self.client_id
80 }
81}
82
83impl TDPublicChatType for PublicChatTypeHasUsername {}
84
85impl PublicChatTypeHasUsername {
86 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
87 Ok(serde_json::from_str(json.as_ref())?)
88 }
89 pub fn builder() -> PublicChatTypeHasUsernameBuilder {
90 let mut inner = PublicChatTypeHasUsername::default();
91 inner.extra = Some(Uuid::new_v4().to_string());
92
93 PublicChatTypeHasUsernameBuilder { inner }
94 }
95}
96
97#[doc(hidden)]
98pub struct PublicChatTypeHasUsernameBuilder {
99 inner: PublicChatTypeHasUsername,
100}
101
102#[deprecated]
103pub type RTDPublicChatTypeHasUsernameBuilder = PublicChatTypeHasUsernameBuilder;
104
105impl PublicChatTypeHasUsernameBuilder {
106 pub fn build(&self) -> PublicChatTypeHasUsername {
107 self.inner.clone()
108 }
109}
110
111impl AsRef<PublicChatTypeHasUsername> for PublicChatTypeHasUsername {
112 fn as_ref(&self) -> &PublicChatTypeHasUsername {
113 self
114 }
115}
116
117impl AsRef<PublicChatTypeHasUsername> for PublicChatTypeHasUsernameBuilder {
118 fn as_ref(&self) -> &PublicChatTypeHasUsername {
119 &self.inner
120 }
121}
122
123#[derive(Debug, Clone, Default, Serialize, Deserialize)]
125pub struct PublicChatTypeIsLocationBased {
126 #[doc(hidden)]
127 #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
128 extra: Option<String>,
129 #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
130 client_id: Option<i32>,
131}
132
133impl RObject for PublicChatTypeIsLocationBased {
134 #[doc(hidden)]
135 fn extra(&self) -> Option<&str> {
136 self.extra.as_deref()
137 }
138 #[doc(hidden)]
139 fn client_id(&self) -> Option<i32> {
140 self.client_id
141 }
142}
143
144impl TDPublicChatType for PublicChatTypeIsLocationBased {}
145
146impl PublicChatTypeIsLocationBased {
147 pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
148 Ok(serde_json::from_str(json.as_ref())?)
149 }
150 pub fn builder() -> PublicChatTypeIsLocationBasedBuilder {
151 let mut inner = PublicChatTypeIsLocationBased::default();
152 inner.extra = Some(Uuid::new_v4().to_string());
153
154 PublicChatTypeIsLocationBasedBuilder { inner }
155 }
156}
157
158#[doc(hidden)]
159pub struct PublicChatTypeIsLocationBasedBuilder {
160 inner: PublicChatTypeIsLocationBased,
161}
162
163#[deprecated]
164pub type RTDPublicChatTypeIsLocationBasedBuilder = PublicChatTypeIsLocationBasedBuilder;
165
166impl PublicChatTypeIsLocationBasedBuilder {
167 pub fn build(&self) -> PublicChatTypeIsLocationBased {
168 self.inner.clone()
169 }
170}
171
172impl AsRef<PublicChatTypeIsLocationBased> for PublicChatTypeIsLocationBased {
173 fn as_ref(&self) -> &PublicChatTypeIsLocationBased {
174 self
175 }
176}
177
178impl AsRef<PublicChatTypeIsLocationBased> for PublicChatTypeIsLocationBasedBuilder {
179 fn as_ref(&self) -> &PublicChatTypeIsLocationBased {
180 &self.inner
181 }
182}