Skip to main content

twilight_model/gateway/event/
kind.rs

1use serde::{Deserialize, Serialize};
2
3/// The type of an event.
4#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
6pub enum EventType {
7    AutoModerationActionExecution,
8    AutoModerationRuleCreate,
9    AutoModerationRuleDelete,
10    AutoModerationRuleUpdate,
11    #[serde(rename = "GUILD_BAN_ADD")]
12    BanAdd,
13    #[serde(rename = "GUILD_BAN_REMOVE")]
14    BanRemove,
15    ChannelCreate,
16    ChannelDelete,
17    ChannelPinsUpdate,
18    ChannelUpdate,
19    #[serde(rename = "APPLICATION_COMMAND_PERMISSIONS_UPDATE")]
20    CommandPermissionsUpdate,
21    EntitlementCreate,
22    EntitlementDelete,
23    EntitlementUpdate,
24    GatewayClose,
25    GatewayHeartbeat,
26    GatewayHeartbeatAck,
27    GatewayHello,
28    GatewayInvalidateSession,
29    GatewayReconnect,
30    GuildAuditLogEntryCreate,
31    GuildCreate,
32    GuildDelete,
33    GuildEmojisUpdate,
34    GuildIntegrationsUpdate,
35    GuildScheduledEventCreate,
36    GuildScheduledEventDelete,
37    GuildScheduledEventUpdate,
38    GuildScheduledEventUserAdd,
39    GuildScheduledEventUserRemove,
40    GuildStickersUpdate,
41    GuildUpdate,
42    IntegrationCreate,
43    IntegrationDelete,
44    IntegrationUpdate,
45    InteractionCreate,
46    InviteCreate,
47    InviteDelete,
48    #[serde(rename = "GUILD_MEMBER_ADD")]
49    MemberAdd,
50    #[serde(rename = "GUILD_MEMBERS_CHUNK")]
51    MemberChunk,
52    #[serde(rename = "GUILD_MEMBER_REMOVE")]
53    MemberRemove,
54    #[serde(rename = "GUILD_MEMBER_UPDATE")]
55    MemberUpdate,
56    MessageCreate,
57    MessageDelete,
58    MessageDeleteBulk,
59    MessagePollVoteAdd,
60    MessagePollVoteRemove,
61    MessageUpdate,
62    PresenceUpdate,
63    RateLimited,
64    #[serde(rename = "MESSAGE_REACTION_ADD")]
65    ReactionAdd,
66    #[serde(rename = "MESSAGE_REACTION_REMOVE")]
67    ReactionRemove,
68    #[serde(rename = "MESSAGE_REACTION_REMOVE_ALL")]
69    ReactionRemoveAll,
70    #[serde(rename = "MESSAGE_REACTION_REMOVE_EMOJI")]
71    ReactionRemoveEmoji,
72    Ready,
73    Resumed,
74    #[serde(rename = "GUILD_ROLE_CREATE")]
75    RoleCreate,
76    #[serde(rename = "GUILD_ROLE_DELETE")]
77    RoleDelete,
78    #[serde(rename = "GUILD_ROLE_UPDATE")]
79    RoleUpdate,
80    StageInstanceCreate,
81    StageInstanceDelete,
82    StageInstanceUpdate,
83    SubscriptionCreate,
84    SubscriptionDelete,
85    SubscriptionUpdate,
86    ThreadCreate,
87    ThreadDelete,
88    ThreadListSync,
89    ThreadMemberUpdate,
90    ThreadMembersUpdate,
91    ThreadUpdate,
92    TypingStart,
93    UnavailableGuild,
94    UserUpdate,
95    VoiceServerUpdate,
96    VoiceStateUpdate,
97    WebhooksUpdate,
98}
99
100impl EventType {
101    pub const fn name(self) -> Option<&'static str> {
102        match self {
103            Self::AutoModerationActionExecution => Some("AUTO_MODERATION_ACTION_EXECUTION"),
104            Self::AutoModerationRuleCreate => Some("AUTO_MODERATION_RULE_CREATE"),
105            Self::AutoModerationRuleDelete => Some("AUTO_MODERATION_RULE_DELETE"),
106            Self::AutoModerationRuleUpdate => Some("AUTO_MODERATION_RULE_UPDATE"),
107            Self::BanAdd => Some("GUILD_BAN_ADD"),
108            Self::BanRemove => Some("GUILD_BAN_REMOVE"),
109            Self::ChannelCreate => Some("CHANNEL_CREATE"),
110            Self::ChannelDelete => Some("CHANNEL_DELETE"),
111            Self::ChannelPinsUpdate => Some("CHANNEL_PINS_UPDATE"),
112            Self::ChannelUpdate => Some("CHANNEL_UPDATE"),
113            Self::CommandPermissionsUpdate => Some("APPLICATION_COMMAND_PERMISSIONS_UPDATE"),
114            Self::EntitlementCreate => Some("ENTITLEMENT_CREATE"),
115            Self::EntitlementDelete => Some("ENTITLEMENT_DELETE"),
116            Self::EntitlementUpdate => Some("ENTITLEMENT_UPDATE"),
117            Self::GuildAuditLogEntryCreate => Some("GUILD_AUDIT_LOG_ENTRY_CREATE"),
118            Self::GuildCreate => Some("GUILD_CREATE"),
119            Self::GuildDelete => Some("GUILD_DELETE"),
120            Self::GuildEmojisUpdate => Some("GUILD_EMOJIS_UPDATE"),
121            Self::GuildIntegrationsUpdate => Some("GUILD_INTEGRATIONS_UPDATE"),
122            Self::GuildScheduledEventCreate => Some("GUILD_SCHEDULED_EVENT_CREATE"),
123            Self::GuildScheduledEventDelete => Some("GUILD_SCHEDULED_EVENT_DELETE"),
124            Self::GuildScheduledEventUpdate => Some("GUILD_SCHEDULED_EVENT_UPDATE"),
125            Self::GuildScheduledEventUserAdd => Some("GUILD_SCHEDULED_EVENT_USER_ADD"),
126            Self::GuildScheduledEventUserRemove => Some("GUILD_SCHEDULED_EVENT_USER_REMOVE"),
127            Self::GuildStickersUpdate => Some("GUILD_STICKERS_UPDATE"),
128            Self::GuildUpdate => Some("GUILD_UPDATE"),
129            Self::IntegrationCreate => Some("INTEGRATION_CREATE"),
130            Self::IntegrationDelete => Some("INTEGRATION_DELETE"),
131            Self::IntegrationUpdate => Some("INTEGRATION_UPDATE"),
132            Self::InteractionCreate => Some("INTERACTION_CREATE"),
133            Self::InviteCreate => Some("INVITE_CREATE"),
134            Self::InviteDelete => Some("INVITE_DELETE"),
135            Self::MemberAdd => Some("GUILD_MEMBER_ADD"),
136            Self::MemberChunk => Some("GUILD_MEMBERS_CHUNK"),
137            Self::MemberRemove => Some("GUILD_MEMBER_REMOVE"),
138            Self::MemberUpdate => Some("GUILD_MEMBER_UPDATE"),
139            Self::MessageCreate => Some("MESSAGE_CREATE"),
140            Self::MessageDelete => Some("MESSAGE_DELETE"),
141            Self::MessageDeleteBulk => Some("MESSAGE_DELETE_BULK"),
142            Self::MessageUpdate => Some("MESSAGE_UPDATE"),
143            Self::MessagePollVoteAdd => Some("MESSAGE_POLL_VOTE_ADD"),
144            Self::MessagePollVoteRemove => Some("MESSAGE_POLL_VOTE_REMOVE"),
145            Self::PresenceUpdate => Some("PRESENCE_UPDATE"),
146            Self::RateLimited => Some("RATE_LIMITED"),
147            Self::ReactionAdd => Some("MESSAGE_REACTION_ADD"),
148            Self::ReactionRemove => Some("MESSAGE_REACTION_REMOVE"),
149            Self::ReactionRemoveAll => Some("MESSAGE_REACTION_REMOVE_ALL"),
150            Self::ReactionRemoveEmoji => Some("MESSAGE_REACTION_REMOVE_EMOJI"),
151            Self::Ready => Some("READY"),
152            Self::Resumed => Some("RESUMED"),
153            Self::RoleCreate => Some("GUILD_ROLE_CREATE"),
154            Self::RoleDelete => Some("GUILD_ROLE_DELETE"),
155            Self::RoleUpdate => Some("GUILD_ROLE_UPDATE"),
156            Self::StageInstanceCreate => Some("STAGE_INSTANCE_CREATE"),
157            Self::StageInstanceDelete => Some("STAGE_INSTANCE_DELETE"),
158            Self::StageInstanceUpdate => Some("STAGE_INSTANCE_UPDATE"),
159            Self::SubscriptionCreate => Some("SUBSCRIPTION_CREATE"),
160            Self::SubscriptionDelete => Some("SUBSCRIPTION_DELETE"),
161            Self::SubscriptionUpdate => Some("SUBSCRIPTION_UPDATE"),
162            Self::ThreadCreate => Some("THREAD_CREATE"),
163            Self::ThreadDelete => Some("THREAD_DELETE"),
164            Self::ThreadListSync => Some("THREAD_LIST_SYNC"),
165            Self::ThreadMembersUpdate => Some("THREAD_MEMBERS_UPDATE"),
166            Self::ThreadMemberUpdate => Some("THREAD_MEMBER_UPDATE"),
167            Self::ThreadUpdate => Some("THREAD_UPDATE"),
168            Self::TypingStart => Some("TYPING_START"),
169            Self::UnavailableGuild => Some("UNAVAILABLE_GUILD"),
170            Self::UserUpdate => Some("USER_UPDATE"),
171            Self::VoiceServerUpdate => Some("VOICE_SERVER_UPDATE"),
172            Self::VoiceStateUpdate => Some("VOICE_STATE_UPDATE"),
173            Self::WebhooksUpdate => Some("WEBHOOKS_UPDATE"),
174            Self::GatewayClose
175            | Self::GatewayHeartbeat
176            | Self::GatewayHeartbeatAck
177            | Self::GatewayHello
178            | Self::GatewayInvalidateSession
179            | Self::GatewayReconnect => None,
180        }
181    }
182}
183
184impl<'a> TryFrom<&'a str> for EventType {
185    type Error = &'a str;
186
187    fn try_from(event_type: &'a str) -> Result<Self, Self::Error> {
188        match event_type {
189            "AUTO_MODERATION_ACTION_EXECUTION" => Ok(Self::AutoModerationActionExecution),
190            "AUTO_MODERATION_RULE_CREATE" => Ok(Self::AutoModerationRuleCreate),
191            "AUTO_MODERATION_RULE_DELETE" => Ok(Self::AutoModerationRuleDelete),
192            "AUTO_MODERATION_RULE_UPDATE" => Ok(Self::AutoModerationRuleUpdate),
193            "GUILD_AUDIT_LOG_ENTRY_CREATE" => Ok(Self::GuildAuditLogEntryCreate),
194            "GUILD_BAN_ADD" => Ok(Self::BanAdd),
195            "GUILD_BAN_REMOVE" => Ok(Self::BanRemove),
196            "CHANNEL_CREATE" => Ok(Self::ChannelCreate),
197            "CHANNEL_DELETE" => Ok(Self::ChannelDelete),
198            "CHANNEL_PINS_UPDATE" => Ok(Self::ChannelPinsUpdate),
199            "CHANNEL_UPDATE" => Ok(Self::ChannelUpdate),
200            "APPLICATION_COMMAND_PERMISSIONS_UPDATE" => Ok(Self::CommandPermissionsUpdate),
201            "ENTITLEMENT_CREATE" => Ok(Self::EntitlementCreate),
202            "GUILD_CREATE" => Ok(Self::GuildCreate),
203            "GUILD_DELETE" => Ok(Self::GuildDelete),
204            "GUILD_EMOJIS_UPDATE" => Ok(Self::GuildEmojisUpdate),
205            "GUILD_INTEGRATIONS_UPDATE" => Ok(Self::GuildIntegrationsUpdate),
206            "GUILD_SCHEDULED_EVENT_CREATE" => Ok(Self::GuildScheduledEventCreate),
207            "GUILD_SCHEDULED_EVENT_DELETE" => Ok(Self::GuildScheduledEventDelete),
208            "GUILD_SCHEDULED_EVENT_UPDATE" => Ok(Self::GuildScheduledEventUpdate),
209            "GUILD_SCHEDULED_EVENT_USER_ADD" => Ok(Self::GuildScheduledEventUserAdd),
210            "GUILD_SCHEDULED_EVENT_USER_REMOVE" => Ok(Self::GuildScheduledEventUserRemove),
211            "GUILD_UPDATE" => Ok(Self::GuildUpdate),
212            "INTEGRATION_CREATE" => Ok(Self::IntegrationCreate),
213            "INTEGRATION_DELETE" => Ok(Self::IntegrationDelete),
214            "INTEGRATION_UPDATE" => Ok(Self::IntegrationUpdate),
215            "INTERACTION_CREATE" => Ok(Self::InteractionCreate),
216            "INVITE_CREATE" => Ok(Self::InviteCreate),
217            "INVITE_DELETE" => Ok(Self::InviteDelete),
218            "GUILD_MEMBER_ADD" => Ok(Self::MemberAdd),
219            "GUILD_MEMBER_REMOVE" => Ok(Self::MemberRemove),
220            "GUILD_MEMBER_UPDATE" => Ok(Self::MemberUpdate),
221            "GUILD_MEMBERS_CHUNK" => Ok(Self::MemberChunk),
222            "MESSAGE_CREATE" => Ok(Self::MessageCreate),
223            "MESSAGE_DELETE" => Ok(Self::MessageDelete),
224            "MESSAGE_DELETE_BULK" => Ok(Self::MessageDeleteBulk),
225            "MESSAGE_UPDATE" => Ok(Self::MessageUpdate),
226            "MESSAGE_POLL_VOTE_ADD" => Ok(Self::MessagePollVoteAdd),
227            "MESSAGE_POLL_VOTE_REMOVE" => Ok(Self::MessagePollVoteRemove),
228            "PRESENCE_UPDATE" => Ok(Self::PresenceUpdate),
229            "MESSAGE_REACTION_ADD" => Ok(Self::ReactionAdd),
230            "MESSAGE_REACTION_REMOVE" => Ok(Self::ReactionRemove),
231            "MESSAGE_REACTION_REMOVE_ALL" => Ok(Self::ReactionRemoveAll),
232            "MESSAGE_REACTION_REMOVE_EMOJI" => Ok(Self::ReactionRemoveEmoji),
233            "RATE_LIMITED" => Ok(Self::RateLimited),
234            "READY" => Ok(Self::Ready),
235            "RESUMED" => Ok(Self::Resumed),
236            "GUILD_ROLE_CREATE" => Ok(Self::RoleCreate),
237            "GUILD_ROLE_DELETE" => Ok(Self::RoleDelete),
238            "GUILD_ROLE_UPDATE" => Ok(Self::RoleUpdate),
239            "STAGE_INSTANCE_CREATE" => Ok(Self::StageInstanceCreate),
240            "STAGE_INSTANCE_DELETE" => Ok(Self::StageInstanceDelete),
241            "STAGE_INSTANCE_UPDATE" => Ok(Self::StageInstanceUpdate),
242            "SUBSCRIPTION_CREATE" => Ok(Self::SubscriptionCreate),
243            "SUBSCRIPTION_DELETE" => Ok(Self::SubscriptionDelete),
244            "SUBSCRIPTION_UPDATE" => Ok(Self::SubscriptionUpdate),
245            "THREAD_CREATE" => Ok(Self::ThreadCreate),
246            "THREAD_DELETE" => Ok(Self::ThreadDelete),
247            "THREAD_LIST_SYNC" => Ok(Self::ThreadListSync),
248            "THREAD_MEMBER_UPDATE" => Ok(Self::ThreadMemberUpdate),
249            "THREAD_MEMBERS_UPDATE" => Ok(Self::ThreadMembersUpdate),
250            "THREAD_UPDATE" => Ok(Self::ThreadUpdate),
251            "TYPING_START" => Ok(Self::TypingStart),
252            "UNAVAILABLE_GUILD" => Ok(Self::UnavailableGuild),
253            "USER_UPDATE" => Ok(Self::UserUpdate),
254            "VOICE_SERVER_UPDATE" => Ok(Self::VoiceServerUpdate),
255            "VOICE_STATE_UPDATE" => Ok(Self::VoiceStateUpdate),
256            "WEBHOOKS_UPDATE" => Ok(Self::WebhooksUpdate),
257            _ => Err(event_type),
258        }
259    }
260}
261
262#[cfg(test)]
263mod tests {
264    use super::EventType;
265    use serde_test::Token;
266
267    fn assert_variant(kind: EventType, name: &'static str) {
268        serde_test::assert_tokens(
269            &kind,
270            &[Token::UnitVariant {
271                name: "EventType",
272                variant: name,
273            }],
274        );
275    }
276
277    #[allow(clippy::too_many_lines)]
278    #[test]
279    fn variants() {
280        assert_variant(
281            EventType::AutoModerationActionExecution,
282            "AUTO_MODERATION_ACTION_EXECUTION",
283        );
284        assert_variant(
285            EventType::AutoModerationRuleCreate,
286            "AUTO_MODERATION_RULE_CREATE",
287        );
288        assert_variant(
289            EventType::AutoModerationRuleDelete,
290            "AUTO_MODERATION_RULE_DELETE",
291        );
292        assert_variant(
293            EventType::AutoModerationRuleUpdate,
294            "AUTO_MODERATION_RULE_UPDATE",
295        );
296        assert_variant(EventType::BanAdd, "GUILD_BAN_ADD");
297        assert_variant(EventType::BanRemove, "GUILD_BAN_REMOVE");
298        assert_variant(EventType::ChannelCreate, "CHANNEL_CREATE");
299        assert_variant(EventType::ChannelDelete, "CHANNEL_DELETE");
300        assert_variant(EventType::ChannelPinsUpdate, "CHANNEL_PINS_UPDATE");
301        assert_variant(EventType::ChannelUpdate, "CHANNEL_UPDATE");
302        assert_variant(
303            EventType::CommandPermissionsUpdate,
304            "APPLICATION_COMMAND_PERMISSIONS_UPDATE",
305        );
306        assert_variant(EventType::GatewayClose, "GATEWAY_CLOSE");
307        assert_variant(EventType::GatewayHeartbeat, "GATEWAY_HEARTBEAT");
308        assert_variant(EventType::GatewayHeartbeatAck, "GATEWAY_HEARTBEAT_ACK");
309        assert_variant(EventType::GatewayHello, "GATEWAY_HELLO");
310        assert_variant(
311            EventType::GatewayInvalidateSession,
312            "GATEWAY_INVALIDATE_SESSION",
313        );
314        assert_variant(EventType::GatewayReconnect, "GATEWAY_RECONNECT");
315        assert_variant(
316            EventType::GuildAuditLogEntryCreate,
317            "GUILD_AUDIT_LOG_ENTRY_CREATE",
318        );
319        assert_variant(EventType::GuildCreate, "GUILD_CREATE");
320        assert_variant(EventType::GuildDelete, "GUILD_DELETE");
321        assert_variant(EventType::GuildEmojisUpdate, "GUILD_EMOJIS_UPDATE");
322        assert_variant(
323            EventType::GuildIntegrationsUpdate,
324            "GUILD_INTEGRATIONS_UPDATE",
325        );
326        assert_variant(
327            EventType::GuildScheduledEventCreate,
328            "GUILD_SCHEDULED_EVENT_CREATE",
329        );
330        assert_variant(
331            EventType::GuildScheduledEventDelete,
332            "GUILD_SCHEDULED_EVENT_DELETE",
333        );
334        assert_variant(
335            EventType::GuildScheduledEventUpdate,
336            "GUILD_SCHEDULED_EVENT_UPDATE",
337        );
338        assert_variant(
339            EventType::GuildScheduledEventUserAdd,
340            "GUILD_SCHEDULED_EVENT_USER_ADD",
341        );
342        assert_variant(
343            EventType::GuildScheduledEventUserRemove,
344            "GUILD_SCHEDULED_EVENT_USER_REMOVE",
345        );
346        assert_variant(EventType::GuildUpdate, "GUILD_UPDATE");
347        assert_variant(EventType::IntegrationCreate, "INTEGRATION_CREATE");
348        assert_variant(EventType::IntegrationDelete, "INTEGRATION_DELETE");
349        assert_variant(EventType::IntegrationUpdate, "INTEGRATION_UPDATE");
350        assert_variant(EventType::InteractionCreate, "INTERACTION_CREATE");
351        assert_variant(EventType::InviteCreate, "INVITE_CREATE");
352        assert_variant(EventType::InviteDelete, "INVITE_DELETE");
353        assert_variant(EventType::MemberAdd, "GUILD_MEMBER_ADD");
354        assert_variant(EventType::MemberChunk, "GUILD_MEMBERS_CHUNK");
355        assert_variant(EventType::MemberRemove, "GUILD_MEMBER_REMOVE");
356        assert_variant(EventType::MemberUpdate, "GUILD_MEMBER_UPDATE");
357        assert_variant(EventType::MessageCreate, "MESSAGE_CREATE");
358        assert_variant(EventType::MessageDelete, "MESSAGE_DELETE");
359        assert_variant(EventType::MessageDeleteBulk, "MESSAGE_DELETE_BULK");
360        assert_variant(EventType::MessageUpdate, "MESSAGE_UPDATE");
361        assert_variant(EventType::MessagePollVoteAdd, "MESSAGE_POLL_VOTE_ADD");
362        assert_variant(EventType::MessagePollVoteRemove, "MESSAGE_POLL_VOTE_REMOVE");
363        assert_variant(EventType::PresenceUpdate, "PRESENCE_UPDATE");
364        assert_variant(EventType::RateLimited, "RATE_LIMITED");
365        assert_variant(EventType::ReactionAdd, "MESSAGE_REACTION_ADD");
366        assert_variant(EventType::ReactionRemove, "MESSAGE_REACTION_REMOVE");
367        assert_variant(EventType::ReactionRemoveAll, "MESSAGE_REACTION_REMOVE_ALL");
368        assert_variant(
369            EventType::ReactionRemoveEmoji,
370            "MESSAGE_REACTION_REMOVE_EMOJI",
371        );
372        assert_variant(EventType::Ready, "READY");
373        assert_variant(EventType::Resumed, "RESUMED");
374        assert_variant(EventType::RoleCreate, "GUILD_ROLE_CREATE");
375        assert_variant(EventType::RoleDelete, "GUILD_ROLE_DELETE");
376        assert_variant(EventType::RoleUpdate, "GUILD_ROLE_UPDATE");
377        assert_variant(EventType::StageInstanceCreate, "STAGE_INSTANCE_CREATE");
378        assert_variant(EventType::StageInstanceDelete, "STAGE_INSTANCE_DELETE");
379        assert_variant(EventType::StageInstanceUpdate, "STAGE_INSTANCE_UPDATE");
380        assert_variant(EventType::SubscriptionCreate, "SUBSCRIPTION_CREATE");
381        assert_variant(EventType::SubscriptionDelete, "SUBSCRIPTION_DELETE");
382        assert_variant(EventType::SubscriptionUpdate, "SUBSCRIPTION_UPDATE");
383        assert_variant(EventType::ThreadCreate, "THREAD_CREATE");
384        assert_variant(EventType::ThreadDelete, "THREAD_DELETE");
385        assert_variant(EventType::ThreadListSync, "THREAD_LIST_SYNC");
386        assert_variant(EventType::ThreadMemberUpdate, "THREAD_MEMBER_UPDATE");
387        assert_variant(EventType::ThreadMembersUpdate, "THREAD_MEMBERS_UPDATE");
388        assert_variant(EventType::ThreadUpdate, "THREAD_UPDATE");
389        assert_variant(EventType::TypingStart, "TYPING_START");
390        assert_variant(EventType::UnavailableGuild, "UNAVAILABLE_GUILD");
391        assert_variant(EventType::UserUpdate, "USER_UPDATE");
392        assert_variant(EventType::VoiceServerUpdate, "VOICE_SERVER_UPDATE");
393        assert_variant(EventType::VoiceStateUpdate, "VOICE_STATE_UPDATE");
394        assert_variant(EventType::WebhooksUpdate, "WEBHOOKS_UPDATE");
395        assert_variant(EventType::EntitlementCreate, "ENTITLEMENT_CREATE");
396    }
397}