use serde::{Deserialize, Serialize};
use ::chrono::{DateTime, Utc};
use serde_with::*;
use super::Snowflake;
#[serde_as]
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct User {
#[serde_as(as = "DisplayFromStr")]
pub id: Snowflake,
pub username: String,
pub discriminator: String,
pub avatar: Option<String>,
pub bot: Option<bool>,
pub system: Option<bool>,
pub mfa_enabled: Option<bool>,
pub locale: Option<String>,
pub verified: Option<bool>,
pub email: Option<String>,
pub flags: Option<i32>,
#[serde_as(as = "Option<DisplayFromStr>")]
#[serde(default)]
pub premium_type: Option<i8>,
pub public_flags: Option<i32>,
}
impl PartialEq for User {
fn eq(&self, other: &Self) -> bool {
self.id == other.id
}
}
#[serde_as]
#[skip_serializing_none]
#[derive(Clone, Serialize, Deserialize, Debug)]
pub struct Member {
pub user: User,
pub nick: Option<String>,
#[serde_as(as = "Vec<DisplayFromStr>")]
pub roles: Vec<Snowflake>,
#[serde_as(as = "DisplayFromStr")]
pub joined_at: DateTime<Utc>,
#[serde_as(as = "Option<DisplayFromStr>")]
#[serde(default)]
pub premium_since: Option<DateTime<Utc>>,
pub deaf: bool,
pub mute: bool,
pub pending: bool,
pub permissions: Option<String>,
}
impl From<Member> for User {
fn from(member: Member) -> User {
member.user
}
}
impl PartialEq for Member {
fn eq(&self, other: &Self) -> bool {
self.user.id == other.user.id
}
}