use chrono::{DateTime, FixedOffset};
use crate::{
Snowflake,
user::User,
};
#[derive(Clone, Debug, Deserialize, Serialize, Default)]
pub struct GuildMember {
#[serde(default)]
pub guild_id: Option<Snowflake>,
pub user: Option<User>,
#[serde(default, rename = "nick")]
pub nickname: Option<String>,
pub joined_at: Option<DateTime<FixedOffset>>,
#[serde(default)]
pub mute: bool,
#[serde(default)]
pub deaf: bool,
pub roles: Vec<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default)]
pub struct AddMemberOptions {
#[serde(skip_serializing_if = "Option::is_none")]
access_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
nick: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
roles: Option<Vec<Snowflake>>,
#[serde(skip_serializing_if = "Option::is_none")]
mute: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
deaf: Option<bool>,
}
impl AddMemberOptions {
pub fn access_token(mut self, token: String) -> Self {
self.access_token = Some(token);
self
}
pub fn nickname(mut self, name: &str) -> Self {
self.nick = Some(name.to_string());
self
}
pub fn roles(mut self, rls: Vec<Snowflake>) -> Self {
self.roles = Some(rls);
self
}
pub fn muted(mut self, mute: bool) -> Self {
self.mute = Some(mute);
self
}
pub fn deaf(mut self, opt: bool) -> Self {
self.deaf = Some(opt);
self
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Default)]
pub struct ModifyMemberOptions {
#[serde(skip_serializing_if = "Option::is_none")]
nick: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
roles: Option<Vec<Snowflake>>,
#[serde(skip_serializing_if = "Option::is_none")]
mute: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
deaf: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
channel_id: Option<Snowflake>,
}
impl ModifyMemberOptions {
pub fn nick(mut self, name: &str) -> Self {
self.nick = Some(name.to_string());
self
}
pub fn roles(mut self, rls: Vec<Snowflake>) -> Self {
self.roles = Some(rls);
self
}
pub fn muted(mut self, opt: bool) -> Self {
self.mute = Some(opt);
self
}
pub fn deaf(mut self, opt: bool) -> Self {
self.deaf = Some(opt);
self
}
pub fn channel_id(mut self, id: Snowflake) -> Self {
self.channel_id = Some(id);
self
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Default)]
pub struct ListMembersOptions {
#[serde(skip_serializing_if = "Option::is_none")]
limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
after: Option<Snowflake>,
}
impl ListMembersOptions {
pub fn limit(mut self, num: i32) -> Self {
self.limit = Some(num);
self
}
pub fn after(mut self, id: Snowflake) -> Self {
self.after = Some(id);
self
}
}
#[derive(Clone, Debug, Deserialize, Serialize, Default)]
pub struct GuildMemberRemove {
pub guild_id: Snowflake,
pub user: User,
}
#[derive(Clone, Debug, Deserialize, Serialize, Default)]
pub struct GuildMembersChunk {
pub guild_id: Snowflake,
pub members: Vec<GuildMember>
}