1use iso8601_timestamp::Timestamp;
2use serde::Serialize;
3
4use crate::{
5    bot::FieldsBot,
6    channel::{ChannelType, FieldsChannel},
7    embed::SendableEmbed,
8    emoji::EmojiParent,
9    member::FieldsMember,
10    message::{Interactions, Masquerade, MessageSort, Reply},
11    mfa::MFAData,
12    permission::{Override, Permission},
13    report::{ReportStatus, ReportedContent},
14    server::{Category, FieldsRole, FieldsServer, SystemMessageChannels},
15    user::{FieldsUser, PartialUserProfile, UserStatus},
16};
17
18#[allow(dead_code)]
19fn if_false(t: &bool) -> bool {
20    !t
21}
22
23#[derive(Serialize, Debug, Clone, Default)]
24pub struct SendMessageData {
25    #[serde(skip_serializing_if = "Option::is_none")]
27    pub content: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none")]
30    pub attachments: Option<Vec<String>>,
31    #[serde(skip_serializing_if = "Option::is_none")]
33    pub replies: Option<Vec<Reply>>,
34    #[serde(skip_serializing_if = "Option::is_none")]
38    pub embeds: Option<Vec<SendableEmbed>>,
39    #[serde(skip_serializing_if = "Option::is_none")]
41    pub masquerade: Option<Masquerade>,
42    #[serde(skip_serializing_if = "Option::is_none")]
44    pub interactions: Option<Interactions>,
45}
46
47#[derive(Serialize, Debug, Clone, Default)]
49pub struct EditUserData {
50    #[serde(skip_serializing_if = "Option::is_none")]
52    pub status: Option<UserStatus>,
53    #[serde(skip_serializing_if = "Option::is_none")]
57    pub profile: Option<PartialUserProfile>,
58    #[serde(skip_serializing_if = "Option::is_none")]
60    pub avatar: Option<String>,
61    #[serde(skip_serializing_if = "Option::is_none")]
63    pub remove: Option<Vec<FieldsUser>>,
64}
65
66#[derive(Serialize, Debug, Clone)]
68pub struct ChangeUsernameData {
69    pub username: String,
71    pub password: String,
73}
74
75#[derive(Serialize, Debug, Clone)]
77pub struct SendFriendRequestData {
78    pub username: String,
80}
81
82#[derive(Serialize, Debug, Clone, Default)]
84pub struct EditChannelData {
85    #[serde(skip_serializing_if = "Option::is_none")]
87    pub name: Option<String>,
88    #[serde(skip_serializing_if = "Option::is_none")]
90    pub description: Option<String>,
91    #[serde(skip_serializing_if = "Option::is_none")]
93    pub owner: Option<String>,
94    #[serde(skip_serializing_if = "Option::is_none")]
96    pub icon: Option<String>,
97    #[serde(skip_serializing_if = "Option::is_none")]
99    pub nsfw: Option<bool>,
100    #[serde(skip_serializing_if = "Option::is_none")]
102    pub remove: Option<Vec<FieldsChannel>>,
103}
104
105#[derive(Serialize, Debug, Clone, Default)]
107pub struct SetRolePermissionData {
108    pub permissions: Override,
110}
111
112#[derive(Serialize, Debug, Clone)]
114#[serde(untagged)]
115pub enum SetDefaultPermissionData {
116    Value {
117        permissions: Permission,
121    },
122    Field {
123        permissions: Override,
128    },
129}
130
131#[derive(Serialize, Debug, Clone, Default)]
133pub struct FetchMessagesData {
134    #[serde(skip_serializing_if = "Option::is_none")]
138    pub limit: Option<i64>,
139    #[serde(skip_serializing_if = "Option::is_none")]
141    pub before: Option<String>,
142    #[serde(skip_serializing_if = "Option::is_none")]
144    pub after: Option<String>,
145    #[serde(skip_serializing_if = "Option::is_none")]
147    pub sort: Option<MessageSort>,
148    #[serde(skip_serializing_if = "Option::is_none")]
154    pub nearby: Option<String>,
155    #[serde(skip_serializing_if = "Option::is_none")]
157    pub include_users: Option<bool>,
158}
159
160#[derive(Serialize, Debug, Clone, Default)]
162pub struct SearchForMessagesData {
163    pub query: String,
167
168    #[serde(skip_serializing_if = "Option::is_none")]
170    pub limit: Option<i64>,
171    #[serde(skip_serializing_if = "Option::is_none")]
173    pub before: Option<String>,
174    #[serde(skip_serializing_if = "Option::is_none")]
176    pub after: Option<String>,
177    #[serde(skip_serializing_if = "Option::is_none")]
181    pub sort: Option<MessageSort>,
182    #[serde(skip_serializing_if = "Option::is_none")]
184    pub include_users: Option<bool>,
185}
186
187#[derive(Serialize, Debug, Clone, Default)]
189pub struct EditMessageData {
190    #[serde(skip_serializing_if = "Option::is_none")]
192    pub content: Option<String>,
193    #[serde(skip_serializing_if = "Option::is_none")]
195    pub embeds: Option<Vec<SendableEmbed>>,
196}
197
198#[derive(Serialize, Debug, Clone)]
200pub struct BulkDeleteMessagesData {
201    pub ids: Vec<String>,
203}
204
205#[derive(Serialize, Debug, Clone, Default)]
207pub struct RemoveReactionToMessageData {
208    #[serde(skip_serializing_if = "Option::is_none")]
210    pub user_id: Option<String>,
211    #[serde(skip_serializing_if = "Option::is_none")]
213    pub remove_all: Option<bool>,
214}
215
216#[derive(Serialize, Debug, Clone, Default)]
218pub struct CreateGroupData {
219    name: String,
221    description: Option<String>,
223    users: Vec<String>,
227    #[serde(skip_serializing_if = "Option::is_none")]
229    nsfw: Option<bool>,
230}
231
232#[derive(Serialize, Debug, Clone)]
234pub struct CreateBotData {
235    name: String,
237}
238
239#[derive(Serialize, Debug, Clone)]
241#[serde(untagged)]
242pub enum InviteBotData {
243    Server {
245        server: String,
247    },
248    Group {
250        group: String,
252    },
253}
254
255#[derive(Serialize, Debug, Clone, Default)]
257pub struct EditBotData {
258    #[serde(skip_serializing_if = "Option::is_none")]
260    pub name: Option<String>,
261    #[serde(skip_serializing_if = "Option::is_none")]
263    pub public: Option<bool>,
264    #[serde(skip_serializing_if = "Option::is_none")]
268    pub analytics: Option<bool>,
269    #[serde(skip_serializing_if = "Option::is_none")]
271    pub interactions_url: Option<String>,
272    #[serde(skip_serializing_if = "Option::is_none")]
274    pub remove: Option<Vec<FieldsBot>>,
275}
276
277#[derive(Serialize, Debug, Clone, Default)]
279pub struct CreateServerData {
280    pub name: String,
282    pub description: Option<String>,
284    #[serde(skip_serializing_if = "Option::is_none")]
286    pub nsfw: Option<bool>,
287}
288
289#[derive(Serialize, Debug, Clone, Default)]
291pub struct EditServerData {
292    pub name: Option<String>,
294    pub description: Option<String>,
296
297    pub icon: Option<String>,
299    pub banner: Option<String>,
301
302    pub categories: Option<Vec<Category>>,
304    pub system_messages: Option<SystemMessageChannels>,
306
307    pub nsfw: Option<bool>,
309    pub discoverable: Option<bool>,
311    pub analytics: Option<bool>,
315
316    pub remove: Option<Vec<FieldsServer>>,
318}
319
320#[derive(Serialize, Debug, Clone, Default)]
322pub struct CreateChannelData {
323    #[serde(rename = "type", default = "ChannelType::default")]
325    pub channel_type: ChannelType,
326    pub name: String,
328    pub description: Option<String>,
330    #[serde(skip_serializing_if = "Option::is_none")]
332    pub nsfw: Option<bool>,
333}
334
335#[derive(Serialize, Debug, Clone)]
337pub struct CreateEmojiData {
338    pub name: String,
340    pub parent: EmojiParent,
342    pub nsfw: bool,
344}
345
346#[derive(Serialize, Debug, Clone)]
348pub struct FetchSettingsData {
349    pub keys: Vec<String>,
351}
352
353#[derive(Serialize, Debug, Clone)]
355pub struct PushSubscribeData {
356    pub endpoint: String,
357    pub p256dh: String,
358    pub auth: String,
359}
360
361#[derive(Serialize, Debug, Clone, Default)]
363pub struct CreateRoleData {
364    pub name: String,
366    #[serde(skip_serializing_if = "Option::is_none")]
370    pub rank: Option<i64>,
371}
372
373#[derive(Serialize, Debug, Clone, Default)]
375pub struct EditRoleData {
376    #[serde(skip_serializing_if = "Option::is_none")]
378    pub name: Option<String>,
379    #[serde(skip_serializing_if = "Option::is_none")]
381    pub colour: Option<String>,
382    #[serde(skip_serializing_if = "Option::is_none")]
384    pub hoist: Option<bool>,
385    #[serde(skip_serializing_if = "Option::is_none")]
389    pub rank: Option<i64>,
390    #[serde(skip_serializing_if = "Option::is_none")]
392    pub remove: Option<Vec<FieldsRole>>,
393}
394
395#[derive(Serialize, Debug, Clone, Default)]
397pub struct SetServerRolePermissionData {
398    pub permissions: Override,
400}
401
402#[derive(Serialize, Debug, Clone, Default)]
404pub struct SetDefaultRolePermissionData {
405    pub permissions: Override,
407}
408
409#[derive(Serialize, Debug, Clone, Default)]
411pub struct FetchMembersData {
412    #[serde(skip_serializing_if = "if_false")]
414    pub exclude_offline: bool,
415}
416
417#[derive(Serialize, Debug, Clone, Default)]
419pub struct EditMemberData {
420    #[serde(skip_serializing_if = "Option::is_none")]
422    pub nickname: Option<String>,
423    #[serde(skip_serializing_if = "Option::is_none")]
425    pub avatar: Option<String>,
426    #[serde(skip_serializing_if = "Option::is_none")]
428    pub roles: Option<Vec<String>>,
429    #[serde(skip_serializing_if = "Option::is_none")]
431    pub timeout: Option<Timestamp>,
432    #[serde(skip_serializing_if = "Option::is_none")]
434    pub remove: Option<Vec<FieldsMember>>,
435}
436
437#[derive(Serialize, Debug, Clone, Default)]
439pub struct BanUserData {
440    #[serde(skip_serializing_if = "Option::is_none")]
442    pub reason: Option<String>,
443}
444
445#[derive(Serialize, Debug, Clone, Default)]
447pub struct CreateAccountData {
448    pub email: String,
450    pub password: String,
452    #[serde(skip_serializing_if = "Option::is_none")]
454    pub invite: Option<String>,
455    #[serde(skip_serializing_if = "Option::is_none")]
457    pub captcha: Option<String>,
458}
459
460#[derive(Serialize, Debug, Clone, Default)]
462pub struct ResendVerificationData {
463    pub email: String,
465    #[serde(skip_serializing_if = "Option::is_none")]
467    pub captcha: Option<String>,
468}
469
470#[derive(Serialize, Debug, Clone)]
472pub struct ConfirmAccountDeletionData {
473    pub token: String,
475}
476
477#[derive(Serialize, Debug, Clone)]
479pub struct ChangePasswordData {
480    pub password: String,
482    pub current_password: String,
484}
485
486#[derive(Serialize, Debug, Clone)]
488pub struct ChangeEmailData {
489    pub email: String,
491    pub current_password: String,
493}
494
495#[derive(Serialize, Debug, Clone)]
497pub struct SendPasswordResetData {
498    pub email: String,
500    #[serde(skip_serializing_if = "Option::is_none")]
502    pub captcha: Option<String>,
503}
504
505#[derive(Serialize, Debug, Clone)]
507pub struct PasswordResetData {
508    pub token: String,
510    pub password: String,
512    #[serde(default)]
514    pub remove_sessions: bool,
515}
516
517#[derive(Serialize, Debug, Clone)]
519pub struct CompleteOnboardingData {
520    pub username: String,
522}
523
524#[derive(Serialize, Debug, Clone)]
526pub struct EditReportData {
527    #[serde(skip_serializing_if = "Option::is_none")]
529    pub status: Option<ReportStatus>,
530    #[serde(skip_serializing_if = "Option::is_none")]
532    pub notes: Option<String>,
533}
534
535#[derive(Serialize, Debug, Clone)]
537pub struct ReportContentData {
538    pub content: ReportedContent,
540    #[serde(skip_serializing_if = "Option::is_none")]
542    pub additional_context: Option<String>,
543}
544
545#[derive(Serialize, Debug, Clone)]
547pub struct CreateStrikeData {
548    pub user_id: String,
550
551    pub reason: String,
553}
554
555#[derive(Serialize, Debug, Clone)]
557pub struct EditAccountStrikeData {
558    pub reason: String,
560}
561
562#[derive(Serialize, Debug, Clone)]
564#[serde(untagged)]
565pub enum LoginData {
566    Email {
567        email: String,
569        password: String,
571        #[serde(skip_serializing_if = "Option::is_none")]
573        friendly_name: Option<String>,
574    },
575    MFA {
576        mfa_ticket: String,
580        #[serde(skip_serializing_if = "Option::is_none")]
584        mfa_response: Option<MFAData>,
585        #[serde(skip_serializing_if = "Option::is_none")]
587        friendly_name: Option<String>,
588    },
589}
590
591#[derive(Serialize, Debug, Clone, Default)]
593pub struct DeleteAllSessionsData {
594    #[serde(skip_serializing_if = "if_false")]
595    pub revoke_self: bool,
596}
597
598#[derive(Serialize, Debug, Clone)]
600pub struct EditSessionData {
601    pub friendly_name: String,
603}
604
605pub type CreateMFATicketData = MFAData;
607
608pub type EnableTOTP2FAData = MFAData;
610
611#[derive(Serialize, Debug, Clone, Default)]
613pub struct CreateWebhookData {
614    pub name: String,
616    #[serde(skip_serializing_if = "Option::is_none")]
618    pub avatar: Option<String>,
619}