use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use super::id::{ChannelId, GuildId, MessageId, UserId};
use super::permissions::Permissions;
use super::user::User;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u16)]
pub enum ChannelType {
Text = 0,
Voice = 2,
GroupDm = 3,
Category = 4,
Link = 998,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum OverwriteType {
Role = 0,
Member = 1,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PermissionOverwrite {
pub id: String,
#[serde(rename = "type")]
pub kind: OverwriteType,
pub allow: Permissions,
pub deny: Permissions,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Channel {
pub id: ChannelId,
pub name: Option<String>,
#[serde(rename = "type")]
pub kind: ChannelType,
pub guild_id: Option<GuildId>,
pub topic: Option<String>,
pub nsfw: Option<bool>,
pub bitrate: Option<i32>,
pub user_limit: Option<i32>,
pub rate_limit_per_user: Option<i32>,
pub position: Option<i32>,
pub parent_id: Option<ChannelId>,
pub last_message_id: Option<MessageId>,
pub last_pin_timestamp: Option<String>,
pub owner_id: Option<UserId>,
pub icon: Option<String>,
pub recipients: Option<Vec<User>>,
pub permission_overwrites: Option<Vec<PermissionOverwrite>>,
}