#![allow(clippy::std_instead_of_core)]
use core::fmt::Display;
use std::error::Error;
use async_trait::async_trait;
use twilight_model::{
channel::StageInstance,
id::{
marker::{
ChannelMarker, EmojiMarker, GenericMarker, GuildMarker, MessageMarker, RoleMarker,
StageMarker, UserMarker,
},
Id,
},
user::CurrentUser,
};
use crate::{
cache,
model::{
CachedActivity, CachedAttachment, CachedChannel, CachedEmbed, CachedEmbedField,
CachedEmoji, CachedGuild, CachedMember, CachedMessage, CachedPermissionOverwrite,
CachedPresence, CachedReaction, CachedRole, CachedSticker,
},
};
impl<E: Display + Send> From<E> for cache::Error<E> {
fn from(err: E) -> Self {
Self::Backend(err)
}
}
#[async_trait]
pub trait Backend {
type Error: Error + Send + Sync + 'static;
async fn set_current_user(&self, current_user: CurrentUser) -> Result<(), Self::Error>;
async fn upsert_channel(&self, channel: CachedChannel) -> Result<(), Self::Error>;
async fn delete_channel(&self, channel_id: Id<ChannelMarker>) -> Result<(), Self::Error>;
async fn delete_guild_channels(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn upsert_permission_overwrite(
&self,
permission_overwrite: CachedPermissionOverwrite,
) -> Result<(), Self::Error>;
async fn delete_channel_permission_overwrites(
&self,
channel_id: Id<ChannelMarker>,
) -> Result<(), Self::Error>;
async fn upsert_message(&self, message: CachedMessage) -> Result<(), Self::Error>;
async fn delete_message(&self, message_id: Id<MessageMarker>) -> Result<(), Self::Error>;
async fn upsert_embed(&self, embed: CachedEmbed) -> Result<(), Self::Error>;
async fn delete_embed(&self, embed_id: Id<GenericMarker>) -> Result<(), Self::Error>;
async fn upsert_embed_field(&self, embed_field: CachedEmbedField) -> Result<(), Self::Error>;
async fn delete_embed_fields(&self, embed_id: Id<GenericMarker>) -> Result<(), Self::Error>;
async fn select_message_embeds(
&self,
message_id: Id<MessageMarker>,
) -> Result<Vec<CachedEmbed>, Self::Error>;
async fn select_embed_fields(
&self,
embed_id: Id<GenericMarker>,
) -> Result<Vec<CachedEmbedField>, Self::Error>;
async fn upsert_attachment(&self, attachment: CachedAttachment) -> Result<(), Self::Error>;
async fn delete_message_attachments(
&self,
message_id: Id<MessageMarker>,
) -> Result<(), Self::Error>;
async fn upsert_reaction(&self, reaction: CachedReaction) -> Result<(), Self::Error>;
async fn delete_reaction(
&self,
message_id: Id<MessageMarker>,
user_id: Id<UserMarker>,
emoji: String,
) -> Result<(), Self::Error>;
async fn delete_message_reactions_by_emoji(
&self,
message_id: Id<MessageMarker>,
emoji: String,
) -> Result<(), Self::Error>;
async fn delete_message_reactions(
&self,
message_id: Id<MessageMarker>,
) -> Result<(), Self::Error>;
async fn upsert_member(&self, member: CachedMember) -> Result<(), Self::Error>;
async fn delete_member(
&self,
user_id: Id<UserMarker>,
guild_id: Id<GuildMarker>,
) -> Result<(), Self::Error>;
async fn delete_guild_members(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn upsert_presence(&self, presence: CachedPresence) -> Result<(), Self::Error>;
async fn delete_presence(
&self,
guild_id: Id<GuildMarker>,
user_id: Id<UserMarker>,
) -> Result<(), Self::Error>;
async fn delete_guild_presences(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn upsert_activity(&self, activity: CachedActivity) -> Result<(), Self::Error>;
async fn delete_user_activities(
&self,
guild_id: Id<GuildMarker>,
user_id: Id<UserMarker>,
) -> Result<(), Self::Error>;
async fn upsert_guild(&self, guild: CachedGuild) -> Result<(), Self::Error>;
async fn delete_guild(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn insert_role(&self, role: CachedRole) -> Result<(), Self::Error>;
async fn update_roles(&self, role: CachedRole) -> Result<(), Self::Error>;
async fn delete_role(&self, role_id: Id<RoleMarker>) -> Result<(), Self::Error>;
async fn delete_guild_roles(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn delete_member_roles(
&self,
guild_id: Id<GuildMarker>,
user_id: Id<UserMarker>,
) -> Result<(), Self::Error>;
async fn upsert_emoji(&self, emoji: CachedEmoji) -> Result<(), Self::Error>;
async fn delete_emoji(&self, emoji_id: Id<EmojiMarker>) -> Result<(), Self::Error>;
async fn delete_guild_emojis(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn upsert_sticker(&self, sticker: CachedSticker) -> Result<(), Self::Error>;
async fn delete_message_stickers(
&self,
message_id: Id<MessageMarker>,
) -> Result<(), Self::Error>;
async fn delete_guild_stickers(&self, guild_id: Id<GuildMarker>) -> Result<(), Self::Error>;
async fn upsert_stage_instance(&self, stage: StageInstance) -> Result<(), Self::Error>;
async fn delete_stage_instance(&self, stage_id: Id<StageMarker>) -> Result<(), Self::Error>;
async fn delete_guild_stage_instances(
&self,
guild_id: Id<GuildMarker>,
) -> Result<(), Self::Error>;
}