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 SendMessagePayload {
#[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 EditUserPayload {
#[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 ChangeUsernamePayload {
pub username: String,
pub password: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct SendFriendRequestPayload {
pub username: String,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditChannelPayload {
#[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 SetRolePermissionPayload {
pub permissions: Override,
}
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum SetDefaultPermissionPayload {
Value {
permissions: Permission,
},
Field {
permissions: Override,
},
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct FetchMessagesPayload {
#[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 SearchForMessagesPayload {
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 EditMessagePayload {
#[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 BulkDeleteMessagesPayload {
pub ids: Vec<String>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct RemoveReactionToMessagePayload {
#[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 CreateGroupPayload {
name: String,
description: Option<String>,
users: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
nsfw: Option<bool>,
}
#[derive(Serialize, Debug, Clone)]
pub struct CreateBotPayload {
name: String,
}
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum InviteBotPayload {
Server {
server: String,
},
Group {
group: String,
},
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditBotPayload {
#[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 CreateServerPayload {
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 EditServerPayload {
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 CreateChannelPayload {
#[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 CreateEmojiPayload {
pub name: String,
pub parent: EmojiParent,
pub nsfw: bool,
}
#[derive(Serialize, Debug, Clone)]
pub struct FetchSettingsPayload {
pub keys: Vec<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct PushSubscribePayload {
pub endpoint: String,
pub p256dh: String,
pub auth: String,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateRolePayload {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub rank: Option<i64>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditRolePayload {
#[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 SetServerRolePermissionPayload {
pub permissions: Override,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct SetDefaultRolePermissionPayload {
pub permissions: Override,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct FetchMembersPayload {
#[serde(skip_serializing_if = "if_false")]
pub exclude_offline: bool,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct EditMemberPayload {
#[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 BanUserPayload {
#[serde(skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Serialize, Debug, Clone, Default)]
pub struct CreateAccountPayload {
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 ResendVerificationPayload {
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub captcha: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct ConfirmAccountDeletionPayload {
pub token: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct ChangePasswordPayload {
pub password: String,
pub current_password: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct ChangeEmailPayload {
pub email: String,
pub current_password: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct SendPasswordResetPayload {
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub captcha: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
pub struct PasswordResetPayload {
pub token: String,
pub password: String,
#[serde(default)]
pub remove_sessions: bool,
}
#[derive(Serialize, Debug, Clone)]
pub struct CompleteOnboardingPayload {
pub username: String,
}
#[derive(Serialize, Debug, Clone)]
pub struct EditReportPayload {
#[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 ReportContentPayload {
pub content: ReportedContent,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_context: Option<String>,
}
#[derive(Serialize, Debug, Clone)]
#[serde(untagged)]
pub enum LoginPayload {
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 DeleteAllSessionsPayload {
#[serde(skip_serializing_if = "if_false")]
pub revoke_self: bool,
}
#[derive(Serialize, Debug, Clone)]
pub struct EditSessionPayload {
pub friendly_name: String,
}
pub type CreateMFATicketPayload = MFAData;
pub type EnableTOTP2FAPayload = MFAData;