67 lines
1.5 KiB
Rust
67 lines
1.5 KiB
Rust
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<Utc>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct DmClosedService {
|
|
pub room: RoomInfo,
|
|
pub closed_by: UserInfo,
|
|
pub closed_at: DateTime<Utc>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct DmReopenedService {
|
|
pub room: RoomInfo,
|
|
pub reopened_by: UserInfo,
|
|
pub reopened_at: DateTime<Utc>,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct DmCreateClient {
|
|
pub recipient: Uuid,
|
|
}
|
|
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct DmCloseClient {
|
|
pub room: Uuid,
|
|
}
|