use crate::models::message::{AppendMessage, Message, MessageQuery, PartialMessage}; use crate::Result; #[async_trait] pub trait AbstractMessage: Sync + Send { /// Fetch a message by its id async fn fetch_message(&self, id: &str) -> Result; /// Insert a new message into the database async fn insert_message(&self, message: &Message) -> Result<()>; /// Update a given message with new information async fn update_message(&self, id: &str, message: &PartialMessage) -> Result<()>; /// Append information to a given message async fn append_message(&self, id: &str, append: &AppendMessage) -> Result<()>; /// Delete a message from the database by its id async fn delete_message(&self, id: &str) -> Result<()>; /// Delete messages from a channel by their ids and corresponding channel id async fn delete_messages(&self, channel: &str, ids: Vec) -> Result<()>; /// Fetch multiple messages by given query async fn fetch_messages(&self, query: MessageQuery) -> Result>; /// Add a new reaction to a message async fn add_reaction(&self, id: &str, emoji: &str, user: &str) -> Result<()>; /// Remove a reaction from a message async fn remove_reaction(&self, id: &str, emoji: &str, user: &str) -> Result<()>; /// Remove reaction from a message async fn clear_reaction(&self, id: &str, emoji: &str) -> Result<()>; }