use chrono::{DateTime, Utc}; use serde::{Deserialize, Serialize}; use models::{ProjectId, UserId}; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum UserPresenceStatus { Online, Idle, Dnd, Offline, } #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] pub enum PresenceEventType { Changed, CustomStatusUpdated, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum PresenceEvent { Changed(PresenceChangedService), CustomStatusUpdated(CustomStatusUpdatedService), } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct PresenceChangedService { pub user: UserId, pub project: Option, pub status: UserPresenceStatus, pub last_seen_at: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CustomStatusUpdatedService { pub user: UserId, pub emoji: Option, pub text: Option, pub expires_at: Option>, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct PresenceUpdateClient { pub status: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct CustomStatusUpdateClient { pub emoji: Option, pub text: Option, pub expires_at: Option>, }