use enumflags2::{bitflags, BitFlags}; use serde::{Deserialize, Serialize}; use serde_repr::{Deserialize_repr, Serialize_repr}; use super::user::User; #[derive(Debug, Clone, Deserialize, Serialize)] pub enum PresenceUpdateStatus { #[serde(rename = "online")] Online, #[serde(rename = "idle")] Idle, #[serde(rename = "dnd")] Dnd, #[serde(rename = "offline")] Offline, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ClientStatus { pub desktop: Option, pub mobile: Option, pub web: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct PresenceUpdate { pub user: User, pub guild_id: String, pub status: PresenceUpdateStatus, pub activities: Vec, pub client_status: ClientStatus, } #[derive(Debug, Clone, Deserialize_repr, Serialize_repr)] #[repr(u8)] pub enum ActivityTypes { Game = 0, Streaming = 1, Listening = 2, Watching = 3, Custom = 4, Competing = 5, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ActivityTimestamps { pub start: Option, pub end: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ActivityEmoji { pub name: String, pub id: Option, pub animated: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ActivityParty { pub id: Option, /// [current_size, max_size] pub size: Option>, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ActivityAssets { pub large_image: Option, pub large_text: Option, pub small_image: Option, pub small_text: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ActivitySecrets { pub join: Option, pub spectate: Option, #[serde(rename = "match")] pub match_: Option, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ActivityButtons { pub label: String, pub url: String, } #[bitflags] #[repr(u64)] #[derive(Debug, Clone, Copy)] pub enum ActivityFlags { Instance = 1 << 0, Join = 1 << 1, Spectate = 1 << 2, JoinRequest = 1 << 3, Sync = 1 << 4, Play = 1 << 5, } #[derive(Debug, Clone, Deserialize, Serialize)] pub struct Activity { pub name: String, #[serde(rename = "type")] pub type_: ActivityTypes, pub url: Option, pub created_at: String, pub timestamps: Option, pub application_id: Option, pub details: Option, pub state: Option, pub emoji: Option, pub party: Option, pub assets: Option, pub secrets: Option, pub instance: Option, pub flags: Option>, pub buttons: Option>, }