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}