use super::poll::RESTAPIPoll;
use crate::models::payloads::{
APIAllowedMentions, APIChannel, APIEmbed, APIExtendedInvite, APIFollowedChannel,
APIGuildForumDefaultReactionEmoji, APIGuildForumTag, APIMessage, APIMessagePin,
APIMessageTopLevelComponent, APIThreadList, APIThreadMember, APIUser, ChannelFlags,
ChannelType, ForumLayoutType, InviteTargetType, MessageFlags, OverwriteType, SortOrderType,
ThreadAutoArchiveDuration, ThreadChannelType, VideoQualityMode,
};
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(untagged)]
pub enum SnowflakeOrIso8601 {
String(String),
Iso8601(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
#[serde(untagged)]
pub enum AttachmentId {
String(String),
Index(u64),
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RESTAPIAttachment {
pub id: AttachmentId,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_secs: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filename: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub waveform: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RESTPutAPIChannelPermissionJSONBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub allow: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deny: Option<Option<String>>,
pub r#type: OverwriteType,
}
pub type RESTPutAPIChannelPermissionResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RESTAPIChannelPatchOverwrite {
pub id: String,
#[serde(flatten)]
pub perms: RESTPutAPIChannelPermissionJSONBody,
}
#[deprecated(note = "Use RESTAPIChannelPatchOverwrite instead")]
pub type APIChannelPatchOverwrite = RESTAPIChannelPatchOverwrite;
pub type RESTGetAPIChannelResult = APIChannel;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPatchAPIChannelJSONBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<ChannelType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position: Option<Option<i32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nsfw: Option<Option<bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limit_per_user: Option<Option<u64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bitrate: Option<Option<u32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_limit: Option<Option<u16>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub permission_overwrites: Option<Option<Vec<RESTAPIChannelPatchOverwrite>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_id: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rtc_region: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub video_quality_mode: Option<Option<VideoQualityMode>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub archived: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_archive_duration: Option<ThreadAutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locked: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_auto_archive_duration: Option<ThreadAutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<ChannelFlags>,
#[serde(skip_serializing_if = "Option::is_none")]
pub available_tags: Option<Vec<APIGuildForumTag>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invitable: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_reaction_emoji: Option<APIGuildForumDefaultReactionEmoji>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_thread_rate_limit_per_user: Option<Option<u64>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_sort_order: Option<Option<SortOrderType>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_forum_layout: Option<ForumLayoutType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub applied_tags: Option<Vec<String>>,
}
pub type RESTPatchAPIChannelResult = APIChannel;
pub type RESTDeleteAPIChannelResult = APIChannel;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTGetAPIChannelMessagesQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub around: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u16>,
}
pub type RESTGetAPIChannelMessagesResult = Vec<APIMessage>;
pub type RESTGetAPIChannelMessageResult = APIMessage;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTAPIMessageReference {
#[serde(skip_serializing_if = "Option::is_none")]
pub channel_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub guild_id: Option<String>,
pub message_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub fail_if_not_exists: Option<bool>,
}
#[deprecated(note = "Use RESTAPIMessageReference instead")]
pub type APIMessageReferenceSend = RESTAPIMessageReference;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPostAPIChannelMessageJSONBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nonce: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tts: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embeds: Option<Vec<APIEmbed>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_mentions: Option<APIAllowedMentions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_reference: Option<RESTAPIMessageReference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub components: Option<Vec<APIMessageTopLevelComponent>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sticker_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attachments: Option<Vec<RESTAPIAttachment>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<MessageFlags>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enforce_nonce: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub poll: Option<RESTAPIPoll>,
}
pub type RESTPostAPIChannelMessageFormDataBody = Value;
pub type RESTPostAPIChannelMessageResult = APIMessage;
pub type RESTPostAPIChannelMessageCrosspostResult = APIMessage;
pub type RESTPutAPIChannelMessageReactionResult = ();
pub type RESTDeleteAPIChannelMessageOwnReactionResult = ();
#[deprecated(note = "Use RESTDeleteAPIChannelMessageOwnReactionResult instead")]
pub type RESTDeleteAPIChannelMessageOwnReaction = RESTDeleteAPIChannelMessageOwnReactionResult;
pub type RESTDeleteAPIChannelMessageUserReactionResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTGetAPIChannelMessageReactionUsersQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<ReactionType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u16>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum ReactionType {
Normal = 0,
Super = 1,
}
pub type RESTGetAPIChannelMessageReactionUsersResult = Vec<APIUser>;
pub type RESTDeleteAPIChannelAllMessageReactionsResult = ();
pub type RESTDeleteAPIChannelMessageReactionResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPatchAPIChannelMessageJSONBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embeds: Option<Option<Vec<APIEmbed>>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flags: Option<Option<MessageFlags>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allowed_mentions: Option<Option<APIAllowedMentions>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attachments: Option<Vec<RESTAPIAttachment>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub components: Option<Option<Vec<APIMessageTopLevelComponent>>>,
}
pub type RESTPatchAPIChannelMessageFormDataBody = Value;
pub type RESTPatchAPIChannelMessageResult = APIMessage;
pub type RESTDeleteAPIChannelMessageResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct RESTPostAPIChannelMessagesBulkDeleteJSONBody {
pub messages: Vec<String>,
}
pub type RESTPostAPIChannelMessagesBulkDeleteResult = ();
pub type RESTGetAPIChannelInvitesResult = Vec<APIExtendedInvite>;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPostAPIChannelInviteJSONBody {
#[serde(skip_serializing_if = "Option::is_none")]
pub max_age: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_uses: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub temporary: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub unique: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_type: Option<InviteTargetType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub target_application_id: Option<String>,
}
pub type RESTPostAPIChannelInviteResult = APIExtendedInvite;
pub type RESTDeleteAPIChannelPermissionResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct RESTPostAPIChannelFollowersJSONBody {
pub webhook_channel_id: String,
}
pub type RESTPostAPIChannelFollowersResult = APIFollowedChannel;
pub type RESTPostAPIChannelTypingResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTGetAPIChannelMessagesPinsQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u16>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTGetAPIChannelMessagesPinsResult {
pub items: Vec<APIMessagePin>,
pub has_more: bool,
}
pub type RESTPutAPIChannelMessagesPinResult = ();
pub type RESTDeleteAPIChannelMessagesPinResult = ();
#[deprecated]
pub type RESTGetAPIChannelPinsResult = Vec<APIMessage>;
#[deprecated]
pub type RESTPutAPIChannelPinResult = ();
#[deprecated]
pub type RESTDeleteAPIChannelPinResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPutAPIChannelRecipientJSONBody {
pub access_token: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub nick: Option<String>,
}
pub type RESTPutAPIChannelRecipientResult = Value;
pub type RESTDeleteAPIChannelRecipientResult = Value;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPostAPIChannelMessagesThreadsJSONBody {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_archive_duration: Option<ThreadAutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limit_per_user: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RESTPostAPIGuildForumThreadsJSONBody {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_archive_duration: Option<ThreadAutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limit_per_user: Option<u64>,
pub message: RESTPostAPIChannelMessageJSONBody,
#[serde(skip_serializing_if = "Option::is_none")]
pub applied_tags: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RESTPostAPIGuildForumThreadsFormDataBody {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_archive_duration: Option<ThreadAutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limit_per_user: Option<u64>,
pub message: String,
}
pub type RESTPostAPIChannelMessagesThreadsResult = APIChannel;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub struct RESTPostAPIChannelThreadsJSONBody {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_archive_duration: Option<ThreadAutoArchiveDuration>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rate_limit_per_user: Option<u64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#type: Option<ThreadChannelType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub invitable: Option<bool>,
}
pub type RESTPostAPIChannelThreadsResult = APIChannel;
pub type RESTPutAPIChannelThreadMembersResult = ();
pub type RESTDeleteAPIChannelThreadMembersResult = ();
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTGetAPIChannelThreadMemberQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub with_member: Option<bool>,
}
pub type RESTGetAPIChannelThreadMemberResult = APIThreadMember;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTGetAPIChannelThreadMembersQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub with_member: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u16>,
}
pub type RESTGetAPIChannelThreadMembersResult = Vec<APIThreadMember>;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
pub struct RESTGetAPIChannelThreadsArchivedQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub before: Option<SnowflakeOrIso8601>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<u16>,
}
pub type RESTGetAPIChannelThreadsArchivedPublicResult = RESTGetAPIChannelUsersThreadsArchivedResult;
pub type RESTGetAPIChannelThreadsArchivedPrivateResult =
RESTGetAPIChannelUsersThreadsArchivedResult;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct RESTGetAPIChannelUsersThreadsArchivedResult {
#[serde(flatten)]
pub list: APIThreadList,
pub has_more: bool,
}