use serde::{Deserialize, Deserializer, Serialize, Serializer};
use serde_repr::{Deserialize_repr, Serialize_repr};
use super::id::UserId;
bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct UserFlags: u32 {
const STAFF = 1;
const CTP_MEMBER = 1 << 1;
const PARTNER = 1 << 2;
const BUG_HUNTER = 1 << 3;
const FRIENDLY_BOT = 1 << 4;
const FRIENDLY_BOT_MANUAL_APPROVAL = 1 << 5;
}
}
impl Serialize for UserFlags {
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
serializer.serialize_u32(self.bits())
}
}
impl<'de> Deserialize<'de> for UserFlags {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let bits = u32::deserialize(deserializer)?;
Ok(Self::from_bits_truncate(bits))
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum UserPremiumType {
None = 0,
Active = 1,
Lifetime = 2,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum UserStatus {
Online,
Dnd,
Idle,
Invisible,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
pub id: UserId,
pub username: String,
pub discriminator: String,
pub avatar: Option<String>,
pub avatar_color: Option<i32>,
pub global_name: Option<String>,
pub bot: Option<bool>,
pub system: Option<bool>,
pub flags: UserFlags,
}