use serde::{Deserialize, Serialize};
use crate::{
channel::{Channel, FieldsChannel, PartialChannel},
emoji::Emoji,
member::{FieldsMember, Member, MemberCompositeKey, PartialMember},
message::{AppendMessage, Message, PartialMessage},
report::Report,
server::{FieldsRole, FieldsServer, PartialRole, PartialServer, Server},
user::{FieldsUser, PartialUser, RelationshipStatus, User, UserSettings},
webhook::{FieldsWebhook, PartialWebhook, Webhook},
};
#[derive(Deserialize, Debug, Clone, Eq, PartialEq)]
#[serde(tag = "type")]
pub enum ErrorId {
LabelMe,
InternalError {
at: String,
},
InvalidSenssion,
OnboardingNotFinished,
AlreadyAuthenticated,
MalformedData {
msg: String,
},
#[serde(other)]
Unknown,
}
#[derive(Deserialize, Debug, Clone)]
#[serde(tag = "type")]
pub enum ServerEvent {
Bulk(BulkEvent),
Error(ErrorEvent),
Authenticated,
Ready(ReadyEvent),
Pong(PongEvent),
Message(Message),
MessageUpdate(MessageUpdateEvent),
MessageAppend(MessageAppendEvent),
MessageDelete(MessageDeleteEvent),
MessageReact(MessageReactEvent),
MessageUnreact(MessageUnreactEvent),
MessageRemoveReaction(MessageRemoveReactionEvent),
BulkMessageDelete(BulkMessageDeleteEvent),
ChannelCreate(Channel),
ChannelUpdate(ChannelUpdateEvent),
ChannelDelete(ChannelDeleteEvent),
ChannelGroupJoin(ChannelGroupJoinEvent),
ChannelGroupLeave(ChannelGroupLeaveEvent),
ChannelStartTyping(ChannelStartTypingEvent),
ChannelStopTyping(ChannelStopTypingEvent),
ChannelAck(ChannelAckEvent),
ServerCreate(ServerCreateEvent),
ServerUpdate(ServerUpdateEvent),
ServerDelete(ServerDeleteEvent),
ServerMemberUpdate(ServerMemberUpdateEvent),
ServerMemberJoin(ServerMemberJoinEvent),
ServerMemberLeave(ServerMemberLeaveEvent),
ServerRoleUpdate(ServerRoleUpdateEvent),
ServerRoleDelete(ServerRoleDeleteEvent),
UserUpdate(UserUpdateEvent),
UserRelationship(UserRelationshipEvent),
UserSettingsUpdate(UserSettingsUpdateEvent),
UserPlatformWipe(UserPlatformWipeEvent),
EmojiCreate(Emoji),
EmojiDelete(EmojiDeleteEvent),
WebhookCreate(Webhook),
WebhookUpdate(WebhookUpdateEvent),
WebhookDelete(WebhookDeleteEvent),
ReportCreate(Report),
Auth(AuthifierEvent),
#[serde(other)]
Unknown,
}
#[derive(Serialize, Debug, Clone, Eq, PartialEq)]
#[serde(tag = "type")]
pub enum ClientEvent {
Authenticate { token: String },
Ping { data: i32 },
BeginTyping { channel: String },
EndTyping { channel: String },
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(tag = "event_type")]
pub enum AuthifierEvent {
DeleteSession {
user_id: String,
session_id: String,
},
DeleteAllSessions {
user_id: String,
exclude_session_id: Option<String>,
},
}
#[derive(Deserialize, Debug, Clone)]
pub struct BulkEvent {
pub v: Vec<ServerEvent>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ErrorEvent {
pub error: ErrorId,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ReadyEvent {
pub users: Vec<User>,
pub servers: Vec<Server>,
pub channels: Vec<Channel>,
pub members: Vec<Member>,
pub emojis: Option<Vec<Emoji>>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct PongEvent {
pub data: u32,
}
#[derive(Deserialize, Debug, Clone)]
pub struct MessageUpdateEvent {
pub id: String,
pub channel: String,
pub data: PartialMessage,
}
#[derive(Deserialize, Debug, Clone)]
pub struct MessageAppendEvent {
pub id: String,
pub channel: String,
pub append: AppendMessage,
}
#[derive(Deserialize, Debug, Clone)]
pub struct MessageDeleteEvent {
pub id: String,
pub channel: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct MessageReactEvent {
pub id: String,
pub channel_id: String,
pub user_id: String,
pub emoji_id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct MessageUnreactEvent {
pub id: String,
pub channel_id: String,
pub user_id: String,
pub emoji_id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct MessageRemoveReactionEvent {
pub id: String,
pub channel_id: String,
pub emoji_id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct BulkMessageDeleteEvent {
pub channel: String,
pub ids: Vec<String>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelUpdateEvent {
pub id: String,
pub data: PartialChannel,
pub clear: Vec<FieldsChannel>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelDeleteEvent {
pub id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelGroupJoinEvent {
pub id: String,
pub user: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelGroupLeaveEvent {
pub id: String,
pub user: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelStartTypingEvent {
pub id: String,
pub user: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelStopTypingEvent {
pub id: String,
pub user: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ChannelAckEvent {
pub id: String,
pub user: String,
pub message_id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerCreateEvent {
pub id: String,
pub server: Server,
pub channels: Vec<Channel>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerUpdateEvent {
pub id: String,
pub data: PartialServer,
pub clear: Vec<FieldsServer>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerDeleteEvent {
pub id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerMemberUpdateEvent {
pub id: MemberCompositeKey,
pub data: PartialMember,
pub clear: Vec<FieldsMember>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerMemberJoinEvent {
pub id: String,
pub user: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerMemberLeaveEvent {
pub id: String,
pub user: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerRoleUpdateEvent {
pub id: String,
pub role_id: String,
pub data: PartialRole,
pub clear: Vec<FieldsRole>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct ServerRoleDeleteEvent {
pub id: String,
pub role_id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct UserUpdateEvent {
pub id: String,
pub data: PartialUser,
pub clear: Vec<FieldsUser>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct UserRelationshipEvent {
pub id: String,
pub user: User,
pub status: RelationshipStatus,
}
#[derive(Deserialize, Debug, Clone)]
pub struct UserSettingsUpdateEvent {
pub id: String,
pub update: UserSettings,
}
#[derive(Deserialize, Debug, Clone)]
pub struct UserPlatformWipeEvent {
pub user_id: String,
pub flags: i32,
}
#[derive(Deserialize, Debug, Clone)]
pub struct EmojiDeleteEvent {
pub id: String,
}
#[derive(Deserialize, Debug, Clone)]
pub struct WebhookUpdateEvent {
pub id: String,
pub data: PartialWebhook,
pub remove: Vec<FieldsWebhook>,
}
#[derive(Deserialize, Debug, Clone)]
pub struct WebhookDeleteEvent {
pub id: String,
}