1use serde::{Deserialize, Serialize};
2
3use crate::{
4 channel::{Channel, FieldsChannel, PartialChannel},
5 emoji::Emoji,
6 member::{FieldsMember, Member, MemberCompositeKey, PartialMember},
7 message::{AppendMessage, Message, PartialMessage},
8 report::Report,
9 server::{FieldsRole, FieldsServer, PartialRole, PartialServer, Server},
10 user::{FieldsUser, PartialUser, RelationshipStatus, User, UserSettings},
11 webhook::{FieldsWebhook, PartialWebhook, Webhook},
12};
13
14#[derive(Deserialize, Debug, Clone, Eq, PartialEq)]
15#[serde(tag = "type")]
16pub enum ErrorId {
17 LabelMe,
18 InternalError {
19 at: String,
20 },
21 InvalidSenssion,
22 OnboardingNotFinished,
23 AlreadyAuthenticated,
24 MalformedData {
25 msg: String,
26 },
27 #[serde(other)]
28 Unknown,
29}
30
31#[derive(Deserialize, Debug, Clone)]
33#[serde(tag = "type")]
34pub enum ServerEvent {
35 Bulk(BulkEvent),
37
38 Error(ErrorEvent),
40
41 Authenticated,
43
44 Ready(ReadyEvent),
46
47 Pong(PongEvent),
49
50 Message(Message),
52
53 MessageUpdate(MessageUpdateEvent),
55
56 MessageAppend(MessageAppendEvent),
58
59 MessageDelete(MessageDeleteEvent),
61
62 MessageReact(MessageReactEvent),
64
65 MessageUnreact(MessageUnreactEvent),
67
68 MessageRemoveReaction(MessageRemoveReactionEvent),
70
71 BulkMessageDelete(BulkMessageDeleteEvent),
73
74 ChannelCreate(Channel),
76
77 ChannelUpdate(ChannelUpdateEvent),
79
80 ChannelDelete(ChannelDeleteEvent),
82
83 ChannelGroupJoin(ChannelGroupJoinEvent),
85
86 ChannelGroupLeave(ChannelGroupLeaveEvent),
88
89 ChannelStartTyping(ChannelStartTypingEvent),
91
92 ChannelStopTyping(ChannelStopTypingEvent),
94
95 ChannelAck(ChannelAckEvent),
97
98 ServerCreate(ServerCreateEvent),
100
101 ServerUpdate(ServerUpdateEvent),
103
104 ServerDelete(ServerDeleteEvent),
106
107 ServerMemberUpdate(ServerMemberUpdateEvent),
109
110 ServerMemberJoin(ServerMemberJoinEvent),
112
113 ServerMemberLeave(ServerMemberLeaveEvent),
115
116 ServerRoleUpdate(ServerRoleUpdateEvent),
118
119 ServerRoleDelete(ServerRoleDeleteEvent),
121
122 UserUpdate(UserUpdateEvent),
124
125 UserRelationship(UserRelationshipEvent),
127
128 UserSettingsUpdate(UserSettingsUpdateEvent),
130
131 UserPlatformWipe(UserPlatformWipeEvent),
141
142 EmojiCreate(Emoji),
144
145 EmojiDelete(EmojiDeleteEvent),
147
148 WebhookCreate(Webhook),
150
151 WebhookUpdate(WebhookUpdateEvent),
153
154 WebhookDelete(WebhookDeleteEvent),
156
157 ReportCreate(Report),
159
160 Auth(AuthifierEvent),
162
163 #[serde(other)]
167 Unknown,
168}
169
170#[derive(Serialize, Debug, Clone, Eq, PartialEq)]
172#[serde(tag = "type")]
173pub enum ClientEvent {
174 Authenticate { token: String },
175 Ping { data: i32 },
176 BeginTyping { channel: String },
177 EndTyping { channel: String },
178}
179
180#[derive(Serialize, Deserialize, Debug, Clone)]
182#[serde(tag = "event_type")]
183pub enum AuthifierEvent {
184 DeleteSession {
185 user_id: String,
186 session_id: String,
187 },
188 DeleteAllSessions {
189 user_id: String,
190 exclude_session_id: Option<String>,
191 },
192}
193
194#[derive(Deserialize, Debug, Clone)]
196pub struct BulkEvent {
197 pub v: Vec<ServerEvent>,
199}
200
201#[derive(Deserialize, Debug, Clone)]
203pub struct ErrorEvent {
204 pub error: ErrorId,
206}
207
208#[derive(Deserialize, Debug, Clone)]
210pub struct ReadyEvent {
211 pub users: Vec<User>,
213 pub servers: Vec<Server>,
215 pub channels: Vec<Channel>,
217 pub members: Vec<Member>,
219 pub emojis: Option<Vec<Emoji>>,
221}
222
223#[derive(Deserialize, Debug, Clone)]
225pub struct PongEvent {
226 pub data: u32,
228}
229
230#[derive(Deserialize, Debug, Clone)]
232pub struct MessageUpdateEvent {
233 pub id: String,
235 pub channel: String,
237 pub data: PartialMessage,
239}
240
241#[derive(Deserialize, Debug, Clone)]
243pub struct MessageAppendEvent {
244 pub id: String,
246 pub channel: String,
248 pub append: AppendMessage,
250}
251
252#[derive(Deserialize, Debug, Clone)]
254pub struct MessageDeleteEvent {
255 pub id: String,
257 pub channel: String,
259}
260
261#[derive(Deserialize, Debug, Clone)]
263pub struct MessageReactEvent {
264 pub id: String,
266 pub channel_id: String,
268 pub user_id: String,
270 pub emoji_id: String,
272}
273
274#[derive(Deserialize, Debug, Clone)]
276pub struct MessageUnreactEvent {
277 pub id: String,
279 pub channel_id: String,
281 pub user_id: String,
283 pub emoji_id: String,
285}
286
287#[derive(Deserialize, Debug, Clone)]
289pub struct MessageRemoveReactionEvent {
290 pub id: String,
292 pub channel_id: String,
294 pub emoji_id: String,
296}
297
298#[derive(Deserialize, Debug, Clone)]
300pub struct BulkMessageDeleteEvent {
301 pub channel: String,
303 pub ids: Vec<String>,
305}
306
307#[derive(Deserialize, Debug, Clone)]
309pub struct ChannelUpdateEvent {
310 pub id: String,
311 pub data: PartialChannel,
312 pub clear: Vec<FieldsChannel>,
313}
314
315#[derive(Deserialize, Debug, Clone)]
317pub struct ChannelDeleteEvent {
318 pub id: String,
320}
321
322#[derive(Deserialize, Debug, Clone)]
324pub struct ChannelGroupJoinEvent {
325 pub id: String,
327 pub user: String,
329}
330
331#[derive(Deserialize, Debug, Clone)]
333pub struct ChannelGroupLeaveEvent {
334 pub id: String,
336 pub user: String,
338}
339
340#[derive(Deserialize, Debug, Clone)]
342pub struct ChannelStartTypingEvent {
343 pub id: String,
345 pub user: String,
347}
348
349#[derive(Deserialize, Debug, Clone)]
351pub struct ChannelStopTypingEvent {
352 pub id: String,
354 pub user: String,
356}
357
358#[derive(Deserialize, Debug, Clone)]
360pub struct ChannelAckEvent {
361 pub id: String,
363 pub user: String,
365 pub message_id: String,
367}
368
369#[derive(Deserialize, Debug, Clone)]
371pub struct ServerCreateEvent {
372 pub id: String,
374 pub server: Server,
376 pub channels: Vec<Channel>,
378}
379
380#[derive(Deserialize, Debug, Clone)]
382pub struct ServerUpdateEvent {
383 pub id: String,
385 pub data: PartialServer,
387 pub clear: Vec<FieldsServer>,
389}
390
391#[derive(Deserialize, Debug, Clone)]
393pub struct ServerDeleteEvent {
394 pub id: String,
396}
397
398#[derive(Deserialize, Debug, Clone)]
400pub struct ServerMemberUpdateEvent {
401 pub id: MemberCompositeKey,
403 pub data: PartialMember,
405 pub clear: Vec<FieldsMember>,
407}
408
409#[derive(Deserialize, Debug, Clone)]
411pub struct ServerMemberJoinEvent {
412 pub id: String,
414 pub user: String,
416}
417
418#[derive(Deserialize, Debug, Clone)]
420pub struct ServerMemberLeaveEvent {
421 pub id: String,
423 pub user: String,
425}
426
427#[derive(Deserialize, Debug, Clone)]
429pub struct ServerRoleUpdateEvent {
430 pub id: String,
432 pub role_id: String,
434 pub data: PartialRole,
436 pub clear: Vec<FieldsRole>,
438}
439
440#[derive(Deserialize, Debug, Clone)]
442pub struct ServerRoleDeleteEvent {
443 pub id: String,
445 pub role_id: String,
447}
448
449#[derive(Deserialize, Debug, Clone)]
451pub struct UserUpdateEvent {
452 pub id: String,
454 pub data: PartialUser,
456 pub clear: Vec<FieldsUser>,
458}
459
460#[derive(Deserialize, Debug, Clone)]
462pub struct UserRelationshipEvent {
463 pub id: String,
464 pub user: User,
466 pub status: RelationshipStatus,
468}
469
470#[derive(Deserialize, Debug, Clone)]
472pub struct UserSettingsUpdateEvent {
473 pub id: String,
474 pub update: UserSettings,
476}
477
478#[derive(Deserialize, Debug, Clone)]
480pub struct UserPlatformWipeEvent {
481 pub user_id: String,
483 pub flags: i32,
485}
486
487#[derive(Deserialize, Debug, Clone)]
489pub struct EmojiDeleteEvent {
490 pub id: String,
492}
493
494#[derive(Deserialize, Debug, Clone)]
496pub struct WebhookUpdateEvent {
497 pub id: String,
499 pub data: PartialWebhook,
501 pub remove: Vec<FieldsWebhook>,
503}
504
505#[derive(Deserialize, Debug, Clone)]
507pub struct WebhookDeleteEvent {
508 pub id: String,
509}