use serde::{Deserialize, Serialize}; use uuid::Uuid; #[derive(Debug, Clone, Serialize, Deserialize)] pub enum WsOutbound { AuthOk { request_id: Uuid, connection_id: Uuid, heartbeat_interval_secs: u64, }, AuthError { request_id: Uuid, message: String, }, HeartbeatAck { request_id: Uuid, timestamp_ms: i64, }, Error { request_id: Uuid, code: String, message: String, }, Typing { request_id: Uuid, data: TypingEvent, }, Presence { request_id: Uuid, data: PresenceEvent, }, Message { request_id: Uuid, data: MessageEvent, }, Channel { request_id: Uuid, data: ChannelEvent, }, Thread { request_id: Uuid, data: ThreadEvent, }, Member { request_id: Uuid, data: MemberEvent, }, Reaction { request_id: Uuid, data: ReactionEvent, }, Poll { request_id: Uuid, data: PollEvent, }, Article { request_id: Uuid, data: ArticleEvent, }, Category { request_id: Uuid, data: CategoryEvent, }, Draft { request_id: Uuid, data: DraftEvent, }, Follow { request_id: Uuid, data: FollowEvent, }, ReadReceiptAck { request_id: Uuid, channel_id: Uuid, last_read_message_id: Uuid, #[serde(skip_serializing_if = "Option::is_none")] last_seq: Option, }, SeqAck { request_id: Uuid, channel_id: Uuid, seq: i64, }, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct TypingEvent { pub channel_id: Uuid, pub thread_id: Option, pub user_id: Uuid, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PresenceEvent { pub user_id: Uuid, pub status: String, #[serde(skip_serializing_if = "Option::is_none")] pub custom_status_text: Option, #[serde(skip_serializing_if = "Option::is_none")] pub custom_status_emoji: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct MessageEvent { pub channel_id: Uuid, #[serde(skip_serializing_if = "Option::is_none")] pub thread_id: Option, pub message_id: Uuid, pub author_id: Uuid, pub action: MessageAction, #[serde(skip_serializing_if = "Option::is_none")] pub body: Option, #[serde(skip_serializing_if = "Option::is_none")] pub seq: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum MessageAction { Created, Edited, Deleted, Pinned, Unpinned, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ChannelEvent { pub channel_id: Uuid, pub action: ChannelAction, #[serde(default, skip_serializing_if = "Option::is_none")] pub workspace_name: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ChannelAction { Created, Updated, Deleted, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ThreadEvent { pub channel_id: Uuid, pub thread_id: Uuid, pub action: ThreadAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ThreadAction { Created, Updated, Deleted, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct MemberEvent { pub channel_id: Uuid, pub user_id: Uuid, pub action: MemberAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum MemberAction { Joined, Left, Kicked, Updated, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReactionEvent { pub channel_id: Uuid, pub message_id: Uuid, pub user_id: Uuid, pub action: ReactionAction, #[serde(skip_serializing_if = "Option::is_none")] pub content: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ReactionAction { Added, Removed, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PollEvent { pub channel_id: Uuid, pub poll_id: Uuid, pub action: PollAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum PollAction { Created, Voted, Deleted, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ArticleEvent { pub channel_id: Uuid, pub article_id: Uuid, pub action: ArticleAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum ArticleAction { Created, Updated, Published, Unpublished, Deleted, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CategoryEvent { pub workspace_name: String, pub category_id: Uuid, pub action: CategoryAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum CategoryAction { Created, Updated, Deleted, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DraftEvent { pub channel_id: Uuid, pub user_id: Uuid, pub thread_id: Option, pub action: DraftAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum DraftAction { Saved, Deleted, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct FollowEvent { pub channel_id: Uuid, pub follow_id: Uuid, pub action: FollowAction, } #[derive(Debug, Clone, Serialize, Deserialize)] pub enum FollowAction { Created, Deleted, Retried, }