rustigram_types/
chat_member.rs1use serde::{Deserialize, Serialize};
2
3use crate::chat::ChatPermissions;
4use crate::user::User;
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(tag = "status", rename_all = "snake_case")]
9pub enum ChatMember {
10 #[serde(rename = "creator")]
12 Owner(ChatMemberOwner),
13 Administrator(ChatMemberAdministrator),
15 Member(ChatMemberMember),
17 Restricted(ChatMemberRestricted),
19 Left(ChatMemberLeft),
21 #[serde(rename = "kicked")]
23 Banned(ChatMemberBanned),
24}
25
26impl ChatMember {
27 #[must_use]
29 pub fn user(&self) -> &User {
30 match self {
31 Self::Owner(m) => &m.user,
32 Self::Administrator(m) => &m.user,
33 Self::Member(m) => &m.user,
34 Self::Restricted(m) => &m.user,
35 Self::Left(m) => &m.user,
36 Self::Banned(m) => &m.user,
37 }
38 }
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct ChatMemberOwner {
44 pub user: User,
46 pub is_anonymous: bool,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub custom_title: Option<String>,
51}
52
53#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct ChatMemberAdministrator {
56 pub user: User,
58 pub can_be_edited: bool,
60 pub is_anonymous: bool,
62 pub can_manage_chat: bool,
64 pub can_delete_messages: bool,
66 pub can_manage_video_chats: bool,
68 pub can_restrict_members: bool,
70 pub can_promote_members: bool,
72 pub can_change_info: bool,
74 pub can_invite_users: bool,
76 #[serde(default)]
78 pub can_post_messages: bool,
79 #[serde(default)]
81 pub can_edit_messages: bool,
82 #[serde(default)]
84 pub can_pin_messages: bool,
85 #[serde(default)]
87 pub can_manage_topics: bool,
88 #[serde(default)]
90 pub can_post_stories: bool,
91 #[serde(default)]
93 pub can_edit_stories: bool,
94 #[serde(default)]
96 pub can_delete_stories: bool,
97 #[serde(default)]
99 pub can_manage_direct_messages: bool,
100 #[serde(default)]
102 pub can_manage_tags: bool,
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub custom_title: Option<String>,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct ChatMemberMember {
111 pub user: User,
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub tag: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub until_date: Option<i64>,
119}
120
121#[derive(Debug, Clone, Serialize, Deserialize)]
123pub struct ChatMemberRestricted {
124 pub user: User,
126 #[serde(skip_serializing_if = "Option::is_none")]
128 pub tag: Option<String>,
129 pub is_member: bool,
131 #[serde(flatten)]
133 pub permissions: ChatPermissions,
134 pub can_edit_tag: bool,
136 pub can_react_to_messages: bool,
138 #[serde(skip_serializing_if = "Option::is_none")]
140 pub until_date: Option<i64>,
141}
142
143#[derive(Debug, Clone, Serialize, Deserialize)]
145pub struct ChatMemberLeft {
146 pub user: User,
148}
149
150#[derive(Debug, Clone, Serialize, Deserialize)]
152pub struct ChatMemberBanned {
153 pub user: User,
155 #[serde(skip_serializing_if = "Option::is_none")]
157 pub until_date: Option<i64>,
158}