rustigram_types/
chat_member.rs1use crate::chat::ChatPermissions;
2use crate::user::User;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7#[serde(tag = "status", rename_all = "snake_case")]
8pub enum ChatMember {
9 #[serde(rename = "creator")]
11 Owner(ChatMemberOwner),
12 Administrator(ChatMemberAdministrator),
14 Member(ChatMemberMember),
16 Restricted(ChatMemberRestricted),
18 Left(ChatMemberLeft),
20 #[serde(rename = "kicked")]
22 Banned(ChatMemberBanned),
23}
24
25impl ChatMember {
26 #[must_use]
28 pub fn user(&self) -> &User {
29 match self {
30 Self::Owner(m) => &m.user,
31 Self::Administrator(m) => &m.user,
32 Self::Member(m) => &m.user,
33 Self::Restricted(m) => &m.user,
34 Self::Left(m) => &m.user,
35 Self::Banned(m) => &m.user,
36 }
37 }
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize)]
42pub struct ChatMemberOwner {
43 pub user: User,
45 pub is_anonymous: bool,
47 #[serde(skip_serializing_if = "Option::is_none")]
49 pub custom_title: Option<String>,
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
54pub struct ChatMemberAdministrator {
55 pub user: User,
57 pub can_be_edited: bool,
59 pub is_anonymous: bool,
61 pub can_manage_chat: bool,
63 pub can_delete_messages: bool,
65 pub can_manage_video_chats: bool,
67 pub can_restrict_members: bool,
69 pub can_promote_members: bool,
71 pub can_change_info: bool,
73 pub can_invite_users: bool,
75 #[serde(default)]
76 pub can_post_messages: bool,
78 #[serde(default)]
79 pub can_edit_messages: bool,
81 #[serde(default)]
83 pub can_pin_messages: bool,
84 #[serde(default)]
86 pub can_manage_topics: bool,
87 #[serde(default)]
89 pub can_post_stories: bool,
90 #[serde(default)]
92 pub can_edit_stories: bool,
93 #[serde(default)]
95 pub can_delete_stories: bool,
96 #[serde(default)]
98 pub can_manage_direct_messages: bool,
99 #[serde(default)]
101 pub can_manage_tags: bool,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub custom_title: Option<String>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize)]
109pub struct ChatMemberMember {
110 pub user: User,
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub until_date: Option<i64>,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
119pub struct ChatMemberRestricted {
120 pub user: User,
122 pub is_member: bool,
124 #[serde(flatten)]
126 pub permissions: ChatPermissions,
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub until_date: Option<i64>,
130}
131
132#[derive(Debug, Clone, Serialize, Deserialize)]
133pub struct ChatMemberLeft {
135 pub user: User,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
141pub struct ChatMemberBanned {
142 pub user: User,
144 #[serde(skip_serializing_if = "Option::is_none")]
146 pub until_date: Option<i64>,
147}