use bitflags::bitflags;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::models::payloads::{APIThreadChannel, APIThreadMember};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGatewayInfo {
pub url: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGatewayBotInfo {
#[serde(flatten)]
pub base: APIGatewayInfo,
pub shards: i64,
pub session_start_limit: APIGatewaySessionStartLimit,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGatewaySessionStartLimit {
pub total: i64,
pub remaining: i64,
pub reset_after: i64,
pub max_concurrency: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GatewayGuildMembersChunkPresence {
pub user: GatewayPresenceUser,
pub status: Option<PresenceUpdateReceiveStatus>,
pub activities: Option<Vec<GatewayActivity>>,
pub client_status: Option<GatewayPresenceClientStatus>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GatewayPresenceUpdate {
#[serde(flatten)]
pub base: GatewayGuildMembersChunkPresence,
pub guild_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PresenceUpdateStatus {
Online,
DoNotDisturb,
Idle,
Invisible,
Offline,
}
pub type PresenceUpdateReceiveStatus = PresenceUpdateReceiveStatusEnum;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum PresenceUpdateReceiveStatusEnum {
Online,
DoNotDisturb,
Idle,
Offline,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayPresenceClientStatus {
pub desktop: Option<PresenceUpdateReceiveStatus>,
pub mobile: Option<PresenceUpdateReceiveStatus>,
pub web: Option<PresenceUpdateReceiveStatus>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GatewayActivity {
pub id: String,
pub name: String,
#[serde(rename = "type")]
pub r#type: ActivityType,
pub url: Option<String>,
pub created_at: i64,
pub timestamps: Option<GatewayActivityTimestamps>,
pub sync_id: Option<String>,
pub platform: Option<String>,
pub application_id: Option<String>,
pub status_display_type: Option<StatusDisplayType>,
pub details: Option<String>,
pub details_url: Option<String>,
pub state: Option<String>,
pub state_url: Option<String>,
pub emoji: Option<GatewayActivityEmoji>,
pub session_id: Option<String>,
pub party: Option<GatewayActivityParty>,
pub assets: Option<GatewayActivityAssets>,
pub secrets: Option<GatewayActivitySecrets>,
pub instance: Option<bool>,
pub flags: Option<ActivityFlags>,
pub buttons: Option<GatewayActivityButtons>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ActivityPlatform {
Desktop,
Xbox,
Samsung,
IOS,
Android,
Embedded,
PS4,
PS5,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum ActivityType {
Playing = 0,
Streaming = 1,
Listening = 2,
Watching = 3,
Custom = 4,
Competing = 5,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum StatusDisplayType {
Name = 0,
State = 1,
Details = 2,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayActivityTimestamps {
pub start: Option<i64>,
pub end: Option<i64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayActivityEmoji {
#[serde(skip_serializing_if = "Option::is_none")]
pub animated: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<String>,
pub name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayActivityParty {
pub id: Option<String>,
pub size: Option<[i64; 2]>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayActivityAssets {
pub large_image: Option<String>,
pub large_text: Option<String>,
pub large_url: Option<String>,
pub small_image: Option<String>,
pub small_text: Option<String>,
pub small_url: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayActivitySecrets {
pub join: Option<String>,
#[serde(rename = "match")]
pub r#match: Option<String>,
pub spectate: Option<String>,
}
bitflags! {
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ActivityFlags: u32 {
const Instance = 1 << 0;
const Join = 1 << 1;
const Spectate = 1 << 2;
const JoinRequest = 1 << 3;
const Sync = 1 << 4;
const Play = 1 << 5;
const PartyPrivacyFriends = 1 << 6;
const PartyPrivacyVoiceChannel = 1 << 7;
const Embedded = 1 << 8;
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum GatewayActivityButtons {
Buttons(Vec<GatewayActivityButton>),
Strings(Vec<String>),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GatewayActivityButton {
pub label: String,
pub url: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GatewayThreadListSync {
pub guild_id: String,
pub channel_ids: Option<Vec<String>>,
pub threads: Vec<APIThreadChannel>,
pub members: Vec<APIThreadMember>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GatewayThreadMembersUpdate {
pub id: String,
pub guild_id: String,
pub member_count: i64,
pub added_members: Option<Vec<APIThreadMember>>,
pub removed_member_ids: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GatewayPresenceUser {
pub id: String,
#[serde(flatten)]
pub extra: std::collections::HashMap<String, serde_json::Value>,
}