use anyhow::Result;
use async_trait::async_trait;
use crate::capabilities::ChannelCapabilities;
use crate::identity::ConversationId;
use crate::message::{ChannelMessage, MessageId};
#[async_trait]
pub trait Channel: Send + Sync {
fn channel_type(&self) -> &str;
fn capabilities(&self) -> ChannelCapabilities;
async fn send_message(
&self,
target: &ConversationId,
message: &ChannelMessage,
) -> Result<MessageId>;
async fn edit_message(&self, id: &MessageId, message: &ChannelMessage) -> Result<()>;
async fn delete_message(&self, id: &MessageId) -> Result<()>;
async fn send_typing(&self, target: &ConversationId) -> Result<()>;
async fn add_reaction(&self, id: &MessageId, emoji: &str) -> Result<()>;
async fn get_history(
&self,
target: &ConversationId,
limit: usize,
) -> Result<Vec<ChannelMessage>>;
}