use crate::models::Snowflake;
use crate::models::serde_helpers::is_zero_u32;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct GuildRoles {
#[serde(default)]
pub guild_id: Snowflake,
#[serde(default)]
pub roles: Vec<GuildRole>,
#[serde(default, rename = "role_num_limit")]
pub num_limit: String,
}
pub const DEFAULT_ROLE_COLOR: u32 = 4_278_245_297;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct UpdateRoleInfo {
pub name: String,
pub color: u32,
pub hoist: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct GuildRole {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub id: Snowflake,
#[serde(default)]
pub name: String,
#[serde(default)]
pub color: u32,
#[serde(default)]
pub hoist: u32,
#[serde(default, rename = "number", skip_serializing_if = "is_zero_u32")]
pub member_count: u32,
#[serde(default, skip_serializing_if = "is_zero_u32")]
pub member_limit: u32,
}
impl GuildRole {
fn default_color() -> u32 {
DEFAULT_ROLE_COLOR
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct UpdateRoleFilter {
pub name: u32,
pub color: u32,
pub hoist: u32,
}
impl Default for UpdateRoleFilter {
fn default() -> Self {
Self {
name: 1,
color: 1,
hoist: 1,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct UpdateRole {
pub guild_id: String,
pub filter: UpdateRoleFilter,
#[serde(rename = "info")]
pub update: GuildRole,
}
impl UpdateRole {
pub fn new(guild_id: impl Into<String>, mut role: GuildRole) -> Self {
if role.color == 0 {
role.color = GuildRole::default_color();
}
Self {
guild_id: guild_id.into(),
filter: UpdateRoleFilter::default(),
update: role,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct UpdateResult {
#[serde(default)]
pub role_id: Snowflake,
#[serde(default)]
pub guild_id: Snowflake,
#[serde(default)]
pub role: Option<GuildRole>,
}