use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use models::{MessageId, RoomId, UserId, Uuid}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum ReactionEventType { Added, Removed, BatchUpdated, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum ReactionEvent { Added(ReactionAddedService), Removed(ReactionRemovedService), BatchUpdated(ReactionBatchUpdatedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReactionAddedService { pub id: Uuid, pub room: RoomId, pub message: MessageId, pub user: UserId, pub emoji: String, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReactionRemovedService { pub id: Uuid, pub room: RoomId, pub message: MessageId, pub user: UserId, pub emoji: String, pub removed_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReactionBatchUpdatedService { pub room: RoomId, pub message: MessageId, pub reactions: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ReactionGroup { pub emoji: String, pub count: i64, pub reacted_by_me: bool, pub users: Vec, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ReactionAddClient { pub room: RoomId, pub message: MessageId, pub emoji: String, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ReactionRemoveClient { pub room: RoomId, pub message: MessageId, pub emoji: String, }