gitdataai/lib/channel/event/dm.rs
2026-05-30 01:38:40 +08:00

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,
}