use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Clone)]
#[allow(non_camel_case_types)]
pub enum GatewayReceiveEventName {
HELLO,
READY,
RESUMED,
RECONNECT,
INVALID_SESSION,
APPLICATION_COMMAND_PERMISSIONS_UPDATE,
AUTO_MODERATION_RULE_CREATE,
AUTO_MODERATION_RULE_UPDATE,
AUTO_MODERATION_RULE_DELETE,
AUTO_MODERATION_ACTION_EXECUTION,
CHANNEL_CREATE,
CHANNEL_UPDATE,
CHANNEL_DELETE,
CHANNEL_PINS_UPDATE,
THREAD_CREATE,
THREAD_UPDATE,
THREAD_DELETE,
THREAD_LIST_SYNC,
THREAD_MEMBER_UPDATE,
THREAD_MEMBERS_UPDATE,
ENTITLEMENT_CREATE,
ENTITLEMENT_UPDATE,
ENTITLEMENT_DELETE,
GUILD_CREATE,
GUILD_UPDATE,
GUILD_DELETE,
GUILD_AUDIT_LOG_ENTRY_CREATE,
GUILD_BAN_ADD,
GUILD_BAN_REMOVE,
GUILD_EMOJIS_UPDATE,
GUILD_STICKERS_UPDATE,
GUILD_INTEGRATIONS_UPDATE,
GUILD_MEMBER_ADD,
GUILD_MEMBER_REMOVE,
GUILD_MEMBER_UPDATE,
GUILD_MEMBERS_CHUNK,
GUILD_ROLE_CREATE,
GUILD_ROLE_UPDATE,
GUILD_ROLE_DELETE,
GUILD_SCHEDULED_EVENT_CREATE,
GUILD_SCHEDULED_EVENT_UPDATE,
GUILD_SCHEDULED_EVENT_DELETE,
GUILD_SCHEDULED_EVENT_USER_ADD,
GUILD_SCHEDULED_EVENT_USER_REMOVE,
INTEGRATION_CREATE,
INTEGRATION_UPDATE,
INTEGRATION_DELETE,
INTERACTION_CREATE,
INVITE_CREATE,
INVITE_DELETE,
MESSAGE_CREATE,
MESSAGE_UPDATE,
MESSAGE_DELETE,
MESSAGE_DELETE_BULK,
MESSAGE_REACTION_ADD,
MESSAGE_REACTION_REMOVE,
MESSAGE_REACTION_REMOVE_ALL,
MESSAGE_REACTION_REMOVE_EMOJI,
PRESENCE_UPDATE,
STAGE_INSTANCE_CREATE,
STAGE_INSTANCE_UPDATE,
STAGE_INSTANCE_DELETE,
TYPING_START,
USER_UPDATE,
VOICE_STATE_UPDATE,
VOICE_SERVER_UPDATE,
WEBHOOKS_UPDATE,
MESSAGE_POLL_VOTE_ADD,
MESSAGE_POLL_VOTE_REMOVE,
#[serde(untagged)]
Unknown,
}
impl PartialEq for GatewayReceiveEventName {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(Self::HELLO, Self::HELLO) => true,
(Self::READY, Self::READY) => true,
(Self::RESUMED, Self::RESUMED) => true,
(Self::RECONNECT, Self::RECONNECT) => true,
(Self::INVALID_SESSION, Self::INVALID_SESSION) => true,
(
Self::APPLICATION_COMMAND_PERMISSIONS_UPDATE,
Self::APPLICATION_COMMAND_PERMISSIONS_UPDATE,
) => true,
(Self::AUTO_MODERATION_RULE_CREATE, Self::AUTO_MODERATION_RULE_CREATE) => true,
(Self::AUTO_MODERATION_RULE_UPDATE, Self::AUTO_MODERATION_RULE_UPDATE) => true,
(Self::AUTO_MODERATION_RULE_DELETE, Self::AUTO_MODERATION_RULE_DELETE) => true,
(Self::AUTO_MODERATION_ACTION_EXECUTION, Self::AUTO_MODERATION_ACTION_EXECUTION) => {
true
}
(Self::CHANNEL_CREATE, Self::CHANNEL_CREATE) => true,
(Self::CHANNEL_UPDATE, Self::CHANNEL_UPDATE) => true,
(Self::CHANNEL_DELETE, Self::CHANNEL_DELETE) => true,
(Self::CHANNEL_PINS_UPDATE, Self::CHANNEL_PINS_UPDATE) => true,
(Self::THREAD_CREATE, Self::THREAD_CREATE) => true,
(Self::THREAD_UPDATE, Self::THREAD_UPDATE) => true,
(Self::THREAD_DELETE, Self::THREAD_DELETE) => true,
(Self::THREAD_LIST_SYNC, Self::THREAD_LIST_SYNC) => true,
(Self::THREAD_MEMBER_UPDATE, Self::THREAD_MEMBER_UPDATE) => true,
(Self::THREAD_MEMBERS_UPDATE, Self::THREAD_MEMBERS_UPDATE) => true,
(Self::ENTITLEMENT_CREATE, Self::ENTITLEMENT_CREATE) => true,
(Self::ENTITLEMENT_UPDATE, Self::ENTITLEMENT_UPDATE) => true,
(Self::ENTITLEMENT_DELETE, Self::ENTITLEMENT_DELETE) => true,
(Self::GUILD_CREATE, Self::GUILD_CREATE) => true,
(Self::GUILD_UPDATE, Self::GUILD_UPDATE) => true,
(Self::GUILD_DELETE, Self::GUILD_DELETE) => true,
(Self::GUILD_AUDIT_LOG_ENTRY_CREATE, Self::GUILD_AUDIT_LOG_ENTRY_CREATE) => true,
(Self::GUILD_BAN_ADD, Self::GUILD_BAN_ADD) => true,
(Self::GUILD_BAN_REMOVE, Self::GUILD_BAN_REMOVE) => true,
(Self::GUILD_EMOJIS_UPDATE, Self::GUILD_EMOJIS_UPDATE) => true,
(Self::GUILD_STICKERS_UPDATE, Self::GUILD_STICKERS_UPDATE) => true,
(Self::GUILD_INTEGRATIONS_UPDATE, Self::GUILD_INTEGRATIONS_UPDATE) => true,
(Self::GUILD_MEMBER_ADD, Self::GUILD_MEMBER_ADD) => true,
(Self::GUILD_MEMBER_REMOVE, Self::GUILD_MEMBER_REMOVE) => true,
(Self::GUILD_MEMBER_UPDATE, Self::GUILD_MEMBER_UPDATE) => true,
(Self::GUILD_MEMBERS_CHUNK, Self::GUILD_MEMBERS_CHUNK) => true,
(Self::GUILD_ROLE_CREATE, Self::GUILD_ROLE_CREATE) => true,
(Self::GUILD_ROLE_UPDATE, Self::GUILD_ROLE_UPDATE) => true,
(Self::GUILD_ROLE_DELETE, Self::GUILD_ROLE_DELETE) => true,
(Self::GUILD_SCHEDULED_EVENT_CREATE, Self::GUILD_SCHEDULED_EVENT_CREATE) => true,
(Self::GUILD_SCHEDULED_EVENT_UPDATE, Self::GUILD_SCHEDULED_EVENT_UPDATE) => true,
(Self::GUILD_SCHEDULED_EVENT_DELETE, Self::GUILD_SCHEDULED_EVENT_DELETE) => true,
(Self::GUILD_SCHEDULED_EVENT_USER_ADD, Self::GUILD_SCHEDULED_EVENT_USER_ADD) => true,
(Self::GUILD_SCHEDULED_EVENT_USER_REMOVE, Self::GUILD_SCHEDULED_EVENT_USER_REMOVE) => {
true
}
(Self::INTEGRATION_CREATE, Self::INTEGRATION_CREATE) => true,
(Self::INTEGRATION_UPDATE, Self::INTEGRATION_UPDATE) => true,
(Self::INTEGRATION_DELETE, Self::INTEGRATION_DELETE) => true,
(Self::INTERACTION_CREATE, Self::INTERACTION_CREATE) => true,
(Self::INVITE_CREATE, Self::INVITE_CREATE) => true,
(Self::INVITE_DELETE, Self::INVITE_DELETE) => true,
(Self::MESSAGE_CREATE, Self::MESSAGE_CREATE) => true,
(Self::MESSAGE_UPDATE, Self::MESSAGE_UPDATE) => true,
(Self::MESSAGE_DELETE, Self::MESSAGE_DELETE) => true,
(Self::MESSAGE_DELETE_BULK, Self::MESSAGE_DELETE_BULK) => true,
(Self::MESSAGE_REACTION_ADD, Self::MESSAGE_REACTION_ADD) => true,
(Self::MESSAGE_REACTION_REMOVE, Self::MESSAGE_REACTION_REMOVE) => true,
(Self::MESSAGE_REACTION_REMOVE_ALL, Self::MESSAGE_REACTION_REMOVE_ALL) => true,
(Self::MESSAGE_REACTION_REMOVE_EMOJI, Self::MESSAGE_REACTION_REMOVE_EMOJI) => true,
(Self::PRESENCE_UPDATE, Self::PRESENCE_UPDATE) => true,
(Self::STAGE_INSTANCE_CREATE, Self::STAGE_INSTANCE_CREATE) => true,
(Self::STAGE_INSTANCE_UPDATE, Self::STAGE_INSTANCE_UPDATE) => true,
(Self::STAGE_INSTANCE_DELETE, Self::STAGE_INSTANCE_DELETE) => true,
(Self::TYPING_START, Self::TYPING_START) => true,
(Self::USER_UPDATE, Self::USER_UPDATE) => true,
(Self::VOICE_STATE_UPDATE, Self::VOICE_STATE_UPDATE) => true,
(Self::VOICE_SERVER_UPDATE, Self::VOICE_SERVER_UPDATE) => true,
(Self::WEBHOOKS_UPDATE, Self::WEBHOOKS_UPDATE) => true,
(Self::MESSAGE_POLL_VOTE_ADD, Self::MESSAGE_POLL_VOTE_ADD) => true,
(Self::MESSAGE_POLL_VOTE_REMOVE, Self::MESSAGE_POLL_VOTE_REMOVE) => true,
_ => false,
}
}
}
#[derive(Debug, Serialize, Deserialize, Copy)]
pub enum DiscordOpCode {
Dispatch = 0,
Heartbeat = 1,
Identify = 2,
PresenceUpdate = 3,
VoiceStateUpdate = 4,
Resume = 6,
Reconnect = 7,
RequestGuildMembers = 8,
InvalidSession = 9,
Hello = 10,
HeartbeatAck = 11,
}
impl PartialEq for DiscordOpCode {
fn eq(&self, other: &Self) -> bool {
match (self, other) {
(Self::Dispatch, Self::Dispatch) => true,
(Self::Heartbeat, Self::Heartbeat) => true,
(Self::Identify, Self::Identify) => true,
(Self::PresenceUpdate, Self::PresenceUpdate) => true,
(Self::VoiceStateUpdate, Self::VoiceStateUpdate) => true,
(Self::Resume, Self::Resume) => true,
(Self::Reconnect, Self::Reconnect) => true,
(Self::RequestGuildMembers, Self::RequestGuildMembers) => true,
(Self::InvalidSession, Self::InvalidSession) => true,
(Self::Hello, Self::Hello) => true,
(Self::HeartbeatAck, Self::HeartbeatAck) => true,
_ => false,
}
}
}
impl Clone for DiscordOpCode {
fn clone(&self) -> Self {
*self
}
}
impl From<i8> for DiscordOpCode {
fn from(value: i8) -> Self {
match value {
0 => DiscordOpCode::Dispatch,
1 => DiscordOpCode::Heartbeat,
2 => DiscordOpCode::Identify,
3 => DiscordOpCode::PresenceUpdate,
4 => DiscordOpCode::VoiceStateUpdate,
6 => DiscordOpCode::Resume,
7 => DiscordOpCode::Reconnect,
8 => DiscordOpCode::RequestGuildMembers,
9 => DiscordOpCode::InvalidSession,
10 => DiscordOpCode::Hello,
11 => DiscordOpCode::HeartbeatAck,
_ => panic!("Invalid OpCode"),
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct DiscordReceiveEvent {
pub t: GatewayReceiveEventName,
pub s: Option<i32>,
pub op: i8,
pub d: Option<serde_json::Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct ReceiveEvent {
pub t: GatewayReceiveEventName,
pub s: Option<i32>,
pub op: DiscordOpCode,
pub d: Option<serde_json::Value>,
}