rust_tdlib/types/
public_chat_type.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5use std::fmt::Debug;
6
7/// Describes a type of public chats
8pub trait TDPublicChatType: Debug + RObject {}
9
10/// Describes a type of public chats
11#[derive(Debug, Clone, Deserialize, Serialize, Default)]
12#[serde(tag = "@type")]
13pub enum PublicChatType {
14    #[doc(hidden)]
15    #[default]
16    _Default,
17    /// The chat is public, because it has username
18    #[serde(rename = "publicChatTypeHasUsername")]
19    HasUsername(PublicChatTypeHasUsername),
20    /// The chat is public, because it is a location-based supergroup
21    #[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/// The chat is public, because it has username
63#[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/// The chat is public, because it is a location-based supergroup
124#[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}