use serde::{Deserialize, Serialize}; use std::fmt::Debug; use crate::discord_models::{ application::Application, channel::{Channel, Message, ThreadMember}, emoji::Emoji, gateway::PresenceUpdate, guild::{Guild, GuildMember, Integration}, invite::InviteTargetTypes, permissions::Role, slash_commands::{ApplicationCommand, Interaction}, stage_instance::StageInstance, user::User, voice::VoiceState, }; /// Payload send to the nova cache queues #[derive(Serialize, Deserialize, Debug, Clone)] // #[serde(bound(deserialize = "T: Deserialize<'de> + std::default::Default + Clone"))] pub struct CachePayload { pub tracing: Tracing, pub data: CacheData, } #[derive(Serialize, Deserialize, Debug)] pub struct Tracing { pub node_id: String, pub span: Option, } #[derive(Serialize, Deserialize, Debug, Clone)] pub enum CacheData { Ready { version: u8, user: User, guilds: Vec, session_id: String, shard: Option>, application: Application, }, ApplicationCommandCreate { guild_id: Option, command: ApplicationCommand, }, ApplicationCommandUpdate { guild_id: Option, command: ApplicationCommand, }, ApplicationCommandDelete { guild_id: Option, command: ApplicationCommand, }, ChannelCreate { channel: Channel, }, ChannelUpdate { channel: Channel, }, ChannelDelete { channel: Channel, }, ThreadCreate { channel: Channel, }, ThreadUpdate { channel: Channel, }, ThreadDelete { channel: Channel, }, ThreadListSync { guild_id: String, channel_ids: Option>, threads: Vec, members: Vec, }, ThreadMemberUpdate { member: ThreadMember, }, ThreadMembersUpdate { id: String, guild_id: String, member_count: i64, added_members: Option>, removed_member_ids: Option>, }, ChannelPinsUpdate { guild_id: Option, channel_id: String, last_pin_timestamp: Option, }, GuildCreate { guild: Guild, }, GuildUpdate { guild: Guild, }, GuildDelete { guild: Guild, }, GuildBanAdd { guild_id: String, user: User, }, GuildBanRemove { guild_id: String, user: User, }, GuildEmojisUpdate { guild_id: String, emojis: Vec, }, GuildIntegrationsUpdate { guild_id: String, }, GuildMemberAdd { guild_id: String, member: GuildMember, }, GuildMemberRemove { guild_id: String, user: User, }, GuildMemberUpdate { guild_id: String, roles: Vec, user: User, nick: Option, joined_at: Option, premium_since: Option, deaf: Option, mute: Option, pending: Option, }, GuildMembersChunk { guild_id: String, members: Vec, chunk_index: i64, chunk_count: i64, not_found: Option>, presences: Option>, nonce: Option, }, GuildRoleCreate { guild_id: String, role: Role, }, GuildRoleUpdate { guild_id: String, role: Role, }, GuildRoleDelete { guild_id: String, role_id: String, }, IntegrationCreate { guild_id: String, integration: Integration, }, IntegrationUpdate { guild_id: String, integration: Integration, }, IntegrationDelete { id: String, guild_id: String, application_id: Option, }, InviteCreate { channel_id: String, code: String, created_at: String, guild_id: Option, inviter: Option, max_age: i64, max_uses: i64, target_type: Option, target_user: Option, target_application: Option, temporary: bool, uses: i64, }, InviteDelete { channel_id: String, guild_id: Option, code: String, }, InteractionCreate { // boxed to avoid a large difference size between variants (https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant) interaction: Box, }, MessageCreate { message: Message, }, MessageUpdate { message: Message, }, MessageDelete { id: String, channel_id: String, guild_id: Option, }, MessageDeleteBulk { ids: Vec, channel_id: String, guild_id: Option, }, MessageReactionAdd { user_id: String, channel_id: String, message_id: String, guild_id: Option, member: Option, emoji: Emoji, }, MessageReactionRemove { user_id: String, channel_id: String, message_id: String, guild_id: Option, emoji: Emoji, }, MessageReactionRemoveAll { channel_id: String, message_id: String, guild_id: Option, }, MessageReactionRemoveEmoji { channel_id: String, message_id: String, guild_id: Option, emoji: Emoji, }, PresenceUpdate { presence: PresenceUpdate, }, TypingStart { channel_id: String, guild_id: Option, user_id: String, timestamp: i64, member: Option, }, UserUpdate { user: User, }, VoiceStateUpdate { state: VoiceState, }, VoiceServerUpdate { token: String, guild_id: String, endpoint: Option, }, WebhookUpdate { guild_id: String, channel_id: String, }, StageInstanceCreate { instance: StageInstance, }, StageInstanceUpdate { instance: StageInstance, }, StageInstanceDelete { instance: StageInstance, }, }