use super::{Channel, File}; use revolt_permissions::OverrideField; use std::collections::HashMap; #[cfg(feature = "validator")] use validator::Validate; auto_derived_partial!( /// Server pub struct Server { /// Unique Id #[cfg_attr(feature = "serde", serde(rename = "_id"))] pub id: String, /// User id of the owner pub owner: String, /// Name of the server pub name: String, /// Description for the server #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub description: Option, /// Channels within this server // TODO: investigate if this is redundant and can be removed pub channels: Vec, /// Categories for this server #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub categories: Option>, /// Configuration for sending system event messages #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub system_messages: Option, /// Roles for this server #[cfg_attr( feature = "serde", serde( default = "HashMap::::new", skip_serializing_if = "HashMap::::is_empty" ) )] pub roles: HashMap, /// Default set of server and channel permissions pub default_permissions: i64, /// Icon attachment #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub icon: Option, /// Banner attachment #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub banner: Option, /// Bitfield of server flags #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_zero_u32", default) )] pub flags: u32, /// Whether this server is flagged as not safe for work #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] pub nsfw: bool, /// Whether to enable analytics #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] pub analytics: bool, /// Whether this server should be publicly discoverable #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] pub discoverable: bool, }, "PartialServer" ); auto_derived_partial!( /// Role pub struct Role { /// Role name pub name: String, /// Permissions available to this role pub permissions: OverrideField, /// Colour used for this role /// /// This can be any valid CSS colour #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub colour: Option, /// Whether this role should be shown separately on the member sidebar #[cfg_attr( feature = "serde", serde(skip_serializing_if = "crate::if_false", default) )] pub hoist: bool, /// Ranking of this role #[cfg_attr(feature = "serde", serde(default))] pub rank: i64, }, "PartialRole" ); auto_derived!( /// Optional fields on server object pub enum FieldsServer { Description, Categories, SystemMessages, Icon, Banner, } /// Optional fields on server object pub enum FieldsRole { Colour, } /// Channel category pub struct Category { /// Unique ID for this category pub id: String, /// Title for this category pub title: String, /// Channels in this category pub channels: Vec, } /// System message channel assignments pub struct SystemMessageChannels { /// ID of channel to send user join messages in #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub user_joined: Option, /// ID of channel to send user left messages in #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub user_left: Option, /// ID of channel to send user kicked messages in #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub user_kicked: Option, /// ID of channel to send user banned messages in #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub user_banned: Option, } /// Information about new server to create #[derive(Default)] #[cfg_attr(feature = "validator", derive(Validate))] pub struct DataCreateServer { /// Server name #[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))] pub name: String, /// Server description #[cfg_attr(feature = "validator", validate(length(min = 0, max = 1024)))] pub description: Option, /// Whether this server is age-restricted #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))] pub nsfw: Option, } /// Information returned when creating server pub struct CreateServerLegacyResponse { /// Server object pub server: Server, /// Default channels pub channels: Vec, } );