use super::File; use revolt_permissions::OverrideField; use std::collections::HashMap; auto_derived!( /// Channel pub enum Channel { /// Personal "Saved Notes" channel which allows users to save messages SavedMessages { /// Unique Id #[cfg_attr(feature = "serde", serde(rename = "_id"))] id: String, /// Id of the user this channel belongs to user: String, }, /// Direct message channel between two users DirectMessage { /// Unique Id #[cfg_attr(feature = "serde", serde(rename = "_id"))] id: String, /// Whether this direct message channel is currently open on both sides active: bool, /// 2-tuple of user ids participating in direct message recipients: Vec, /// Id of the last message sent in this channel #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] last_message_id: Option, }, /// Group channel between 1 or more participants Group { /// Unique Id #[cfg_attr(feature = "serde", serde(rename = "_id"))] id: String, /// Display name of the channel name: String, /// User id of the owner of the group owner: String, /// Channel description #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] description: Option, /// Array of user ids participating in channel recipients: Vec, /// Custom icon attachment #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] icon: Option, /// Id of the last message sent in this channel #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] last_message_id: Option, /// Permissions assigned to members of this group /// (does not apply to the owner of the group) #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] permissions: Option, /// Whether this group is marked as not safe for work #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] nsfw: bool, }, /// Text channel belonging to a server TextChannel { /// Unique Id #[cfg_attr(feature = "serde", serde(rename = "_id"))] id: String, /// Id of the server this channel belongs to server: String, /// Display name of the channel name: String, /// Channel description #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] description: Option, /// Custom icon attachment #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] icon: Option, /// Id of the last message sent in this channel #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] last_message_id: Option, /// Default permissions assigned to users in this channel #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] default_permissions: Option, /// Permissions assigned based on role to this channel #[cfg_attr( feature = "serde", serde( default = "HashMap::::new", skip_serializing_if = "HashMap::::is_empty" ) )] role_permissions: HashMap, /// Whether this channel is marked as not safe for work #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] nsfw: bool, }, /// Voice channel belonging to a server VoiceChannel { /// Unique Id #[cfg_attr(feature = "serde", serde(rename = "_id"))] id: String, /// Id of the server this channel belongs to server: String, /// Display name of the channel name: String, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] /// Channel description description: Option, /// Custom icon attachment #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] icon: Option, /// Default permissions assigned to users in this channel #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] default_permissions: Option, /// Permissions assigned based on role to this channel #[cfg_attr( feature = "serde", serde( default = "HashMap::::new", skip_serializing_if = "HashMap::::is_empty" ) )] role_permissions: HashMap, /// Whether this channel is marked as not safe for work #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] nsfw: bool, }, } /// Partial representation of a channel #[derive(Default)] pub struct PartialChannel { #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub name: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub owner: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub description: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub icon: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub nsfw: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub active: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub permissions: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub role_permissions: Option>, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub default_permissions: Option, #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub last_message_id: Option, } /// Optional fields on channel object pub enum FieldsChannel { Description, Icon, DefaultPermissions, } /// New webhook information #[cfg_attr(feature = "validator", derive(validator::Validate))] pub struct DataEditChannel { /// Channel name #[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))] pub name: Option, /// Channel description #[cfg_attr(feature = "validator", validate(length(min = 0, max = 1024)))] pub description: Option, /// Group owner pub owner: Option, /// Icon /// /// Provide an Autumn attachment Id. #[cfg_attr(feature = "validator", validate(length(min = 1, max = 128)))] pub icon: Option, /// Whether this channel is age-restricted pub nsfw: Option, /// Whether this channel is archived pub archived: Option, /// Fields to remove from channel #[cfg_attr(feature = "serde", serde(default))] pub remove: Option>, } );