use async_trait::async_trait;
use crate::{
models::{events::*, *},
Context,
};
#[async_trait]
pub trait EventHandler: Send + Sync + 'static {
async fn ready(&self, _cx: Context, _data: ReadyEvent) {}
async fn message(&self, _cx: Context, _data: Message) {}
async fn message_update(&self, _cx: Context, _data: MessageUpdateEvent) {}
async fn message_delete(&self, _cx: Context, _data: MessageDeleteEvent) {}
async fn channel_create(&self, _cx: Context, _data: Channel) {}
async fn channel_update(&self, _cx: Context, _data: ChannelUpdateEvent) {}
async fn channel_delete(&self, _cx: Context, _data: ChannelDeleteEvent) {}
async fn channel_group_join(&self, _cx: Context, _data: ChannelGroupJoinEvent) {}
async fn channel_group_leave(&self, _cx: Context, _data: ChannelGroupLeaveEvent) {}
async fn channel_start_typing(&self, _cx: Context, _data: ChannelStartTypingEvent) {}
async fn channel_stop_typing(&self, _cx: Context, _data: ChannelStopTypingEvent) {}
async fn channel_ack(&self, _cx: Context, _data: ChannelAckEvent) {}
async fn server_update(&self, _cx: Context, _data: ServerUpdateEvent) {}
async fn server_delete(&self, _cx: Context, _data: ServerDeleteEvent) {}
async fn server_member_update(&self, _cx: Context, _data: ServerMemberUpdateEvent) {}
async fn server_member_join(&self, _cx: Context, _data: ServerMemberJoinEvent) {}
async fn server_member_leave(&self, _cx: Context, _data: ServerMemberLeaveEvent) {}
async fn server_role_update(&self, _cx: Context, _data: ServerRoleUpdateEvent) {}
async fn server_role_delete(&self, _cx: Context, _data: ServerRoleDeleteEvent) {}
async fn user_update(&self, _cx: Context, _data: UserUpdateEvent) {}
}
#[async_trait]
pub(crate) trait EventHandlerExt: EventHandler {
async fn handle(&self, cx: Context, event: ServerEvent) {
match event {
ServerEvent::Ready(data) => self.ready(cx, data).await,
ServerEvent::Message(msg) => self.message(cx, msg).await,
ServerEvent::MessageUpdate(data) => self.message_update(cx, data).await,
ServerEvent::MessageDelete(data) => self.message_delete(cx, data).await,
ServerEvent::ChannelCreate(channel) => self.channel_create(cx, channel).await,
ServerEvent::ChannelUpdate(data) => self.channel_update(cx, data).await,
ServerEvent::ChannelDelete(data) => self.channel_delete(cx, data).await,
ServerEvent::ChannelGroupJoin(data) => self.channel_group_join(cx, data).await,
ServerEvent::ChannelGroupLeave(data) => self.channel_group_leave(cx, data).await,
ServerEvent::ChannelStartTyping(data) => self.channel_start_typing(cx, data).await,
ServerEvent::ChannelStopTyping(data) => self.channel_stop_typing(cx, data).await,
ServerEvent::ChannelAck(data) => self.channel_ack(cx, data).await,
ServerEvent::ServerUpdate(data) => self.server_update(cx, data).await,
ServerEvent::ServerDelete(data) => self.server_delete(cx, data).await,
ServerEvent::ServerMemberUpdate(data) => self.server_member_update(cx, data).await,
ServerEvent::ServerMemberJoin(data) => self.server_member_join(cx, data).await,
ServerEvent::ServerMemberLeave(data) => self.server_member_leave(cx, data).await,
ServerEvent::ServerRoleUpdate(data) => self.server_role_update(cx, data).await,
ServerEvent::ServerRoleDelete(data) => self.server_role_delete(cx, data).await,
ServerEvent::UserUpdate(data) => self.user_update(cx, data).await,
_ => return,
}
}
}
impl<T: EventHandler> EventHandlerExt for T {}