use crate::types::Member;
use crate::types::{Channel, Role};
use bitflags::bitflags;
use serde::ser::SerializeStruct;
#[derive(Deserialize, Clone)]
pub struct Guild {
pub id: u128,
pub owner_id: u128,
pub name: String,
pub icon: Option<String>,
pub channels: Option<Vec<Channel>>,
pub members: Option<Vec<Member>>,
pub roles: Option<Vec<Role>>,
pub flags: GuildFlags,
}
impl Serialize for Guild {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut self_ser = serializer.serialize_struct("Guild", 10)?;
self_ser.serialize_field("id", &self.id)?;
self_ser.serialize_field("id_string", &self.id.to_string())?;
self_ser.serialize_field("owner_id", &self.owner_id)?;
self_ser.serialize_field("owner_id_string", &self.owner_id.to_string())?;
self_ser.serialize_field("name", &self.name)?;
self_ser.serialize_field("channels", &self.channels)?;
self_ser.serialize_field("members", &self.members)?;
self_ser.serialize_field("roles", &self.roles)?;
self_ser.serialize_field("flags", &self.flags)?;
self_ser.serialize_field("icon", &self.icon)?;
self_ser.end()
}
}
bitflags! {
#[derive(Default)]
pub struct GuildFlags: i64 {
const VERIFIED_GUILD = 1 << 0;
const VERIFIED_SCAM = 1 << 1;
}
}
serde_for_bitflags!(GuildFlags);