use serde::Deserialize;
use serde_json::Value;
use crate::{ds, types::payloads::ActivityPayload};
#[derive(Debug, Clone, Deserialize)]
pub struct ActivityResponseData {
application_id: Option<String>,
platform: Option<String>,
metadata: Option<Value>,
#[serde(flatten)]
pub activity: ActivityPayload,
}
impl ActivityResponseData {
ds!(application_id, "The ID of the application");
ds!(platform, "The platform of the host.");
#[must_use]
pub fn metadata(&self) -> Option<&Value> {
self.metadata.as_ref()
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct ReadyData {
v: u8,
pub config: ServerConfigurationData,
pub user: DiscordUser,
}
impl ReadyData {
#[must_use]
pub fn version(&self) -> u8 {
self.v
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct ServerConfigurationData {
cdn_host: String,
api_endpoint: String,
environment: String,
}
impl ServerConfigurationData {
#[must_use]
pub fn cdn_host(&self) -> &str {
&self.cdn_host
}
#[must_use]
pub fn api_endpoint(&self) -> &str {
&self.api_endpoint
}
#[must_use]
pub fn environment(&self) -> &str {
&self.environment
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct DiscordUser {
id: String,
username: String,
discriminator: String,
global_name: Option<String>,
avatar: Option<String>,
bot: Option<bool>,
system: Option<bool>,
mfa_enabled: Option<bool>,
banner: Option<String>,
accent_color: Option<isize>,
locale: Option<String>,
verified: Option<bool>,
email: Option<String>,
flags: Option<isize>,
premium_type: Option<isize>,
public_flags: Option<isize>,
pub avatar_decoration_data: Option<AvatarDecorationData>,
pub collectibles: Option<Collectibles>,
pub primary_guild: Option<PrimaryGuild>,
}
impl DiscordUser {
#[must_use]
pub fn id(&self) -> &str {
&self.id
}
#[must_use]
pub fn username(&self) -> &str {
&self.username
}
#[must_use]
pub fn discriminator(&self) -> &str {
&self.discriminator
}
ds!(global_name, "The user's display name, if set.");
ds!(avatar, "The user's avatar hash.");
#[must_use]
pub fn bot(&self) -> Option<bool> {
self.bot
}
#[must_use]
pub fn system(&self) -> Option<bool> {
self.system
}
#[must_use]
pub fn mfa_enabled(&self) -> Option<bool> {
self.mfa_enabled
}
ds!(banner, "The user's banner hash.");
ds!(locale, "The user's chosen language option.");
ds!(email, "The user's email.");
#[must_use]
pub fn verified(&self) -> Option<bool> {
self.verified
}
#[must_use]
pub fn accent_color(&self) -> Option<isize> {
self.accent_color
}
#[must_use]
pub fn flags(&self) -> Option<isize> {
self.flags
}
#[must_use]
pub fn premium_type(&self) -> Option<isize> {
self.premium_type
}
#[must_use]
pub fn public_flags(&self) -> Option<isize> {
self.public_flags
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct AvatarDecorationData {
asset: String,
sku_id: String,
}
impl AvatarDecorationData {
#[must_use]
pub fn asset(&self) -> &str {
&self.asset
}
#[must_use]
pub fn sku_id(&self) -> &str {
&self.sku_id
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct Collectibles {
pub nameplate: Option<NameplateData>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct NameplateData {
sku_id: String,
asset: String,
label: String,
palette: String,
}
impl NameplateData {
#[must_use]
pub fn sku_id(&self) -> &str {
&self.sku_id
}
#[must_use]
pub fn asset(&self) -> &str {
&self.asset
}
#[must_use]
pub fn label(&self) -> &str {
&self.label
}
#[must_use]
pub fn palette(&self) -> &str {
&self.palette
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct PrimaryGuild {
identity_guild_id: Option<String>,
identity_enabled: Option<bool>,
tag: Option<String>,
badge: Option<String>,
}
impl PrimaryGuild {
ds!(identity_guild_id, "The ID of the user's primary guild.");
ds!(
tag,
"The text of the user's server tag. Limited to 4 characters."
);
ds!(badge, "The server tag badge hash.");
#[must_use]
pub fn identity_enabled(&self) -> Option<bool> {
self.identity_enabled
}
}