use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum MessageType {
#[default]
Text,
System,
Edit,
Delete,
Media,
Action,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Reaction {
pub emoji: String,
pub count: u32,
#[serde(default)]
pub user_ids: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub id: String,
pub sender: String,
pub content: String,
pub timestamp: i64,
#[serde(default)]
pub channel: Option<String>,
#[serde(default)]
pub reply_to: Option<String>,
#[serde(default)]
pub thread_id: Option<String>,
#[serde(default)]
pub media: Option<Vec<MediaAttachment>>,
#[serde(default)]
pub is_direct: bool,
#[serde(default)]
pub message_type: MessageType,
#[serde(default)]
pub edited_timestamp: Option<i64>,
#[serde(default)]
pub reactions: Option<Vec<Reaction>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MediaAttachment {
pub url: Option<String>,
pub path: Option<String>,
pub mime_type: Option<String>,
pub filename: Option<String>,
#[serde(default)]
pub size: Option<u64>,
}
#[derive(Debug, Default)]
pub struct SendOptions<'a> {
pub recipient: &'a str,
pub content: &'a str,
pub reply_to: Option<&'a str>,
pub thread_id: Option<&'a str>,
pub silent: bool,
pub media: Option<&'a str>,
}