use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use uuid::Uuid; use crate::event::{RoomInfo, UserInfo}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum DmEventType { Created, Closed, Reopened, } impl DmEventType { pub fn as_str(&self) -> &str { match self { Self::Created => "dm.created", Self::Closed => "dm.closed", Self::Reopened => "dm.reopened", } } } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type")] pub enum DmEvent { #[serde(rename = "dm.created")] Created(DmCreatedService), #[serde(rename = "dm.closed")] Closed(DmClosedService), #[serde(rename = "dm.reopened")] Reopened(DmReopenedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DmCreatedService { pub room: RoomInfo, pub initiator: UserInfo, pub recipient: UserInfo, pub created_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DmClosedService { pub room: RoomInfo, pub closed_by: UserInfo, pub closed_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DmReopenedService { pub room: RoomInfo, pub reopened_by: UserInfo, pub reopened_at: DateTime, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DmCreateClient { pub recipient: Uuid, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct DmCloseClient { pub room: Uuid, }