rust_tdlib/types/
supergroup.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Represents a supergroup or channel with zero or more members (subscribers in the case of channels). From the point of view of the system, a channel is a special kind of a supergroup: only administrators can post and see the list of members, and posts from all administrators use the name and photo of the channel instead of individual names and profile photos. Unlike supergroups, channels can have an unlimited number of subscribers
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct Supergroup {
8    #[doc(hidden)]
9    #[serde(rename(serialize = "@extra", deserialize = "@extra"))]
10    extra: Option<String>,
11    #[serde(rename(serialize = "@client_id", deserialize = "@client_id"))]
12    client_id: Option<i32>,
13    /// Supergroup or channel identifier
14
15    #[serde(default)]
16    id: i64,
17    /// Username of the supergroup or channel; empty for private supergroups or channels
18
19    #[serde(default)]
20    username: String,
21    /// Point in time (Unix timestamp) when the current user joined, or the point in time when the supergroup or channel was created, in case the user is not a member
22
23    #[serde(default)]
24    date: i32,
25    /// Status of the current user in the supergroup or channel; custom title will be always empty
26
27    #[serde(skip_serializing_if = "ChatMemberStatus::_is_default")]
28    status: ChatMemberStatus,
29    /// Number of members in the supergroup or channel; 0 if unknown. Currently, it is guaranteed to be known only if the supergroup or channel was received through searchPublicChats, searchChatsNearby, getInactiveSupergroupChats, getSuitableDiscussionChats, getGroupsInCommon, or getUserPrivacySettingRules
30
31    #[serde(default)]
32    member_count: i32,
33    /// True, if the channel has a discussion group, or the supergroup is the designated discussion group for a channel
34
35    #[serde(default)]
36    has_linked_chat: bool,
37    /// True, if the supergroup is connected to a location, i.e. the supergroup is a location-based supergroup
38
39    #[serde(default)]
40    has_location: bool,
41    /// True, if messages sent to the channel need to contain information about the sender. This field is only applicable to channels
42
43    #[serde(default)]
44    sign_messages: bool,
45    /// True, if the slow mode is enabled in the supergroup
46
47    #[serde(default)]
48    is_slow_mode_enabled: bool,
49    /// True, if the supergroup is a channel
50
51    #[serde(default)]
52    is_channel: bool,
53    /// True, if the supergroup is a broadcast group, i.e. only administrators can send messages and there is no limit on the number of members
54
55    #[serde(default)]
56    is_broadcast_group: bool,
57    /// True, if the supergroup or channel is verified
58
59    #[serde(default)]
60    is_verified: bool,
61    /// If non-empty, contains a human-readable description of the reason why access to this supergroup or channel must be restricted
62
63    #[serde(default)]
64    restriction_reason: String,
65    /// True, if many users reported this supergroup or channel as a scam
66
67    #[serde(default)]
68    is_scam: bool,
69    /// True, if many users reported this supergroup or channel as a fake account
70
71    #[serde(default)]
72    is_fake: bool,
73}
74
75impl RObject for Supergroup {
76    #[doc(hidden)]
77    fn extra(&self) -> Option<&str> {
78        self.extra.as_deref()
79    }
80    #[doc(hidden)]
81    fn client_id(&self) -> Option<i32> {
82        self.client_id
83    }
84}
85
86impl Supergroup {
87    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
88        Ok(serde_json::from_str(json.as_ref())?)
89    }
90    pub fn builder() -> SupergroupBuilder {
91        let mut inner = Supergroup::default();
92        inner.extra = Some(Uuid::new_v4().to_string());
93
94        SupergroupBuilder { inner }
95    }
96
97    pub fn id(&self) -> i64 {
98        self.id
99    }
100
101    pub fn username(&self) -> &String {
102        &self.username
103    }
104
105    pub fn date(&self) -> i32 {
106        self.date
107    }
108
109    pub fn status(&self) -> &ChatMemberStatus {
110        &self.status
111    }
112
113    pub fn member_count(&self) -> i32 {
114        self.member_count
115    }
116
117    pub fn has_linked_chat(&self) -> bool {
118        self.has_linked_chat
119    }
120
121    pub fn has_location(&self) -> bool {
122        self.has_location
123    }
124
125    pub fn sign_messages(&self) -> bool {
126        self.sign_messages
127    }
128
129    pub fn is_slow_mode_enabled(&self) -> bool {
130        self.is_slow_mode_enabled
131    }
132
133    pub fn is_channel(&self) -> bool {
134        self.is_channel
135    }
136
137    pub fn is_broadcast_group(&self) -> bool {
138        self.is_broadcast_group
139    }
140
141    pub fn is_verified(&self) -> bool {
142        self.is_verified
143    }
144
145    pub fn restriction_reason(&self) -> &String {
146        &self.restriction_reason
147    }
148
149    pub fn is_scam(&self) -> bool {
150        self.is_scam
151    }
152
153    pub fn is_fake(&self) -> bool {
154        self.is_fake
155    }
156}
157
158#[doc(hidden)]
159pub struct SupergroupBuilder {
160    inner: Supergroup,
161}
162
163#[deprecated]
164pub type RTDSupergroupBuilder = SupergroupBuilder;
165
166impl SupergroupBuilder {
167    pub fn build(&self) -> Supergroup {
168        self.inner.clone()
169    }
170
171    pub fn id(&mut self, id: i64) -> &mut Self {
172        self.inner.id = id;
173        self
174    }
175
176    pub fn username<T: AsRef<str>>(&mut self, username: T) -> &mut Self {
177        self.inner.username = username.as_ref().to_string();
178        self
179    }
180
181    pub fn date(&mut self, date: i32) -> &mut Self {
182        self.inner.date = date;
183        self
184    }
185
186    pub fn status<T: AsRef<ChatMemberStatus>>(&mut self, status: T) -> &mut Self {
187        self.inner.status = status.as_ref().clone();
188        self
189    }
190
191    pub fn member_count(&mut self, member_count: i32) -> &mut Self {
192        self.inner.member_count = member_count;
193        self
194    }
195
196    pub fn has_linked_chat(&mut self, has_linked_chat: bool) -> &mut Self {
197        self.inner.has_linked_chat = has_linked_chat;
198        self
199    }
200
201    pub fn has_location(&mut self, has_location: bool) -> &mut Self {
202        self.inner.has_location = has_location;
203        self
204    }
205
206    pub fn sign_messages(&mut self, sign_messages: bool) -> &mut Self {
207        self.inner.sign_messages = sign_messages;
208        self
209    }
210
211    pub fn is_slow_mode_enabled(&mut self, is_slow_mode_enabled: bool) -> &mut Self {
212        self.inner.is_slow_mode_enabled = is_slow_mode_enabled;
213        self
214    }
215
216    pub fn is_channel(&mut self, is_channel: bool) -> &mut Self {
217        self.inner.is_channel = is_channel;
218        self
219    }
220
221    pub fn is_broadcast_group(&mut self, is_broadcast_group: bool) -> &mut Self {
222        self.inner.is_broadcast_group = is_broadcast_group;
223        self
224    }
225
226    pub fn is_verified(&mut self, is_verified: bool) -> &mut Self {
227        self.inner.is_verified = is_verified;
228        self
229    }
230
231    pub fn restriction_reason<T: AsRef<str>>(&mut self, restriction_reason: T) -> &mut Self {
232        self.inner.restriction_reason = restriction_reason.as_ref().to_string();
233        self
234    }
235
236    pub fn is_scam(&mut self, is_scam: bool) -> &mut Self {
237        self.inner.is_scam = is_scam;
238        self
239    }
240
241    pub fn is_fake(&mut self, is_fake: bool) -> &mut Self {
242        self.inner.is_fake = is_fake;
243        self
244    }
245}
246
247impl AsRef<Supergroup> for Supergroup {
248    fn as_ref(&self) -> &Supergroup {
249        self
250    }
251}
252
253impl AsRef<Supergroup> for SupergroupBuilder {
254    fn as_ref(&self) -> &Supergroup {
255        &self.inner
256    }
257}