use super::{ChannelSubType, ChannelType, PrivateType, SpeakPermission};
use crate::models::Snowflake;
use crate::models::serde_helpers::is_default;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct Channel {
#[serde(default)]
pub id: Snowflake,
#[serde(default)]
pub guild_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub name: String,
#[serde(default, rename = "type", skip_serializing_if = "is_default")]
pub channel_type: ChannelType,
#[serde(default, skip_serializing_if = "is_default")]
pub sub_type: ChannelSubType,
#[serde(default, skip_serializing_if = "is_default")]
pub position: i64,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub parent_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub owner_id: Snowflake,
#[serde(default, skip_serializing_if = "is_default")]
pub private_type: PrivateType,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub private_user_ids: Vec<String>,
#[serde(default, skip_serializing_if = "is_default")]
pub speak_permission: SpeakPermission,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub application_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub permissions: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub op_user_id: Snowflake,
}