use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use super::id::{ChannelId, GuildId, RoleId, UserId};
use super::permissions::Permissions;
use super::user::User;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum VerificationLevel {
#[default]
None = 0,
Low = 1,
Medium = 2,
High = 3,
VeryHigh = 4,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum DefaultMessageNotifications {
#[default]
AllMessages = 0,
OnlyMentions = 1,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum ExplicitContentFilter {
#[default]
Disabled = 0,
MembersWithoutRoles = 1,
AllMembers = 2,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum MfaLevel {
#[default]
None = 0,
Elevated = 1,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum NsfwLevel {
#[default]
Default = 0,
Explicit = 1,
Safe = 2,
AgeRestricted = 3,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Guild {
pub id: GuildId,
#[serde(default)]
pub name: String,
pub owner_id: Option<UserId>,
pub icon: Option<String>,
pub banner: Option<String>,
pub splash: Option<String>,
pub afk_channel_id: Option<ChannelId>,
#[serde(default)]
pub afk_timeout: i32,
#[serde(default)]
pub verification_level: VerificationLevel,
#[serde(default)]
pub default_message_notifications: DefaultMessageNotifications,
#[serde(default)]
pub explicit_content_filter: ExplicitContentFilter,
#[serde(default)]
pub mfa_level: MfaLevel,
#[serde(default)]
pub nsfw_level: NsfwLevel,
pub rules_channel_id: Option<ChannelId>,
pub system_channel_id: Option<ChannelId>,
#[serde(default)]
pub system_channel_flags: i32,
pub vanity_url_code: Option<String>,
#[serde(default)]
pub features: Vec<String>,
#[serde(default)]
pub permissions: Option<Permissions>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Role {
pub id: RoleId,
#[serde(default)]
pub name: String,
#[serde(default)]
pub color: i32,
#[serde(default)]
pub hoist: bool,
#[serde(default)]
pub position: i32,
#[serde(default)]
pub permissions: Permissions,
#[serde(default)]
pub mentionable: bool,
pub unicode_emoji: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Member {
pub user: Option<User>,
#[serde(default)]
pub roles: Vec<RoleId>,
#[serde(default)]
pub joined_at: String,
pub nick: Option<String>,
pub avatar: Option<String>,
pub banner: Option<String>,
#[serde(default)]
pub mute: bool,
#[serde(default)]
pub deaf: bool,
pub communication_disabled_until: Option<String>,
}