rust_tdlib/types/
chat_event.rs

1use crate::errors::Result;
2use crate::types::*;
3use uuid::Uuid;
4
5/// Represents a chat event
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct ChatEvent {
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    /// Chat event identifier
14
15    #[serde(
16        deserialize_with = "super::_common::number_from_string",
17        serialize_with = "super::_common::string_to_number"
18    )]
19    #[serde(default)]
20    id: i64,
21    /// Point in time (Unix timestamp) when the event happened
22
23    #[serde(default)]
24    date: i32,
25    /// Identifier of the user or chat who performed the action
26
27    #[serde(skip_serializing_if = "MessageSender::_is_default")]
28    member_id: MessageSender,
29    /// The action
30
31    #[serde(skip_serializing_if = "ChatEventAction::_is_default")]
32    action: ChatEventAction,
33}
34
35impl RObject for ChatEvent {
36    #[doc(hidden)]
37    fn extra(&self) -> Option<&str> {
38        self.extra.as_deref()
39    }
40    #[doc(hidden)]
41    fn client_id(&self) -> Option<i32> {
42        self.client_id
43    }
44}
45
46impl ChatEvent {
47    pub fn from_json<S: AsRef<str>>(json: S) -> Result<Self> {
48        Ok(serde_json::from_str(json.as_ref())?)
49    }
50    pub fn builder() -> ChatEventBuilder {
51        let mut inner = ChatEvent::default();
52        inner.extra = Some(Uuid::new_v4().to_string());
53
54        ChatEventBuilder { inner }
55    }
56
57    pub fn id(&self) -> i64 {
58        self.id
59    }
60
61    pub fn date(&self) -> i32 {
62        self.date
63    }
64
65    pub fn member_id(&self) -> &MessageSender {
66        &self.member_id
67    }
68
69    pub fn action(&self) -> &ChatEventAction {
70        &self.action
71    }
72}
73
74#[doc(hidden)]
75pub struct ChatEventBuilder {
76    inner: ChatEvent,
77}
78
79#[deprecated]
80pub type RTDChatEventBuilder = ChatEventBuilder;
81
82impl ChatEventBuilder {
83    pub fn build(&self) -> ChatEvent {
84        self.inner.clone()
85    }
86
87    pub fn id(&mut self, id: i64) -> &mut Self {
88        self.inner.id = id;
89        self
90    }
91
92    pub fn date(&mut self, date: i32) -> &mut Self {
93        self.inner.date = date;
94        self
95    }
96
97    pub fn member_id<T: AsRef<MessageSender>>(&mut self, member_id: T) -> &mut Self {
98        self.inner.member_id = member_id.as_ref().clone();
99        self
100    }
101
102    pub fn action<T: AsRef<ChatEventAction>>(&mut self, action: T) -> &mut Self {
103        self.inner.action = action.as_ref().clone();
104        self
105    }
106}
107
108impl AsRef<ChatEvent> for ChatEvent {
109    fn as_ref(&self) -> &ChatEvent {
110        self
111    }
112}
113
114impl AsRef<ChatEvent> for ChatEventBuilder {
115    fn as_ref(&self) -> &ChatEvent {
116        &self.inner
117    }
118}