use iso8601_timestamp::Timestamp;
use serde::Serialize;
use crate::{
bot::FieldsBot,
channel::{ChannelType, FieldsChannel},
embed::SendableEmbed,
emoji::EmojiParent,
member::FieldsMember,
message::{Interactions, Masquerade, MessageSort, Reply},
mfa::MFAData,
permission::{Override, Permission},
report::{ReportStatus, ReportedContent},
server::{Category, FieldsRole, FieldsServer, SystemMessageChannels},
user::{FieldsUser, PartialUserProfile, UserStatus},
};
#[allow(dead_code)]
fn if_false(t: &bool) -> bool {
!t
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct SendMessageData {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub attachments: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replies: Option<Vec<Reply>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embeds: Option<Vec<SendableEmbed>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub masquerade: Option<Masquerade>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interactions: Option<Interactions>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditUserData {
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<UserStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub profile: Option<PartialUserProfile>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<FieldsUser>>,
}
#[derive(Serialize, Debug, Clone)]
pub struct ChangeUsernameData {
pub username: String,
pub password: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct SendFriendRequestData {
pub username: String,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditChannelData {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub owner: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub icon: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nsfw: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<FieldsChannel>>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct SetRolePermissionData {
pub permissions: Override,
}
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum SetDefaultPermissionData {
Value {
permissions: Permission,
},
Field {
permissions: Override,
},
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct FetchMessagesData {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[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 sort: Option<MessageSort>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nearby: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_users: Option<bool>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct SearchForMessagesData {
pub query: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[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 sort: Option<MessageSort>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_users: Option<bool>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditMessageData {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub embeds: Option<Vec<SendableEmbed>>,
}
#[derive(Serialize, Debug, Clone)]
pub struct BulkDeleteMessagesData {
pub ids: Vec<String>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct RemoveReactionToMessageData {
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove_all: Option<bool>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateGroupData {
name: String,
description: Option<String>,
users: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
nsfw: Option<bool>,
}
#[derive(Serialize, Debug, Clone)]
pub struct CreateBotData {
name: String,
}
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum InviteBotData {
Server {
server: String,
},
Group {
group: String,
},
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditBotData {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub public: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub analytics: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interactions_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<FieldsBot>>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateServerData {
pub name: String,
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nsfw: Option<bool>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditServerData {
pub name: Option<String>,
pub description: Option<String>,
pub icon: Option<String>,
pub banner: Option<String>,
pub categories: Option<Vec<Category>>,
pub system_messages: Option<SystemMessageChannels>,
pub nsfw: Option<bool>,
pub discoverable: Option<bool>,
pub analytics: Option<bool>,
pub remove: Option<Vec<FieldsServer>>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateChannelData {
#[serde(rename = "type", default = "ChannelType::default")]
pub channel_type: ChannelType,
pub name: String,
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nsfw: Option<bool>,
}
#[derive(Serialize, Debug, Clone)]
pub struct CreateEmojiData {
pub name: String,
pub parent: EmojiParent,
pub nsfw: bool,
}
#[derive(Serialize, Debug, Clone)]
pub struct FetchSettingsData {
pub keys: Vec<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct PushSubscribeData {
pub endpoint: String,
pub p256dh: String,
pub auth: String,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateRoleData {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub rank: Option<i64>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditRoleData {
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub colour: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hoist: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rank: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<FieldsRole>>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct SetServerRolePermissionData {
pub permissions: Override,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct SetDefaultRolePermissionData {
pub permissions: Override,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct FetchMembersData {
#[serde(skip_serializing_if = "if_false")]
pub exclude_offline: bool,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditMemberData {
#[serde(skip_serializing_if = "Option::is_none")]
pub nickname: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub roles: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout: Option<Timestamp>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove: Option<Vec<FieldsMember>>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct BanUserData {
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateAccountData {
pub email: String,
pub password: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub invite: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub captcha: Option<String>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct ResendVerificationData {
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub captcha: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct ConfirmAccountDeletionData {
pub token: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct ChangePasswordData {
pub password: String,
pub current_password: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct ChangeEmailData {
pub email: String,
pub current_password: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct SendPasswordResetData {
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub captcha: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct PasswordResetData {
pub token: String,
pub password: String,
#[serde(default)]
pub remove_sessions: bool,
}
#[derive(Serialize, Debug, Clone)]
pub struct CompleteOnboardingData {
pub username: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct EditReportData {
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<ReportStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct ReportContentData {
pub content: ReportedContent,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_context: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct CreateStrikeData {
pub user_id: String,
pub reason: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct EditAccountStrikeData {
pub reason: String,
}
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum LoginData {
Email {
email: String,
password: String,
#[serde(skip_serializing_if = "Option::is_none")]
friendly_name: Option<String>,
},
MFA {
mfa_ticket: String,
#[serde(skip_serializing_if = "Option::is_none")]
mfa_response: Option<MFAData>,
#[serde(skip_serializing_if = "Option::is_none")]
friendly_name: Option<String>,
},
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct DeleteAllSessionsData {
#[serde(skip_serializing_if = "if_false")]
pub revoke_self: bool,
}
#[derive(Serialize, Debug, Clone)]
pub struct EditSessionData {
pub friendly_name: String,
}
pub type CreateMFATicketData = MFAData;
pub type EnableTOTP2FAData = MFAData;
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateWebhookData {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub avatar: Option<String>,
}