#![allow(clippy::wildcard_imports)]
pub mod gateway;
pub mod shard;
mod dispatch;
mod kind;
pub use self::{
dispatch::{DispatchEvent, DispatchEventWithTypeDeserializer},
gateway::{GatewayEvent, GatewayEventDeserializer, GatewayEventDeserializerOwned},
kind::EventType,
};
use self::shard::*;
use super::payload::*;
use std::error::Error;
use std::fmt::{Debug, Display, Formatter, Result as FmtResult};
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Event {
BanAdd(BanAdd),
BanRemove(BanRemove),
ChannelCreate(ChannelCreate),
ChannelDelete(ChannelDelete),
ChannelPinsUpdate(ChannelPinsUpdate),
ChannelUpdate(ChannelUpdate),
GatewayHeartbeat(u64),
GatewayHeartbeatAck,
GatewayHello(u64),
GatewayInvalidateSession(bool),
GatewayReconnect,
GiftCodeUpdate,
GuildCreate(Box<GuildCreate>),
GuildDelete(Box<GuildDelete>),
GuildEmojisUpdate(GuildEmojisUpdate),
GuildIntegrationsUpdate(GuildIntegrationsUpdate),
GuildUpdate(Box<GuildUpdate>),
InviteCreate(Box<InviteCreate>),
InviteDelete(InviteDelete),
MemberAdd(Box<MemberAdd>),
MemberRemove(MemberRemove),
MemberUpdate(Box<MemberUpdate>),
MemberChunk(MemberChunk),
MessageCreate(Box<MessageCreate>),
MessageDelete(MessageDelete),
MessageDeleteBulk(MessageDeleteBulk),
MessageUpdate(Box<MessageUpdate>),
PresenceUpdate(Box<PresenceUpdate>),
PresencesReplace,
ReactionAdd(Box<ReactionAdd>),
ReactionRemove(Box<ReactionRemove>),
ReactionRemoveAll(ReactionRemoveAll),
ReactionRemoveEmoji(ReactionRemoveEmoji),
Ready(Box<Ready>),
Resumed,
RoleCreate(RoleCreate),
RoleDelete(RoleDelete),
RoleUpdate(RoleUpdate),
ShardConnected(Connected),
ShardConnecting(Connecting),
ShardDisconnected(Disconnected),
ShardIdentifying(Identifying),
ShardReconnecting(Reconnecting),
ShardPayload(Payload),
ShardResuming(Resuming),
TypingStart(Box<TypingStart>),
UnavailableGuild(UnavailableGuild),
UserUpdate(UserUpdate),
VoiceServerUpdate(VoiceServerUpdate),
VoiceStateUpdate(Box<VoiceStateUpdate>),
WebhooksUpdate(WebhooksUpdate),
}
impl Event {
pub fn kind(&self) -> EventType {
match self {
Self::BanAdd(_) => EventType::BanAdd,
Self::BanRemove(_) => EventType::BanRemove,
Self::ChannelCreate(_) => EventType::ChannelCreate,
Self::ChannelDelete(_) => EventType::ChannelDelete,
Self::ChannelPinsUpdate(_) => EventType::ChannelPinsUpdate,
Self::ChannelUpdate(_) => EventType::ChannelUpdate,
Self::GatewayHeartbeat(_) => EventType::GatewayHeartbeat,
Self::GatewayHeartbeatAck => EventType::GatewayHeartbeatAck,
Self::GatewayHello(_) => EventType::GatewayHello,
Self::GatewayInvalidateSession(_) => EventType::GatewayInvalidateSession,
Self::GatewayReconnect => EventType::GatewayReconnect,
Self::GiftCodeUpdate => EventType::GiftCodeUpdate,
Self::GuildCreate(_) => EventType::GuildCreate,
Self::GuildDelete(_) => EventType::GuildDelete,
Self::GuildEmojisUpdate(_) => EventType::GuildEmojisUpdate,
Self::GuildIntegrationsUpdate(_) => EventType::GuildIntegrationsUpdate,
Self::GuildUpdate(_) => EventType::GuildUpdate,
Self::InviteCreate(_) => EventType::InviteCreate,
Self::InviteDelete(_) => EventType::InviteDelete,
Self::MemberAdd(_) => EventType::MemberAdd,
Self::MemberRemove(_) => EventType::MemberRemove,
Self::MemberUpdate(_) => EventType::MemberUpdate,
Self::MemberChunk(_) => EventType::MemberChunk,
Self::MessageCreate(_) => EventType::MessageCreate,
Self::MessageDelete(_) => EventType::MessageDelete,
Self::MessageDeleteBulk(_) => EventType::MessageDeleteBulk,
Self::MessageUpdate(_) => EventType::MessageUpdate,
Self::PresenceUpdate(_) => EventType::PresenceUpdate,
Self::PresencesReplace => EventType::PresencesReplace,
Self::ReactionAdd(_) => EventType::ReactionAdd,
Self::ReactionRemove(_) => EventType::ReactionRemove,
Self::ReactionRemoveAll(_) => EventType::ReactionRemoveAll,
Self::ReactionRemoveEmoji(_) => EventType::ReactionRemoveEmoji,
Self::Ready(_) => EventType::Ready,
Self::Resumed => EventType::Resumed,
Self::RoleCreate(_) => EventType::RoleCreate,
Self::RoleDelete(_) => EventType::RoleDelete,
Self::RoleUpdate(_) => EventType::RoleUpdate,
Self::ShardConnected(_) => EventType::ShardConnected,
Self::ShardConnecting(_) => EventType::ShardConnecting,
Self::ShardDisconnected(_) => EventType::ShardDisconnected,
Self::ShardIdentifying(_) => EventType::ShardIdentifying,
Self::ShardReconnecting(_) => EventType::ShardReconnecting,
Self::ShardPayload(_) => EventType::ShardPayload,
Self::ShardResuming(_) => EventType::ShardResuming,
Self::TypingStart(_) => EventType::TypingStart,
Self::UnavailableGuild(_) => EventType::UnavailableGuild,
Self::UserUpdate(_) => EventType::UserUpdate,
Self::VoiceServerUpdate(_) => EventType::VoiceServerUpdate,
Self::VoiceStateUpdate(_) => EventType::VoiceStateUpdate,
Self::WebhooksUpdate(_) => EventType::WebhooksUpdate,
}
}
}
impl From<Box<DispatchEvent>> for Event {
fn from(event: Box<DispatchEvent>) -> Self {
match *event {
DispatchEvent::BanAdd(v) => Self::BanAdd(v),
DispatchEvent::BanRemove(v) => Self::BanRemove(v),
DispatchEvent::ChannelCreate(v) => Self::ChannelCreate(v),
DispatchEvent::ChannelDelete(v) => Self::ChannelDelete(v),
DispatchEvent::ChannelPinsUpdate(v) => Self::ChannelPinsUpdate(v),
DispatchEvent::ChannelUpdate(v) => Self::ChannelUpdate(v),
DispatchEvent::GiftCodeUpdate => Self::GiftCodeUpdate,
DispatchEvent::GuildCreate(v) => Self::GuildCreate(v),
DispatchEvent::GuildDelete(v) => Self::GuildDelete(v),
DispatchEvent::GuildEmojisUpdate(v) => Self::GuildEmojisUpdate(v),
DispatchEvent::GuildIntegrationsUpdate(v) => Self::GuildIntegrationsUpdate(v),
DispatchEvent::InviteCreate(v) => Self::InviteCreate(v),
DispatchEvent::InviteDelete(v) => Self::InviteDelete(v),
DispatchEvent::MemberAdd(v) => Self::MemberAdd(v),
DispatchEvent::MemberRemove(v) => Self::MemberRemove(v),
DispatchEvent::MemberUpdate(v) => Self::MemberUpdate(v),
DispatchEvent::MemberChunk(v) => Self::MemberChunk(v),
DispatchEvent::RoleCreate(v) => Self::RoleCreate(v),
DispatchEvent::RoleDelete(v) => Self::RoleDelete(v),
DispatchEvent::RoleUpdate(v) => Self::RoleUpdate(v),
DispatchEvent::GuildUpdate(v) => Self::GuildUpdate(v),
DispatchEvent::MessageCreate(v) => Self::MessageCreate(v),
DispatchEvent::MessageDelete(v) => Self::MessageDelete(v),
DispatchEvent::MessageDeleteBulk(v) => Self::MessageDeleteBulk(v),
DispatchEvent::MessageUpdate(v) => Self::MessageUpdate(v),
DispatchEvent::PresenceUpdate(v) => Self::PresenceUpdate(v),
DispatchEvent::PresencesReplace => Self::PresencesReplace,
DispatchEvent::ReactionAdd(v) => Self::ReactionAdd(v),
DispatchEvent::ReactionRemove(v) => Self::ReactionRemove(v),
DispatchEvent::ReactionRemoveAll(v) => Self::ReactionRemoveAll(v),
DispatchEvent::ReactionRemoveEmoji(v) => Self::ReactionRemoveEmoji(v),
DispatchEvent::Ready(v) => Self::Ready(v),
DispatchEvent::Resumed => Self::Resumed,
DispatchEvent::TypingStart(v) => Self::TypingStart(v),
DispatchEvent::UnavailableGuild(v) => Self::UnavailableGuild(v),
DispatchEvent::UserUpdate(v) => Self::UserUpdate(v),
DispatchEvent::VoiceServerUpdate(v) => Self::VoiceServerUpdate(v),
DispatchEvent::VoiceStateUpdate(v) => Self::VoiceStateUpdate(v),
DispatchEvent::WebhooksUpdate(v) => Self::WebhooksUpdate(v),
}
}
}
impl From<GatewayEvent> for Event {
fn from(event: GatewayEvent) -> Self {
match event {
GatewayEvent::Dispatch(_, e) => Self::from(e),
GatewayEvent::Heartbeat(interval) => Self::GatewayHeartbeat(interval),
GatewayEvent::HeartbeatAck => Self::GatewayHeartbeatAck,
GatewayEvent::Hello(interval) => Self::GatewayHello(interval),
GatewayEvent::InvalidateSession(r) => Self::GatewayInvalidateSession(r),
GatewayEvent::Reconnect => Self::GatewayReconnect,
}
}
}
impl From<ShardEvent> for Event {
fn from(event: ShardEvent) -> Self {
match event {
ShardEvent::Connected(v) => Self::ShardConnected(v),
ShardEvent::Connecting(v) => Self::ShardConnecting(v),
ShardEvent::Disconnected(v) => Self::ShardDisconnected(v),
ShardEvent::Identifying(v) => Self::ShardIdentifying(v),
ShardEvent::Payload(v) => Self::ShardPayload(v),
ShardEvent::Reconnecting(v) => Self::ShardReconnecting(v),
ShardEvent::Resuming(v) => Self::ShardResuming(v),
}
}
}
#[derive(Debug)]
pub struct EventConversionError {
event: Event,
}
impl EventConversionError {
pub fn new(event: Event) -> EventConversionError {
Self { event }
}
pub fn into_event(self) -> Event {
self.event
}
}
impl Display for EventConversionError {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
write!(f, "event variant failed to convert")
}
}
impl Error for EventConversionError {}