1use crate::channels::channel::Channel;
4use crate::event_api::app::AppRequest;
5use crate::team::teams::Team;
6use crate::views::view::View;
7use serde::{Deserialize, Serialize};
8use serde_with::skip_serializing_none;
9
10#[skip_serializing_none]
12#[derive(Deserialize, Serialize, Debug, PartialEq)]
13#[serde(tag = "type")]
14pub enum Event {
15 #[serde(rename = "app_home_opened")]
17 AppHomeOpened {
18 user: String,
19 channel: String,
20 event_ts: String,
21 tab: String,
22 view: View,
23 },
24 #[serde(rename = "app_mention")]
26 AppMention {
27 user: String,
28 text: String,
29 ts: String,
30 channel: String,
31 event_ts: String,
32 },
33 #[serde(rename = "app_rate_limited")]
35 AppRateLimited {
36 token: String,
37 team_id: String,
38 minute_rate_limited: i32,
39 api_app_id: String,
40 },
41 #[serde(rename = "app_requested")]
43 AppRequested { app_request: AppRequest },
44 #[serde(rename = "event_callback")]
46 AppUninstalled(CallbackEvent),
47 #[serde(rename = "channel_archive")]
49 ChannelArchive { channel: String, user: String },
50 #[serde(rename = "channel_created")]
52 ChannelCreated { channel: Channel },
53 #[serde(rename = "channel_deleted")]
55 ChannelDeleted { channel: String },
56 #[serde(rename = "channel_history_changed")]
58 ChannelHistoryChanged {
59 latest: String,
60 ts: String,
61 event_ts: String,
62 },
63 #[serde(rename = "channel_id_changed")]
65 ChannelIDChanged {
66 old_channel_id: String,
67 new_channel_id: String,
68 event_ts: String,
69 },
70 #[serde(rename = "channel_left")]
72 ChannelLeft { channel: String },
73 #[serde(rename = "channel_rename")]
75 ChannelRename { channel: Channel },
76 #[serde(rename = "channel_shared")]
78 ChannelShared {
79 connected_team_id: String,
80 channel: String,
81 event_ts: String,
82 },
83 #[serde(rename = "channel_unarchive")]
85 ChannelUnarchive { channel: String, user: String },
86 #[serde(rename = "channel_unshared")]
88 ChannelUnshared {
89 previously_connected_team_id: String,
90 channel: String,
91 is_ext_shared: bool,
92 event_ts: String,
93 },
94 #[serde(rename = "emoji_changed")]
96 EmojiChanged {
97 subtype: String,
98 names: Vec<String>,
99 event_ts: String,
100 },
101 #[serde(rename = "event_callback")]
103 GridMigrationFinished(CallbackEvent),
104 #[serde(rename = "event_callback")]
106 GridMigrationStarted(CallbackEvent),
107 #[serde(rename = "group_archive")]
109 GroupArchive { channel: String },
110 #[serde(rename = "group_close")]
112 GroupClose { user: String, channel: String },
113 #[serde(rename = "group_deleted")]
115 GroupDeleted { channel: String },
116 #[serde(rename = "group_history_changed")]
118 GroupHistoryChanged {
119 latest: String,
120 ts: String,
121 event_ts: String,
122 },
123 #[serde(rename = "group_left")]
125 GroupLeft { channel: String },
126 #[serde(rename = "group_open")]
128 GroupOpen { user: String, channel: String },
129 #[serde(rename = "group_rename")]
131 GroupRename { channel: Channel },
132 #[serde(rename = "group_unarchive")]
134 GroupUnarchive { channel: String },
135 #[serde(rename = "im_close")]
137 ImClose { user: String, channel: String },
138 #[serde(rename = "im_created")]
140 ImCreated { user: String, channel: Channel },
141 #[serde(rename = "im_history_changed")]
143 ImHistoryChanged {
144 latest: String,
145 ts: String,
146 event_ts: String,
147 },
148 #[serde(rename = "im_open")]
150 ImOpen { user: String, channel: String },
151 #[serde(rename = "invite_requested")]
153 InviteRequested {
154 id: String,
155 email: String,
156 date_created: i32,
157 requester_ids: Vec<String>,
158 channel_ids: Vec<String>,
159 invite_type: String,
160 real_name: String,
161 date_expire: i32,
162 request_reason: String,
163 team: Team,
164 },
165 #[serde(rename = "link_shared")]
168 LinkShared,
169 #[serde(rename = "member_joined_channel")]
171 MemberJoinedChannel {
172 user: String,
173 channel: String,
174 channel_type: String,
175 team: String,
176 inviter: String,
177 },
178 #[serde(rename = "member_joined_channel")]
180 MemberLeftChannel {
181 user: String,
182 channel: String,
183 channel_type: String,
184 team: String,
185 },
186 #[serde(rename = "member_joined_channel")]
188 Message {
189 channel: String,
190 user: String,
191 channel_type: String,
192 text: String,
193 ts: String,
194 },
195 #[serde(skip)]
196 None,
197}
198
199impl Event {
200 pub fn block_type(&self) -> EventType {
201 match self {
202 Event::AppHomeOpened { .. } => EventType::AppHomeOpened,
203 Event::AppMention { .. } => EventType::AppMention,
204 Event::AppRateLimited { .. } => EventType::AppRateLimited,
205 Event::AppRequested { .. } => EventType::AppRequested,
206 Event::AppUninstalled(_) => EventType::AppUninstalled,
207 Event::ChannelArchive { .. } => EventType::ChannelArchive,
208 Event::ChannelCreated { .. } => EventType::ChannelCreated,
209 Event::ChannelDeleted { .. } => EventType::ChannelDeleted,
210 Event::ChannelHistoryChanged { .. } => EventType::ChannelHistoryChanged,
211 Event::ChannelIDChanged { .. } => EventType::ChannelIDChanged,
212 Event::ChannelLeft { .. } => EventType::ChannelLeft,
213 Event::ChannelRename { .. } => EventType::ChannelRename,
214 Event::ChannelShared { .. } => EventType::ChannelShared,
215 Event::ChannelUnarchive { .. } => EventType::ChannelUnarchive,
216 Event::ChannelUnshared { .. } => EventType::ChannelUnshared,
217 Event::EmojiChanged { .. } => EventType::EmojiChanged,
218 Event::GridMigrationFinished(_) => EventType::GridMigrationFinished,
219 Event::GridMigrationStarted(_) => EventType::GridMigrationStarted,
220 Event::GroupArchive { .. } => EventType::GroupArchive,
221 Event::GroupClose { .. } => EventType::GroupClose,
222 Event::GroupDeleted { .. } => EventType::GroupDeleted,
223 Event::GroupHistoryChanged { .. } => EventType::GroupHistoryChanged,
224 Event::GroupLeft { .. } => EventType::GroupLeft,
225 Event::GroupOpen { .. } => EventType::GroupOpen,
226 Event::GroupRename { .. } => EventType::GroupRename,
227 Event::GroupUnarchive { .. } => EventType::GroupUnarchive,
228 Event::ImClose { .. } => EventType::ImClose,
229 Event::ImCreated { .. } => EventType::ImCreated,
230 Event::ImHistoryChanged { .. } => EventType::ImHistoryChanged,
231 Event::ImOpen { .. } => EventType::ImOpen,
232 Event::InviteRequested { .. } => EventType::InviteRequested,
233 Event::LinkShared => EventType::LinkShared,
234 Event::MemberJoinedChannel { .. } => EventType::MemberJoinedChannel,
235 Event::MemberLeftChannel { .. } => EventType::MemberLeftChannel,
236 Event::Message { .. } => EventType::Message,
237 Event::None => EventType::None,
238 }
239 }
240}
241
242#[derive(Deserialize, Serialize, Debug, PartialEq)]
244#[serde(rename_all = "snake_case")]
245pub enum EventType {
246 AppHomeOpened,
247 AppMention,
248 AppRateLimited,
249 AppRequested,
250 AppUninstalled,
251 ChannelArchive,
252 ChannelCreated,
253 ChannelDeleted,
254 ChannelHistoryChanged,
255 ChannelIDChanged,
256 ChannelLeft,
257 ChannelRename,
258 ChannelShared,
259 ChannelUnarchive,
260 ChannelUnshared,
261 EmojiChanged,
262 GridMigrationFinished,
263 GridMigrationStarted,
264 GroupArchive,
265 GroupClose,
266 GroupDeleted,
267 GroupHistoryChanged,
268 GroupLeft,
269 GroupOpen,
270 GroupRename,
271 GroupUnarchive,
272 ImClose,
273 ImCreated,
274 ImHistoryChanged,
275 ImOpen,
276 InviteRequested,
277 LinkShared,
278 MemberJoinedChannel,
279 MemberLeftChannel,
280 Message,
281 #[serde(skip)]
282 None,
283}
284
285#[skip_serializing_none]
286#[derive(Deserialize, Serialize, Debug, PartialEq)]
287pub struct CallbackEvent {
288 token: String,
289 team_id: String,
290 api_app_id: String,
291 #[serde(rename = "event")]
292 callback_event: CallbackEventInner,
293 event_id: String,
294 event_time: i32,
295}
296
297#[skip_serializing_none]
298#[derive(Deserialize, Serialize, Debug, PartialEq)]
299pub struct CallbackEventInner {
300 #[serde(rename = "type")]
301 pub type_filed: CallbackEventType,
302 pub enterprise_id: Option<String>,
303}
304
305#[derive(Deserialize, Serialize, Debug, PartialEq)]
306#[serde(rename_all = "snake_case")]
307pub enum CallbackEventType {
308 AppUninstalled,
309 GridMigrationFinished,
310 GridMigrationStarted,
311}