use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use super::guild::APIGuildIntegration;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIUser {
pub id: String,
pub username: String,
pub discriminator: String,
pub global_name: Option<String>,
pub avatar: Option<String>,
pub bot: Option<bool>,
pub system: Option<bool>,
pub mfa_enabled: Option<bool>,
pub banner: Option<String>,
pub accent_color: Option<u64>,
pub locale: Option<String>,
pub verified: Option<bool>,
pub email: Option<String>,
pub flags: Option<u64>,
pub premium_type: Option<UserPremiumType>,
pub public_flags: Option<u64>,
pub avatar_decoration: Option<String>,
pub avatar_decoration_data: Option<APIAvatarDecorationData>,
pub collectibles: Option<APICollectibles>,
pub primary_guild: Option<APIUserPrimaryGuild>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[repr(u64)]
pub enum UserFlags {
Staff = 1 << 0,
Partner = 1 << 1,
Hypesquad = 1 << 2,
BugHunterLevel1 = 1 << 3,
MFASMS = 1 << 4,
PremiumPromoDismissed = 1 << 5,
HypeSquadOnlineHouse1 = 1 << 6,
HypeSquadOnlineHouse2 = 1 << 7,
HypeSquadOnlineHouse3 = 1 << 8,
PremiumEarlySupporter = 1 << 9,
TeamPseudoUser = 1 << 10,
HasUnreadUrgentMessages = 1 << 13,
BugHunterLevel2 = 1 << 14,
VerifiedBot = 1 << 16,
VerifiedDeveloper = 1 << 17,
CertifiedModerator = 1 << 18,
BotHTTPInteractions = 1 << 19,
Spammer = 1 << 20,
DisablePremium = 1 << 21,
ActiveDeveloper = 1 << 22,
Quarantined = 17_592_186_044_416,
Collaborator = 1_125_899_906_842_624,
RestrictedCollaborator = 2_251_799_813_685_248,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum UserPremiumType {
None = 0,
NitroClassic = 1,
Nitro = 2,
NitroBasic = 3,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIConnection {
pub id: String,
pub name: String,
pub r#type: ConnectionService,
pub revoked: Option<bool>,
pub integrations: Option<Vec<APIGuildIntegration>>,
pub verified: bool,
pub friend_sync: bool,
pub show_activity: bool,
pub two_way_link: bool,
pub visibility: ConnectionVisibility,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ConnectionService {
#[serde(rename = "amazon-music")]
AmazonMusic,
#[serde(rename = "battlenet")]
BattleNet,
#[serde(rename = "bluesky")]
Bluesky,
#[serde(rename = "bungie")]
BungieNet,
#[serde(rename = "crunchyroll")]
Crunchyroll,
#[serde(rename = "domain")]
Domain,
#[serde(rename = "ebay")]
EBay,
#[serde(rename = "epicgames")]
EpicGames,
#[serde(rename = "facebook")]
Facebook,
#[serde(rename = "github")]
GitHub,
#[serde(rename = "instagram")]
Instagram,
#[serde(rename = "leagueoflegends")]
LeagueOfLegends,
#[serde(rename = "mastodon")]
Mastodon,
#[serde(rename = "paypal")]
PayPal,
#[serde(rename = "playstation")]
PlayStationNetwork,
#[serde(rename = "reddit")]
Reddit,
#[serde(rename = "riotgames")]
RiotGames,
#[serde(rename = "roblox")]
Roblox,
#[serde(rename = "spotify")]
Spotify,
#[serde(rename = "skype")]
Skype,
#[serde(rename = "steam")]
Steam,
#[serde(rename = "tiktok")]
TikTok,
#[serde(rename = "twitch")]
Twitch,
#[serde(rename = "twitter")]
X,
#[serde(rename = "xbox")]
Xbox,
#[serde(rename = "youtube")]
YouTube,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum ConnectionVisibility {
None = 0,
Everyone = 1,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIApplicationRoleConnection {
pub platform_name: Option<String>,
pub platform_username: Option<String>,
pub metadata: std::collections::HashMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIAvatarDecorationData {
pub asset: String,
pub sku_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APICollectibles {
pub nameplate: Option<APINameplateData>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APINameplateData {
pub sku_id: String,
pub asset: String,
pub label: String,
pub palette: NameplatePalette,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum NameplatePalette {
#[serde(rename = "berry")]
Berry,
#[serde(rename = "bubble_gum")]
BubbleGum,
#[serde(rename = "clover")]
Clover,
#[serde(rename = "cobalt")]
Cobalt,
#[serde(rename = "crimson")]
Crimson,
#[serde(rename = "forest")]
Forest,
#[serde(rename = "lemon")]
Lemon,
#[serde(rename = "sky")]
Sky,
#[serde(rename = "teal")]
Teal,
#[serde(rename = "violet")]
Violet,
#[serde(rename = "white")]
White,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIUserPrimaryGuild {
pub identity_guild_id: Option<String>,
pub identity_enabled: Option<bool>,
pub tag: Option<String>,
pub badge: Option<String>,
}