rive_models/
event.rs

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/// Event sent by server
32#[derive(Deserialize, Debug, Clone)]
33#[serde(tag = "type")]
34pub enum ServerEvent {
35    /// Multiple events
36    Bulk(BulkEvent),
37
38    /// Error
39    Error(ErrorEvent),
40
41    /// Successfully authenticated
42    Authenticated,
43
44    /// Basic data to cache
45    Ready(ReadyEvent),
46
47    /// Ping response
48    Pong(PongEvent),
49
50    /// New message
51    Message(Message),
52
53    /// Update existing message
54    MessageUpdate(MessageUpdateEvent),
55
56    /// Append information to existing message
57    MessageAppend(MessageAppendEvent),
58
59    /// Delete message
60    MessageDelete(MessageDeleteEvent),
61
62    /// New reaction to a message
63    MessageReact(MessageReactEvent),
64
65    /// Remove user's reaction from message
66    MessageUnreact(MessageUnreactEvent),
67
68    /// Remove a reaction from message
69    MessageRemoveReaction(MessageRemoveReactionEvent),
70
71    /// Bulk delete messages
72    BulkMessageDelete(BulkMessageDeleteEvent),
73
74    /// New channel
75    ChannelCreate(Channel),
76
77    /// Update existing channel
78    ChannelUpdate(ChannelUpdateEvent),
79
80    /// Delete channel
81    ChannelDelete(ChannelDeleteEvent),
82
83    /// User joins a group
84    ChannelGroupJoin(ChannelGroupJoinEvent),
85
86    /// User leaves a group
87    ChannelGroupLeave(ChannelGroupLeaveEvent),
88
89    /// User started typing in a channel
90    ChannelStartTyping(ChannelStartTypingEvent),
91
92    /// User stopped typing in a channel
93    ChannelStopTyping(ChannelStopTypingEvent),
94
95    /// User acknowledged message in channel
96    ChannelAck(ChannelAckEvent),
97
98    /// New server
99    ServerCreate(ServerCreateEvent),
100
101    /// Update existing server
102    ServerUpdate(ServerUpdateEvent),
103
104    /// Delete server
105    ServerDelete(ServerDeleteEvent),
106
107    /// Update existing server member
108    ServerMemberUpdate(ServerMemberUpdateEvent),
109
110    /// User joins server
111    ServerMemberJoin(ServerMemberJoinEvent),
112
113    /// User left server
114    ServerMemberLeave(ServerMemberLeaveEvent),
115
116    /// Server role created or updated
117    ServerRoleUpdate(ServerRoleUpdateEvent),
118
119    /// Server role deleted
120    ServerRoleDelete(ServerRoleDeleteEvent),
121
122    /// Update existing user
123    UserUpdate(UserUpdateEvent),
124
125    /// Relationship with another user changed
126    UserRelationship(UserRelationshipEvent),
127
128    /// Settings updated remotely
129    UserSettingsUpdate(UserSettingsUpdateEvent),
130
131    /// User has been platform banned or deleted their account
132    ///
133    /// Clients should remove the following associated data:
134    /// - Messages
135    /// - DM Channels
136    /// - Relationships
137    /// - Server Memberships
138    ///
139    /// User flags are specified to explain why a wipe is occurring though not all reasons will necessarily ever appear.
140    UserPlatformWipe(UserPlatformWipeEvent),
141
142    /// New emoji
143    EmojiCreate(Emoji),
144
145    /// Delete emoji
146    EmojiDelete(EmojiDeleteEvent),
147
148    /// New webhook
149    WebhookCreate(Webhook),
150
151    /// Update existing webhook
152    WebhookUpdate(WebhookUpdateEvent),
153
154    /// Delete webhook
155    WebhookDelete(WebhookDeleteEvent),
156
157    /// New report
158    ReportCreate(Report),
159
160    /// Auth event
161    Auth(AuthifierEvent),
162
163    /// Unknown event
164    ///
165    /// If you received this event, please open an issue!
166    #[serde(other)]
167    Unknown,
168}
169
170/// Event sent by client
171#[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/// Authentication related events
181#[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/// Bulk event data
195#[derive(Deserialize, Debug, Clone)]
196pub struct BulkEvent {
197    /// List of events
198    pub v: Vec<ServerEvent>,
199}
200
201/// Error event data
202#[derive(Deserialize, Debug, Clone)]
203pub struct ErrorEvent {
204    /// Error ID
205    pub error: ErrorId,
206}
207
208/// Ready event data
209#[derive(Deserialize, Debug, Clone)]
210pub struct ReadyEvent {
211    /// List of users
212    pub users: Vec<User>,
213    /// List of servers
214    pub servers: Vec<Server>,
215    /// List of channels
216    pub channels: Vec<Channel>,
217    /// List of server members
218    pub members: Vec<Member>,
219    /// List of emojis
220    pub emojis: Option<Vec<Emoji>>,
221}
222
223/// Server pong event data
224#[derive(Deserialize, Debug, Clone)]
225pub struct PongEvent {
226    /// Client echo data
227    pub data: u32,
228}
229
230/// Message update event data
231#[derive(Deserialize, Debug, Clone)]
232pub struct MessageUpdateEvent {
233    /// Message ID
234    pub id: String,
235    /// Channel ID
236    pub channel: String,
237    /// Changed message data
238    pub data: PartialMessage,
239}
240
241/// Message append event data
242#[derive(Deserialize, Debug, Clone)]
243pub struct MessageAppendEvent {
244    /// Message ID
245    pub id: String,
246    /// Channel ID
247    pub channel: String,
248    /// Appended message information
249    pub append: AppendMessage,
250}
251
252/// Message delete event data
253#[derive(Deserialize, Debug, Clone)]
254pub struct MessageDeleteEvent {
255    /// Message ID
256    pub id: String,
257    /// Channel ID
258    pub channel: String,
259}
260
261/// Message react event data
262#[derive(Deserialize, Debug, Clone)]
263pub struct MessageReactEvent {
264    /// Message ID
265    pub id: String,
266    /// Channel ID
267    pub channel_id: String,
268    /// Reaction author ID
269    pub user_id: String,
270    /// Emoji ID
271    pub emoji_id: String,
272}
273
274/// Message reaction remove event
275#[derive(Deserialize, Debug, Clone)]
276pub struct MessageUnreactEvent {
277    /// Message ID
278    pub id: String,
279    /// Channel ID
280    pub channel_id: String,
281    /// Reaction author ID
282    pub user_id: String,
283    /// Emoji ID
284    pub emoji_id: String,
285}
286
287/// Message remove reaction event data
288#[derive(Deserialize, Debug, Clone)]
289pub struct MessageRemoveReactionEvent {
290    /// Message ID
291    pub id: String,
292    /// Channel ID
293    pub channel_id: String,
294    /// Emoji ID
295    pub emoji_id: String,
296}
297
298/// Bulk message delete event data
299#[derive(Deserialize, Debug, Clone)]
300pub struct BulkMessageDeleteEvent {
301    /// Channel ID
302    pub channel: String,
303    /// List of messages IDs
304    pub ids: Vec<String>,
305}
306
307/// Channel update event data
308#[derive(Deserialize, Debug, Clone)]
309pub struct ChannelUpdateEvent {
310    pub id: String,
311    pub data: PartialChannel,
312    pub clear: Vec<FieldsChannel>,
313}
314
315/// Channel delete event data
316#[derive(Deserialize, Debug, Clone)]
317pub struct ChannelDeleteEvent {
318    /// Deleted channel ID
319    pub id: String,
320}
321
322/// Group join event data
323#[derive(Deserialize, Debug, Clone)]
324pub struct ChannelGroupJoinEvent {
325    /// Group ID
326    pub id: String,
327    /// User ID
328    pub user: String,
329}
330
331/// Group leave event data
332#[derive(Deserialize, Debug, Clone)]
333pub struct ChannelGroupLeaveEvent {
334    /// Group ID
335    pub id: String,
336    /// User ID
337    pub user: String,
338}
339
340/// Channel start typing event data
341#[derive(Deserialize, Debug, Clone)]
342pub struct ChannelStartTypingEvent {
343    /// Channel ID
344    pub id: String,
345    /// Typing user ID
346    pub user: String,
347}
348
349/// Channel stop typing event data
350#[derive(Deserialize, Debug, Clone)]
351pub struct ChannelStopTypingEvent {
352    /// Channel ID
353    pub id: String,
354    /// Typing user ID
355    pub user: String,
356}
357
358/// Channel acknowledge event data
359#[derive(Deserialize, Debug, Clone)]
360pub struct ChannelAckEvent {
361    /// Channel ID
362    pub id: String,
363    /// User ID
364    pub user: String,
365    /// Message ID
366    pub message_id: String,
367}
368
369/// New server data
370#[derive(Deserialize, Debug, Clone)]
371pub struct ServerCreateEvent {
372    /// Server ID
373    pub id: String,
374    /// Server information
375    pub server: Server,
376    /// List of server channels
377    pub channels: Vec<Channel>,
378}
379
380/// Server update data
381#[derive(Deserialize, Debug, Clone)]
382pub struct ServerUpdateEvent {
383    /// Server ID
384    pub id: String,
385    /// Server changed data
386    pub data: PartialServer,
387    /// List of removed optional server fields
388    pub clear: Vec<FieldsServer>,
389}
390
391/// Server delete event data
392#[derive(Deserialize, Debug, Clone)]
393pub struct ServerDeleteEvent {
394    /// Deleted server ID
395    pub id: String,
396}
397
398/// Server member update event data
399#[derive(Deserialize, Debug, Clone)]
400pub struct ServerMemberUpdateEvent {
401    /// Member ID
402    pub id: MemberCompositeKey,
403    /// Member changed data
404    pub data: PartialMember,
405    /// List of removed optional member fields
406    pub clear: Vec<FieldsMember>,
407}
408
409/// Member join event data
410#[derive(Deserialize, Debug, Clone)]
411pub struct ServerMemberJoinEvent {
412    /// Server ID
413    pub id: String,
414    /// User ID
415    pub user: String,
416}
417
418/// Server member leave event data
419#[derive(Deserialize, Debug, Clone)]
420pub struct ServerMemberLeaveEvent {
421    /// Server ID
422    pub id: String,
423    /// Leaved user ID
424    pub user: String,
425}
426
427/// Server role update event data
428#[derive(Deserialize, Debug, Clone)]
429pub struct ServerRoleUpdateEvent {
430    /// Server ID
431    pub id: String,
432    /// Role  ID
433    pub role_id: String,
434    /// Changed role data
435    pub data: PartialRole,
436    /// Removed role optional fields
437    pub clear: Vec<FieldsRole>,
438}
439
440/// Server role delete event data
441#[derive(Deserialize, Debug, Clone)]
442pub struct ServerRoleDeleteEvent {
443    /// Server ID
444    pub id: String,
445    /// Role ID
446    pub role_id: String,
447}
448
449/// User update event data
450#[derive(Deserialize, Debug, Clone)]
451pub struct UserUpdateEvent {
452    /// User ID
453    pub id: String,
454    /// Changed user data
455    pub data: PartialUser,
456    /// Removed user fields
457    pub clear: Vec<FieldsUser>,
458}
459
460/// User relationship update event data
461#[derive(Deserialize, Debug, Clone)]
462pub struct UserRelationshipEvent {
463    pub id: String,
464    /// User with whom relationship changed
465    pub user: User,
466    /// New relationship status
467    pub status: RelationshipStatus,
468}
469
470/// Settings update event data
471#[derive(Deserialize, Debug, Clone)]
472pub struct UserSettingsUpdateEvent {
473    pub id: String,
474    /// Updated settings
475    pub update: UserSettings,
476}
477
478/// User wipe event data
479#[derive(Deserialize, Debug, Clone)]
480pub struct UserPlatformWipeEvent {
481    /// Deleted user ID
482    pub user_id: String,
483    /// User flags
484    pub flags: i32,
485}
486
487/// Emoji delete event data
488#[derive(Deserialize, Debug, Clone)]
489pub struct EmojiDeleteEvent {
490    /// Deleted emoji ID
491    pub id: String,
492}
493
494/// Webhook update event data
495#[derive(Deserialize, Debug, Clone)]
496pub struct WebhookUpdateEvent {
497    /// Webhook ID
498    pub id: String,
499    /// Updated webhook data
500    pub data: PartialWebhook,
501    /// Fields removed from webhook
502    pub remove: Vec<FieldsWebhook>,
503}
504
505/// Webhook delete event data
506#[derive(Deserialize, Debug, Clone)]
507pub struct WebhookDeleteEvent {
508    pub id: String,
509}