rust_tdlib/types/
chat_member.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Describes a user or a chat as a member of another chat
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct ChatMember {
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    /// Identifier of the chat member. Currently, other chats can be only Left or Banned. Only supergroups and channels can have other chats as Left or Banned members and these chats must be supergroups or channels
14
15    #[serde(skip_serializing_if = "MessageSender::_is_default")]
16    member_id: MessageSender,
17    /// Identifier of a user that invited/promoted/banned this member in the chat; 0 if unknown
18
19    #[serde(default)]
20    inviter_user_id: i64,
21    /// Point in time (Unix timestamp) when the user joined the chat
22
23    #[serde(default)]
24    joined_chat_date: i32,
25    /// Status of the member in the chat
26
27    #[serde(skip_serializing_if = "ChatMemberStatus::_is_default")]
28    status: ChatMemberStatus,
29}
30
31impl RObject for ChatMember {
32    #[doc(hidden)]
33    fn extra(&self) -> Option<&str> {
34        self.extra.as_deref()
35    }
36    #[doc(hidden)]
37    fn client_id(&self) -> Option<i32> {
38        self.client_id
39    }
40}
41
42impl ChatMember {
43    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
44        Ok(serde_json::from_str(json.as_ref())?)
45    }
46    pub fn builder() -> ChatMemberBuilder {
47        let mut inner = ChatMember::default();
48        inner.extra = Some(Uuid::new_v4().to_string());
49
50        ChatMemberBuilder { inner }
51    }
52
53    pub fn member_id(&self) -> &MessageSender {
54        &self.member_id
55    }
56
57    pub fn inviter_user_id(&self) -> i64 {
58        self.inviter_user_id
59    }
60
61    pub fn joined_chat_date(&self) -> i32 {
62        self.joined_chat_date
63    }
64
65    pub fn status(&self) -> &ChatMemberStatus {
66        &self.status
67    }
68}
69
70#[doc(hidden)]
71pub struct ChatMemberBuilder {
72    inner: ChatMember,
73}
74
75#[deprecated]
76pub type RTDChatMemberBuilder = ChatMemberBuilder;
77
78impl ChatMemberBuilder {
79    pub fn build(&self) -> ChatMember {
80        self.inner.clone()
81    }
82
83    pub fn member_id<T: AsRef<MessageSender>>(&mut self, member_id: T) -> &mut Self {
84        self.inner.member_id = member_id.as_ref().clone();
85        self
86    }
87
88    pub fn inviter_user_id(&mut self, inviter_user_id: i64) -> &mut Self {
89        self.inner.inviter_user_id = inviter_user_id;
90        self
91    }
92
93    pub fn joined_chat_date(&mut self, joined_chat_date: i32) -> &mut Self {
94        self.inner.joined_chat_date = joined_chat_date;
95        self
96    }
97
98    pub fn status<T: AsRef<ChatMemberStatus>>(&mut self, status: T) -> &mut Self {
99        self.inner.status = status.as_ref().clone();
100        self
101    }
102}
103
104impl AsRef<ChatMember> for ChatMember {
105    fn as_ref(&self) -> &ChatMember {
106        self
107    }
108}
109
110impl AsRef<ChatMember> for ChatMemberBuilder {
111    fn as_ref(&self) -> &ChatMember {
112        &self.inner
113    }
114}