1#![allow(clippy::large_enum_variant)]
4#![allow(clippy::new_without_default)]
5
6pub mod client_api;
7pub mod commands;
8pub mod errors;
9pub mod events;
10pub mod responses;
11pub mod utils;
12
13use errors::*;
14use serde::{Deserialize, Serialize};
15use serde_aux::field_attributes::{
16 deserialize_number_from_string, deserialize_option_number_from_string,
17};
18use std::{collections::BTreeMap, fmt::Write as _, sync::Arc};
19use utils::CommandSyntax;
20
21pub type UtcTime = String;
22pub type JsonObject = serde_json::Value;
23
24#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
25#[cfg_attr(feature = "bon", derive(::bon::Builder))]
26#[cfg_attr(feature = "bon", builder(on(String, into)))]
27pub struct ACIReaction {
28 #[serde(rename = "chatInfo")]
29 pub chat_info: ChatInfo,
30
31 #[serde(rename = "chatReaction")]
32 pub chat_reaction: CIReaction,
33
34 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
35 #[cfg_attr(feature = "bon", builder(default))]
36 pub undocumented: JsonObject,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40#[cfg_attr(feature = "bon", derive(::bon::Builder))]
41#[cfg_attr(feature = "bon", builder(on(String, into)))]
42pub struct AChat {
43 #[serde(rename = "chatInfo")]
44 pub chat_info: ChatInfo,
45
46 #[serde(rename = "chatItems")]
47 pub chat_items: Vec<ChatItem>,
48
49 #[serde(rename = "chatStats")]
50 pub chat_stats: ChatStats,
51
52 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
53 #[cfg_attr(feature = "bon", builder(default))]
54 pub undocumented: JsonObject,
55}
56
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
58#[cfg_attr(feature = "bon", derive(::bon::Builder))]
59#[cfg_attr(feature = "bon", builder(on(String, into)))]
60pub struct AChatItem {
61 #[serde(rename = "chatInfo")]
62 pub chat_info: ChatInfo,
63
64 #[serde(rename = "chatItem")]
65 pub chat_item: ChatItem,
66
67 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
68 #[cfg_attr(feature = "bon", builder(default))]
69 pub undocumented: JsonObject,
70}
71
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
73#[cfg_attr(feature = "bon", derive(::bon::Builder))]
74#[cfg_attr(feature = "bon", builder(on(String, into)))]
75pub struct AddressSettings {
76 #[serde(rename = "businessAddress")]
77 pub business_address: bool,
78
79 #[serde(rename = "autoAccept", skip_serializing_if = "Option::is_none")]
80 pub auto_accept: Option<AutoAccept>,
81
82 #[serde(rename = "autoReply", skip_serializing_if = "Option::is_none")]
83 pub auto_reply: Option<MsgContent>,
84
85 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
86 #[cfg_attr(feature = "bon", builder(default))]
87 pub undocumented: JsonObject,
88}
89
90#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
91#[cfg_attr(feature = "bon", derive(::bon::Builder))]
92#[cfg_attr(feature = "bon", builder(on(String, into)))]
93pub struct AutoAccept {
94 #[serde(rename = "acceptIncognito")]
95 pub accept_incognito: bool,
96
97 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
98 #[cfg_attr(feature = "bon", builder(default))]
99 pub undocumented: JsonObject,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
103#[cfg_attr(feature = "bon", derive(::bon::Builder))]
104#[cfg_attr(feature = "bon", builder(on(String, into)))]
105pub struct BlockingInfo {
106 #[serde(rename = "reason")]
107 pub reason: BlockingReason,
108
109 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
110 #[cfg_attr(feature = "bon", builder(default))]
111 pub undocumented: JsonObject,
112}
113
114#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
115#[non_exhaustive]
116pub enum BlockingReason {
117 #[default]
118 #[serde(rename = "spam")]
119 Spam,
120 #[serde(rename = "content")]
121 Content,
122}
123
124#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
125#[cfg_attr(feature = "bon", derive(::bon::Builder))]
126#[cfg_attr(feature = "bon", builder(on(String, into)))]
127pub struct BusinessChatInfo {
128 #[serde(rename = "chatType")]
129 pub chat_type: BusinessChatType,
130
131 #[serde(rename = "businessId")]
132 pub business_id: String,
133
134 #[serde(rename = "customerId")]
135 pub customer_id: String,
136
137 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
138 #[cfg_attr(feature = "bon", builder(default))]
139 pub undocumented: JsonObject,
140}
141
142#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
143#[non_exhaustive]
144pub enum BusinessChatType {
145 #[default]
146 #[serde(rename = "business")]
147 Business,
148 #[serde(rename = "customer")]
149 Customer,
150}
151
152#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
153#[non_exhaustive]
154pub enum CICallStatus {
155 #[default]
156 #[serde(rename = "pending")]
157 Pending,
158 #[serde(rename = "missed")]
159 Missed,
160 #[serde(rename = "rejected")]
161 Rejected,
162 #[serde(rename = "accepted")]
163 Accepted,
164 #[serde(rename = "negotiated")]
165 Negotiated,
166 #[serde(rename = "progress")]
167 Progress,
168 #[serde(rename = "ended")]
169 Ended,
170 #[serde(rename = "error")]
171 Error,
172}
173
174#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
175#[serde(tag = "type")]
176#[non_exhaustive]
177pub enum CIContent {
178 #[serde(rename = "sndMsgContent")]
179 SndMsgContent {
180 #[serde(rename = "msgContent")]
181 msg_content: MsgContent,
182
183 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
184 undocumented: JsonObject,
185 },
186 #[serde(rename = "rcvMsgContent")]
187 RcvMsgContent {
188 #[serde(rename = "msgContent")]
189 msg_content: MsgContent,
190
191 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
192 undocumented: JsonObject,
193 },
194 #[serde(rename = "sndDeleted")]
195 SndDeleted {
196 #[serde(rename = "deleteMode")]
197 delete_mode: CIDeleteMode,
198
199 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
200 undocumented: JsonObject,
201 },
202 #[serde(rename = "rcvDeleted")]
203 RcvDeleted {
204 #[serde(rename = "deleteMode")]
205 delete_mode: CIDeleteMode,
206
207 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
208 undocumented: JsonObject,
209 },
210 #[serde(rename = "sndCall")]
211 SndCall {
212 #[serde(rename = "status")]
213 status: CICallStatus,
214
215 #[serde(
216 rename = "duration",
217 deserialize_with = "deserialize_number_from_string"
218 )]
219 duration: i32,
220
221 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
222 undocumented: JsonObject,
223 },
224 #[serde(rename = "rcvCall")]
225 RcvCall {
226 #[serde(rename = "status")]
227 status: CICallStatus,
228
229 #[serde(
230 rename = "duration",
231 deserialize_with = "deserialize_number_from_string"
232 )]
233 duration: i32,
234
235 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
236 undocumented: JsonObject,
237 },
238 #[serde(rename = "rcvIntegrityError")]
239 RcvIntegrityError {
240 #[serde(rename = "msgError")]
241 msg_error: MsgErrorType,
242
243 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
244 undocumented: JsonObject,
245 },
246 #[serde(rename = "rcvDecryptionError")]
247 RcvDecryptionError {
248 #[serde(rename = "msgDecryptError")]
249 msg_decrypt_error: MsgDecryptError,
250
251 #[serde(
252 rename = "msgCount",
253 deserialize_with = "deserialize_number_from_string"
254 )]
255 msg_count: u32,
256
257 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
258 undocumented: JsonObject,
259 },
260 #[serde(rename = "rcvGroupInvitation")]
261 RcvGroupInvitation {
262 #[serde(rename = "groupInvitation")]
263 group_invitation: CIGroupInvitation,
264
265 #[serde(rename = "memberRole")]
266 member_role: GroupMemberRole,
267
268 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
269 undocumented: JsonObject,
270 },
271 #[serde(rename = "sndGroupInvitation")]
272 SndGroupInvitation {
273 #[serde(rename = "groupInvitation")]
274 group_invitation: CIGroupInvitation,
275
276 #[serde(rename = "memberRole")]
277 member_role: GroupMemberRole,
278
279 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
280 undocumented: JsonObject,
281 },
282 #[serde(rename = "rcvDirectEvent")]
283 RcvDirectEvent {
284 #[serde(rename = "rcvDirectEvent")]
285 rcv_direct_event: RcvDirectEvent,
286
287 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
288 undocumented: JsonObject,
289 },
290 #[serde(rename = "rcvGroupEvent")]
291 RcvGroupEvent {
292 #[serde(rename = "rcvGroupEvent")]
293 rcv_group_event: RcvGroupEvent,
294
295 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
296 undocumented: JsonObject,
297 },
298 #[serde(rename = "sndGroupEvent")]
299 SndGroupEvent {
300 #[serde(rename = "sndGroupEvent")]
301 snd_group_event: SndGroupEvent,
302
303 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
304 undocumented: JsonObject,
305 },
306 #[serde(rename = "rcvConnEvent")]
307 RcvConnEvent {
308 #[serde(rename = "rcvConnEvent")]
309 rcv_conn_event: RcvConnEvent,
310
311 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
312 undocumented: JsonObject,
313 },
314 #[serde(rename = "sndConnEvent")]
315 SndConnEvent {
316 #[serde(rename = "sndConnEvent")]
317 snd_conn_event: SndConnEvent,
318
319 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
320 undocumented: JsonObject,
321 },
322 #[serde(rename = "rcvChatFeature")]
323 RcvChatFeature {
324 #[serde(rename = "feature")]
325 feature: ChatFeature,
326
327 #[serde(rename = "enabled")]
328 enabled: PrefEnabled,
329
330 #[serde(
331 rename = "param",
332 skip_serializing_if = "Option::is_none",
333 deserialize_with = "deserialize_option_number_from_string",
334 default
335 )]
336 param: Option<i32>,
337
338 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
339 undocumented: JsonObject,
340 },
341 #[serde(rename = "sndChatFeature")]
342 SndChatFeature {
343 #[serde(rename = "feature")]
344 feature: ChatFeature,
345
346 #[serde(rename = "enabled")]
347 enabled: PrefEnabled,
348
349 #[serde(
350 rename = "param",
351 skip_serializing_if = "Option::is_none",
352 deserialize_with = "deserialize_option_number_from_string",
353 default
354 )]
355 param: Option<i32>,
356
357 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
358 undocumented: JsonObject,
359 },
360 #[serde(rename = "rcvChatPreference")]
361 RcvChatPreference {
362 #[serde(rename = "feature")]
363 feature: ChatFeature,
364
365 #[serde(rename = "allowed")]
366 allowed: FeatureAllowed,
367
368 #[serde(
369 rename = "param",
370 skip_serializing_if = "Option::is_none",
371 deserialize_with = "deserialize_option_number_from_string",
372 default
373 )]
374 param: Option<i32>,
375
376 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
377 undocumented: JsonObject,
378 },
379 #[serde(rename = "sndChatPreference")]
380 SndChatPreference {
381 #[serde(rename = "feature")]
382 feature: ChatFeature,
383
384 #[serde(rename = "allowed")]
385 allowed: FeatureAllowed,
386
387 #[serde(
388 rename = "param",
389 skip_serializing_if = "Option::is_none",
390 deserialize_with = "deserialize_option_number_from_string",
391 default
392 )]
393 param: Option<i32>,
394
395 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
396 undocumented: JsonObject,
397 },
398 #[serde(rename = "rcvGroupFeature")]
399 RcvGroupFeature {
400 #[serde(rename = "groupFeature")]
401 group_feature: GroupFeature,
402
403 #[serde(rename = "preference")]
404 preference: GroupPreference,
405
406 #[serde(
407 rename = "param",
408 skip_serializing_if = "Option::is_none",
409 deserialize_with = "deserialize_option_number_from_string",
410 default
411 )]
412 param: Option<i32>,
413
414 #[serde(rename = "memberRole_", skip_serializing_if = "Option::is_none")]
415 member_role: Option<GroupMemberRole>,
416
417 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
418 undocumented: JsonObject,
419 },
420 #[serde(rename = "sndGroupFeature")]
421 SndGroupFeature {
422 #[serde(rename = "groupFeature")]
423 group_feature: GroupFeature,
424
425 #[serde(rename = "preference")]
426 preference: GroupPreference,
427
428 #[serde(
429 rename = "param",
430 skip_serializing_if = "Option::is_none",
431 deserialize_with = "deserialize_option_number_from_string",
432 default
433 )]
434 param: Option<i32>,
435
436 #[serde(rename = "memberRole_", skip_serializing_if = "Option::is_none")]
437 member_role: Option<GroupMemberRole>,
438
439 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
440 undocumented: JsonObject,
441 },
442 #[serde(rename = "rcvChatFeatureRejected")]
443 RcvChatFeatureRejected {
444 #[serde(rename = "feature")]
445 feature: ChatFeature,
446
447 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
448 undocumented: JsonObject,
449 },
450 #[serde(rename = "rcvGroupFeatureRejected")]
451 RcvGroupFeatureRejected {
452 #[serde(rename = "groupFeature")]
453 group_feature: GroupFeature,
454
455 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
456 undocumented: JsonObject,
457 },
458 #[serde(rename = "sndModerated")]
459 SndModerated,
460 #[serde(rename = "rcvModerated")]
461 RcvModerated,
462 #[serde(rename = "rcvBlocked")]
463 RcvBlocked,
464 #[serde(rename = "sndDirectE2EEInfo")]
465 SndDirectE2EeInfo {
466 #[serde(rename = "e2eeInfo")]
467 e_2_ee_info: E2EInfo,
468
469 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
470 undocumented: JsonObject,
471 },
472 #[serde(rename = "rcvDirectE2EEInfo")]
473 RcvDirectE2EeInfo {
474 #[serde(rename = "e2eeInfo")]
475 e_2_ee_info: E2EInfo,
476
477 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
478 undocumented: JsonObject,
479 },
480 #[serde(rename = "sndGroupE2EEInfo")]
481 SndGroupE2EeInfo {
482 #[serde(rename = "e2eeInfo")]
483 e_2_ee_info: E2EInfo,
484
485 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
486 undocumented: JsonObject,
487 },
488 #[serde(rename = "rcvGroupE2EEInfo")]
489 RcvGroupE2EeInfo {
490 #[serde(rename = "e2eeInfo")]
491 e_2_ee_info: E2EInfo,
492
493 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
494 undocumented: JsonObject,
495 },
496 #[serde(rename = "chatBanner")]
497 ChatBanner,
498 #[serde(untagged)]
499 Undocumented(JsonObject),
500}
501
502impl CIContent {
503 pub fn snd_msg_content(msg_content: MsgContent) -> Self {
504 Self::SndMsgContent {
505 msg_content,
506 undocumented: Default::default(),
507 }
508 }
509
510 pub fn rcv_msg_content(msg_content: MsgContent) -> Self {
511 Self::RcvMsgContent {
512 msg_content,
513 undocumented: Default::default(),
514 }
515 }
516
517 pub fn snd_deleted(delete_mode: CIDeleteMode) -> Self {
518 Self::SndDeleted {
519 delete_mode,
520 undocumented: Default::default(),
521 }
522 }
523
524 pub fn rcv_deleted(delete_mode: CIDeleteMode) -> Self {
525 Self::RcvDeleted {
526 delete_mode,
527 undocumented: Default::default(),
528 }
529 }
530
531 pub fn snd_call(status: CICallStatus, duration: i32) -> Self {
532 Self::SndCall {
533 status,
534 duration,
535 undocumented: Default::default(),
536 }
537 }
538
539 pub fn rcv_call(status: CICallStatus, duration: i32) -> Self {
540 Self::RcvCall {
541 status,
542 duration,
543 undocumented: Default::default(),
544 }
545 }
546
547 pub fn rcv_integrity_error(msg_error: MsgErrorType) -> Self {
548 Self::RcvIntegrityError {
549 msg_error,
550 undocumented: Default::default(),
551 }
552 }
553
554 pub fn rcv_decryption_error(msg_decrypt_error: MsgDecryptError, msg_count: u32) -> Self {
555 Self::RcvDecryptionError {
556 msg_decrypt_error,
557 msg_count,
558 undocumented: Default::default(),
559 }
560 }
561
562 pub fn rcv_group_invitation(
563 group_invitation: CIGroupInvitation,
564 member_role: GroupMemberRole,
565 ) -> Self {
566 Self::RcvGroupInvitation {
567 group_invitation,
568 member_role,
569 undocumented: Default::default(),
570 }
571 }
572
573 pub fn snd_group_invitation(
574 group_invitation: CIGroupInvitation,
575 member_role: GroupMemberRole,
576 ) -> Self {
577 Self::SndGroupInvitation {
578 group_invitation,
579 member_role,
580 undocumented: Default::default(),
581 }
582 }
583
584 pub fn rcv_direct_event(rcv_direct_event: RcvDirectEvent) -> Self {
585 Self::RcvDirectEvent {
586 rcv_direct_event,
587 undocumented: Default::default(),
588 }
589 }
590
591 pub fn rcv_group_event(rcv_group_event: RcvGroupEvent) -> Self {
592 Self::RcvGroupEvent {
593 rcv_group_event,
594 undocumented: Default::default(),
595 }
596 }
597
598 pub fn snd_group_event(snd_group_event: SndGroupEvent) -> Self {
599 Self::SndGroupEvent {
600 snd_group_event,
601 undocumented: Default::default(),
602 }
603 }
604
605 pub fn rcv_conn_event(rcv_conn_event: RcvConnEvent) -> Self {
606 Self::RcvConnEvent {
607 rcv_conn_event,
608 undocumented: Default::default(),
609 }
610 }
611
612 pub fn snd_conn_event(snd_conn_event: SndConnEvent) -> Self {
613 Self::SndConnEvent {
614 snd_conn_event,
615 undocumented: Default::default(),
616 }
617 }
618
619 pub fn rcv_chat_feature(
620 feature: ChatFeature,
621 enabled: PrefEnabled,
622 param: Option<i32>,
623 ) -> Self {
624 Self::RcvChatFeature {
625 feature,
626 enabled,
627 param,
628 undocumented: Default::default(),
629 }
630 }
631
632 pub fn snd_chat_feature(
633 feature: ChatFeature,
634 enabled: PrefEnabled,
635 param: Option<i32>,
636 ) -> Self {
637 Self::SndChatFeature {
638 feature,
639 enabled,
640 param,
641 undocumented: Default::default(),
642 }
643 }
644
645 pub fn rcv_chat_preference(
646 feature: ChatFeature,
647 allowed: FeatureAllowed,
648 param: Option<i32>,
649 ) -> Self {
650 Self::RcvChatPreference {
651 feature,
652 allowed,
653 param,
654 undocumented: Default::default(),
655 }
656 }
657
658 pub fn snd_chat_preference(
659 feature: ChatFeature,
660 allowed: FeatureAllowed,
661 param: Option<i32>,
662 ) -> Self {
663 Self::SndChatPreference {
664 feature,
665 allowed,
666 param,
667 undocumented: Default::default(),
668 }
669 }
670
671 pub fn rcv_group_feature(
672 group_feature: GroupFeature,
673 preference: GroupPreference,
674 param: Option<i32>,
675 member_role: Option<GroupMemberRole>,
676 ) -> Self {
677 Self::RcvGroupFeature {
678 group_feature,
679 preference,
680 param,
681 member_role,
682 undocumented: Default::default(),
683 }
684 }
685
686 pub fn snd_group_feature(
687 group_feature: GroupFeature,
688 preference: GroupPreference,
689 param: Option<i32>,
690 member_role: Option<GroupMemberRole>,
691 ) -> Self {
692 Self::SndGroupFeature {
693 group_feature,
694 preference,
695 param,
696 member_role,
697 undocumented: Default::default(),
698 }
699 }
700
701 pub fn rcv_chat_feature_rejected(feature: ChatFeature) -> Self {
702 Self::RcvChatFeatureRejected {
703 feature,
704 undocumented: Default::default(),
705 }
706 }
707
708 pub fn rcv_group_feature_rejected(group_feature: GroupFeature) -> Self {
709 Self::RcvGroupFeatureRejected {
710 group_feature,
711 undocumented: Default::default(),
712 }
713 }
714
715 pub fn snd_moderated() -> Self {
716 Self::SndModerated
717 }
718
719 pub fn rcv_moderated() -> Self {
720 Self::RcvModerated
721 }
722
723 pub fn rcv_blocked() -> Self {
724 Self::RcvBlocked
725 }
726
727 pub fn snd_direct_e_2_ee_info(e_2_ee_info: E2EInfo) -> Self {
728 Self::SndDirectE2EeInfo {
729 e_2_ee_info,
730 undocumented: Default::default(),
731 }
732 }
733
734 pub fn rcv_direct_e_2_ee_info(e_2_ee_info: E2EInfo) -> Self {
735 Self::RcvDirectE2EeInfo {
736 e_2_ee_info,
737 undocumented: Default::default(),
738 }
739 }
740
741 pub fn snd_group_e_2_ee_info(e_2_ee_info: E2EInfo) -> Self {
742 Self::SndGroupE2EeInfo {
743 e_2_ee_info,
744 undocumented: Default::default(),
745 }
746 }
747
748 pub fn rcv_group_e_2_ee_info(e_2_ee_info: E2EInfo) -> Self {
749 Self::RcvGroupE2EeInfo {
750 e_2_ee_info,
751 undocumented: Default::default(),
752 }
753 }
754
755 pub fn chat_banner() -> Self {
756 Self::ChatBanner
757 }
758}
759
760#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
761#[non_exhaustive]
762pub enum CIDeleteMode {
763 #[default]
764 #[serde(rename = "broadcast")]
765 Broadcast,
766 #[serde(rename = "internal")]
767 Internal,
768 #[serde(rename = "internalMark")]
769 InternalMark,
770}
771
772#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
773#[serde(tag = "type")]
774#[non_exhaustive]
775pub enum CIDeleted {
776 #[serde(rename = "deleted")]
777 Deleted {
778 #[serde(rename = "deletedTs", skip_serializing_if = "Option::is_none")]
779 deleted_ts: Option<UtcTime>,
780
781 #[serde(rename = "chatType")]
782 chat_type: ChatType,
783
784 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
785 undocumented: JsonObject,
786 },
787 #[serde(rename = "blocked")]
788 Blocked {
789 #[serde(rename = "deletedTs", skip_serializing_if = "Option::is_none")]
790 deleted_ts: Option<UtcTime>,
791
792 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
793 undocumented: JsonObject,
794 },
795 #[serde(rename = "blockedByAdmin")]
796 BlockedByAdmin {
797 #[serde(rename = "deletedTs", skip_serializing_if = "Option::is_none")]
798 deleted_ts: Option<UtcTime>,
799
800 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
801 undocumented: JsonObject,
802 },
803 #[serde(rename = "moderated")]
804 Moderated {
805 #[serde(rename = "deletedTs", skip_serializing_if = "Option::is_none")]
806 deleted_ts: Option<UtcTime>,
807
808 #[serde(rename = "byGroupMember")]
809 by_group_member: GroupMember,
810
811 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
812 undocumented: JsonObject,
813 },
814 #[serde(untagged)]
815 Undocumented(JsonObject),
816}
817
818impl CIDeleted {
819 pub fn deleted(deleted_ts: Option<UtcTime>, chat_type: ChatType) -> Self {
820 Self::Deleted {
821 deleted_ts,
822 chat_type,
823 undocumented: Default::default(),
824 }
825 }
826
827 pub fn blocked(deleted_ts: Option<UtcTime>) -> Self {
828 Self::Blocked {
829 deleted_ts,
830 undocumented: Default::default(),
831 }
832 }
833
834 pub fn blocked_by_admin(deleted_ts: Option<UtcTime>) -> Self {
835 Self::BlockedByAdmin {
836 deleted_ts,
837 undocumented: Default::default(),
838 }
839 }
840
841 pub fn moderated(deleted_ts: Option<UtcTime>, by_group_member: GroupMember) -> Self {
842 Self::Moderated {
843 deleted_ts,
844 by_group_member,
845 undocumented: Default::default(),
846 }
847 }
848}
849
850#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
851#[serde(tag = "type")]
852#[non_exhaustive]
853pub enum CIDirection {
854 #[serde(rename = "directSnd")]
855 DirectSnd,
856 #[serde(rename = "directRcv")]
857 DirectRcv,
858 #[serde(rename = "groupSnd")]
859 GroupSnd,
860 #[serde(rename = "groupRcv")]
861 GroupRcv {
862 #[serde(rename = "groupMember")]
863 group_member: GroupMember,
864
865 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
866 undocumented: JsonObject,
867 },
868 #[serde(rename = "localSnd")]
869 LocalSnd,
870 #[serde(rename = "localRcv")]
871 LocalRcv,
872 #[serde(untagged)]
873 Undocumented(JsonObject),
874}
875
876impl CIDirection {
877 pub fn direct_snd() -> Self {
878 Self::DirectSnd
879 }
880
881 pub fn direct_rcv() -> Self {
882 Self::DirectRcv
883 }
884
885 pub fn group_snd() -> Self {
886 Self::GroupSnd
887 }
888
889 pub fn group_rcv(group_member: GroupMember) -> Self {
890 Self::GroupRcv {
891 group_member,
892 undocumented: Default::default(),
893 }
894 }
895
896 pub fn local_snd() -> Self {
897 Self::LocalSnd
898 }
899
900 pub fn local_rcv() -> Self {
901 Self::LocalRcv
902 }
903}
904
905#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
906#[cfg_attr(feature = "bon", derive(::bon::Builder))]
907#[cfg_attr(feature = "bon", builder(on(String, into)))]
908pub struct CIFile {
909 #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
910 pub file_id: i64,
911
912 #[serde(rename = "fileName")]
913 pub file_name: String,
914
915 #[serde(
916 rename = "fileSize",
917 deserialize_with = "deserialize_number_from_string"
918 )]
919 pub file_size: i64,
920
921 #[serde(rename = "fileSource", skip_serializing_if = "Option::is_none")]
922 pub file_source: Option<CryptoFile>,
923
924 #[serde(rename = "fileStatus")]
925 pub file_status: CIFileStatus,
926
927 #[serde(rename = "fileProtocol")]
928 pub file_protocol: FileProtocol,
929
930 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
931 #[cfg_attr(feature = "bon", builder(default))]
932 pub undocumented: JsonObject,
933}
934
935#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
936#[serde(tag = "type")]
937#[non_exhaustive]
938pub enum CIFileStatus {
939 #[serde(rename = "sndStored")]
940 SndStored,
941 #[serde(rename = "sndTransfer")]
942 SndTransfer {
943 #[serde(
944 rename = "sndProgress",
945 deserialize_with = "deserialize_number_from_string"
946 )]
947 snd_progress: i64,
948
949 #[serde(
950 rename = "sndTotal",
951 deserialize_with = "deserialize_number_from_string"
952 )]
953 snd_total: i64,
954
955 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
956 undocumented: JsonObject,
957 },
958 #[serde(rename = "sndCancelled")]
959 SndCancelled,
960 #[serde(rename = "sndComplete")]
961 SndComplete,
962 #[serde(rename = "sndError")]
963 SndError {
964 #[serde(rename = "sndFileError")]
965 snd_file_error: FileError,
966
967 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
968 undocumented: JsonObject,
969 },
970 #[serde(rename = "sndWarning")]
971 SndWarning {
972 #[serde(rename = "sndFileError")]
973 snd_file_error: FileError,
974
975 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
976 undocumented: JsonObject,
977 },
978 #[serde(rename = "rcvInvitation")]
979 RcvInvitation,
980 #[serde(rename = "rcvAccepted")]
981 RcvAccepted,
982 #[serde(rename = "rcvTransfer")]
983 RcvTransfer {
984 #[serde(
985 rename = "rcvProgress",
986 deserialize_with = "deserialize_number_from_string"
987 )]
988 rcv_progress: i64,
989
990 #[serde(
991 rename = "rcvTotal",
992 deserialize_with = "deserialize_number_from_string"
993 )]
994 rcv_total: i64,
995
996 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
997 undocumented: JsonObject,
998 },
999 #[serde(rename = "rcvAborted")]
1000 RcvAborted,
1001 #[serde(rename = "rcvComplete")]
1002 RcvComplete,
1003 #[serde(rename = "rcvCancelled")]
1004 RcvCancelled,
1005 #[serde(rename = "rcvError")]
1006 RcvError {
1007 #[serde(rename = "rcvFileError")]
1008 rcv_file_error: FileError,
1009
1010 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1011 undocumented: JsonObject,
1012 },
1013 #[serde(rename = "rcvWarning")]
1014 RcvWarning {
1015 #[serde(rename = "rcvFileError")]
1016 rcv_file_error: FileError,
1017
1018 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1019 undocumented: JsonObject,
1020 },
1021 #[serde(rename = "invalid")]
1022 Invalid {
1023 #[serde(rename = "text")]
1024 text: String,
1025
1026 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1027 undocumented: JsonObject,
1028 },
1029 #[serde(untagged)]
1030 Undocumented(JsonObject),
1031}
1032
1033impl CIFileStatus {
1034 pub fn snd_stored() -> Self {
1035 Self::SndStored
1036 }
1037
1038 pub fn snd_transfer(snd_progress: i64, snd_total: i64) -> Self {
1039 Self::SndTransfer {
1040 snd_progress,
1041 snd_total,
1042 undocumented: Default::default(),
1043 }
1044 }
1045
1046 pub fn snd_cancelled() -> Self {
1047 Self::SndCancelled
1048 }
1049
1050 pub fn snd_complete() -> Self {
1051 Self::SndComplete
1052 }
1053
1054 pub fn snd_error(snd_file_error: FileError) -> Self {
1055 Self::SndError {
1056 snd_file_error,
1057 undocumented: Default::default(),
1058 }
1059 }
1060
1061 pub fn snd_warning(snd_file_error: FileError) -> Self {
1062 Self::SndWarning {
1063 snd_file_error,
1064 undocumented: Default::default(),
1065 }
1066 }
1067
1068 pub fn rcv_invitation() -> Self {
1069 Self::RcvInvitation
1070 }
1071
1072 pub fn rcv_accepted() -> Self {
1073 Self::RcvAccepted
1074 }
1075
1076 pub fn rcv_transfer(rcv_progress: i64, rcv_total: i64) -> Self {
1077 Self::RcvTransfer {
1078 rcv_progress,
1079 rcv_total,
1080 undocumented: Default::default(),
1081 }
1082 }
1083
1084 pub fn rcv_aborted() -> Self {
1085 Self::RcvAborted
1086 }
1087
1088 pub fn rcv_complete() -> Self {
1089 Self::RcvComplete
1090 }
1091
1092 pub fn rcv_cancelled() -> Self {
1093 Self::RcvCancelled
1094 }
1095
1096 pub fn rcv_error(rcv_file_error: FileError) -> Self {
1097 Self::RcvError {
1098 rcv_file_error,
1099 undocumented: Default::default(),
1100 }
1101 }
1102
1103 pub fn rcv_warning(rcv_file_error: FileError) -> Self {
1104 Self::RcvWarning {
1105 rcv_file_error,
1106 undocumented: Default::default(),
1107 }
1108 }
1109
1110 pub fn invalid(text: String) -> Self {
1111 Self::Invalid {
1112 text,
1113 undocumented: Default::default(),
1114 }
1115 }
1116}
1117
1118#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1119#[serde(tag = "type")]
1120#[non_exhaustive]
1121pub enum CIForwardedFrom {
1122 #[serde(rename = "unknown")]
1123 Unknown,
1124 #[serde(rename = "contact")]
1125 Contact {
1126 #[serde(rename = "chatName")]
1127 chat_name: String,
1128
1129 #[serde(rename = "msgDir")]
1130 msg_dir: MsgDirection,
1131
1132 #[serde(
1133 rename = "contactId",
1134 skip_serializing_if = "Option::is_none",
1135 deserialize_with = "deserialize_option_number_from_string",
1136 default
1137 )]
1138 contact_id: Option<i64>,
1139
1140 #[serde(
1141 rename = "chatItemId",
1142 skip_serializing_if = "Option::is_none",
1143 deserialize_with = "deserialize_option_number_from_string",
1144 default
1145 )]
1146 chat_item_id: Option<i64>,
1147
1148 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1149 undocumented: JsonObject,
1150 },
1151 #[serde(rename = "group")]
1152 Group {
1153 #[serde(rename = "chatName")]
1154 chat_name: String,
1155
1156 #[serde(rename = "msgDir")]
1157 msg_dir: MsgDirection,
1158
1159 #[serde(
1160 rename = "groupId",
1161 skip_serializing_if = "Option::is_none",
1162 deserialize_with = "deserialize_option_number_from_string",
1163 default
1164 )]
1165 group_id: Option<i64>,
1166
1167 #[serde(
1168 rename = "chatItemId",
1169 skip_serializing_if = "Option::is_none",
1170 deserialize_with = "deserialize_option_number_from_string",
1171 default
1172 )]
1173 chat_item_id: Option<i64>,
1174
1175 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1176 undocumented: JsonObject,
1177 },
1178 #[serde(untagged)]
1179 Undocumented(JsonObject),
1180}
1181
1182impl CIForwardedFrom {
1183 pub fn unknown() -> Self {
1184 Self::Unknown
1185 }
1186
1187 pub fn contact(
1188 chat_name: String,
1189 msg_dir: MsgDirection,
1190 contact_id: Option<i64>,
1191 chat_item_id: Option<i64>,
1192 ) -> Self {
1193 Self::Contact {
1194 chat_name,
1195 msg_dir,
1196 contact_id,
1197 chat_item_id,
1198 undocumented: Default::default(),
1199 }
1200 }
1201
1202 pub fn group(
1203 chat_name: String,
1204 msg_dir: MsgDirection,
1205 group_id: Option<i64>,
1206 chat_item_id: Option<i64>,
1207 ) -> Self {
1208 Self::Group {
1209 chat_name,
1210 msg_dir,
1211 group_id,
1212 chat_item_id,
1213 undocumented: Default::default(),
1214 }
1215 }
1216}
1217
1218#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1219#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1220#[cfg_attr(feature = "bon", builder(on(String, into)))]
1221pub struct CIGroupInvitation {
1222 #[serde(
1223 rename = "groupId",
1224 deserialize_with = "deserialize_number_from_string"
1225 )]
1226 pub group_id: i64,
1227
1228 #[serde(
1229 rename = "groupMemberId",
1230 deserialize_with = "deserialize_number_from_string"
1231 )]
1232 pub group_member_id: i64,
1233
1234 #[serde(rename = "localDisplayName")]
1235 pub local_display_name: String,
1236
1237 #[serde(rename = "groupProfile")]
1238 pub group_profile: GroupProfile,
1239
1240 #[serde(rename = "status")]
1241 pub status: CIGroupInvitationStatus,
1242
1243 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1244 #[cfg_attr(feature = "bon", builder(default))]
1245 pub undocumented: JsonObject,
1246}
1247
1248#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
1249#[non_exhaustive]
1250pub enum CIGroupInvitationStatus {
1251 #[default]
1252 #[serde(rename = "pending")]
1253 Pending,
1254 #[serde(rename = "accepted")]
1255 Accepted,
1256 #[serde(rename = "rejected")]
1257 Rejected,
1258 #[serde(rename = "expired")]
1259 Expired,
1260}
1261
1262#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1263#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1264#[cfg_attr(feature = "bon", builder(on(String, into)))]
1265pub struct CIMention {
1266 #[serde(rename = "memberId")]
1267 pub member_id: String,
1268
1269 #[serde(rename = "memberRef", skip_serializing_if = "Option::is_none")]
1270 pub member_ref: Option<CIMentionMember>,
1271
1272 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1273 #[cfg_attr(feature = "bon", builder(default))]
1274 pub undocumented: JsonObject,
1275}
1276
1277#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1278#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1279#[cfg_attr(feature = "bon", builder(on(String, into)))]
1280pub struct CIMentionMember {
1281 #[serde(
1282 rename = "groupMemberId",
1283 deserialize_with = "deserialize_number_from_string"
1284 )]
1285 pub group_member_id: i64,
1286
1287 #[serde(rename = "displayName")]
1288 pub display_name: String,
1289
1290 #[serde(rename = "localAlias", skip_serializing_if = "Option::is_none")]
1291 pub local_alias: Option<String>,
1292
1293 #[serde(rename = "memberRole")]
1294 pub member_role: GroupMemberRole,
1295
1296 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1297 #[cfg_attr(feature = "bon", builder(default))]
1298 pub undocumented: JsonObject,
1299}
1300
1301#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1302#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1303#[cfg_attr(feature = "bon", builder(on(String, into)))]
1304pub struct CIMeta {
1305 #[serde(rename = "itemId", deserialize_with = "deserialize_number_from_string")]
1306 pub item_id: i64,
1307
1308 #[serde(rename = "itemTs")]
1309 pub item_ts: UtcTime,
1310
1311 #[serde(rename = "itemText")]
1312 pub item_text: String,
1313
1314 #[serde(rename = "itemStatus")]
1315 pub item_status: CIStatus,
1316
1317 #[serde(rename = "sentViaProxy", skip_serializing_if = "Option::is_none")]
1318 pub sent_via_proxy: Option<bool>,
1319
1320 #[serde(rename = "itemSharedMsgId", skip_serializing_if = "Option::is_none")]
1321 pub item_shared_msg_id: Option<String>,
1322
1323 #[serde(rename = "itemForwarded", skip_serializing_if = "Option::is_none")]
1324 pub item_forwarded: Option<CIForwardedFrom>,
1325
1326 #[serde(rename = "itemDeleted", skip_serializing_if = "Option::is_none")]
1327 pub item_deleted: Option<CIDeleted>,
1328
1329 #[serde(rename = "itemEdited")]
1330 pub item_edited: bool,
1331
1332 #[serde(rename = "itemTimed", skip_serializing_if = "Option::is_none")]
1333 pub item_timed: Option<CITimed>,
1334
1335 #[serde(rename = "itemLive", skip_serializing_if = "Option::is_none")]
1336 pub item_live: Option<bool>,
1337
1338 #[serde(rename = "userMention")]
1339 pub user_mention: bool,
1340
1341 #[serde(rename = "deletable")]
1342 pub deletable: bool,
1343
1344 #[serde(rename = "editable")]
1345 pub editable: bool,
1346
1347 #[serde(
1348 rename = "forwardedByMember",
1349 skip_serializing_if = "Option::is_none",
1350 deserialize_with = "deserialize_option_number_from_string",
1351 default
1352 )]
1353 pub forwarded_by_member: Option<i64>,
1354
1355 #[serde(rename = "showGroupAsSender")]
1356 pub show_group_as_sender: bool,
1357
1358 #[serde(rename = "createdAt")]
1359 pub created_at: UtcTime,
1360
1361 #[serde(rename = "updatedAt")]
1362 pub updated_at: UtcTime,
1363
1364 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1365 #[cfg_attr(feature = "bon", builder(default))]
1366 pub undocumented: JsonObject,
1367}
1368
1369#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1370#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1371#[cfg_attr(feature = "bon", builder(on(String, into)))]
1372pub struct CIQuote {
1373 #[serde(rename = "chatDir", skip_serializing_if = "Option::is_none")]
1374 pub chat_dir: Option<CIDirection>,
1375
1376 #[serde(
1377 rename = "itemId",
1378 skip_serializing_if = "Option::is_none",
1379 deserialize_with = "deserialize_option_number_from_string",
1380 default
1381 )]
1382 pub item_id: Option<i64>,
1383
1384 #[serde(rename = "sharedMsgId", skip_serializing_if = "Option::is_none")]
1385 pub shared_msg_id: Option<String>,
1386
1387 #[serde(rename = "sentAt")]
1388 pub sent_at: UtcTime,
1389
1390 #[serde(rename = "content")]
1391 pub content: MsgContent,
1392
1393 #[serde(rename = "formattedText", skip_serializing_if = "Option::is_none")]
1394 pub formatted_text: Option<Vec<FormattedText>>,
1395
1396 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1397 #[cfg_attr(feature = "bon", builder(default))]
1398 pub undocumented: JsonObject,
1399}
1400
1401#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1402#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1403#[cfg_attr(feature = "bon", builder(on(String, into)))]
1404pub struct CIReaction {
1405 #[serde(rename = "chatDir")]
1406 pub chat_dir: CIDirection,
1407
1408 #[serde(rename = "chatItem")]
1409 pub chat_item: ChatItem,
1410
1411 #[serde(rename = "sentAt")]
1412 pub sent_at: UtcTime,
1413
1414 #[serde(rename = "reaction")]
1415 pub reaction: MsgReaction,
1416
1417 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1418 #[cfg_attr(feature = "bon", builder(default))]
1419 pub undocumented: JsonObject,
1420}
1421
1422#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1423#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1424#[cfg_attr(feature = "bon", builder(on(String, into)))]
1425pub struct CIReactionCount {
1426 #[serde(rename = "reaction")]
1427 pub reaction: MsgReaction,
1428
1429 #[serde(rename = "userReacted")]
1430 pub user_reacted: bool,
1431
1432 #[serde(
1433 rename = "totalReacted",
1434 deserialize_with = "deserialize_number_from_string"
1435 )]
1436 pub total_reacted: i32,
1437
1438 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1439 #[cfg_attr(feature = "bon", builder(default))]
1440 pub undocumented: JsonObject,
1441}
1442
1443#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1444#[serde(tag = "type")]
1445#[non_exhaustive]
1446pub enum CIStatus {
1447 #[serde(rename = "sndNew")]
1448 SndNew,
1449 #[serde(rename = "sndSent")]
1450 SndSent {
1451 #[serde(rename = "sndProgress")]
1452 snd_progress: SndCIStatusProgress,
1453
1454 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1455 undocumented: JsonObject,
1456 },
1457 #[serde(rename = "sndRcvd")]
1458 SndRcvd {
1459 #[serde(rename = "msgRcptStatus")]
1460 msg_rcpt_status: MsgReceiptStatus,
1461
1462 #[serde(rename = "sndProgress")]
1463 snd_progress: SndCIStatusProgress,
1464
1465 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1466 undocumented: JsonObject,
1467 },
1468 #[serde(rename = "sndErrorAuth")]
1469 SndErrorAuth,
1470 #[serde(rename = "sndError")]
1471 SndError {
1472 #[serde(rename = "agentError")]
1473 agent_error: SndError,
1474
1475 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1476 undocumented: JsonObject,
1477 },
1478 #[serde(rename = "sndWarning")]
1479 SndWarning {
1480 #[serde(rename = "agentError")]
1481 agent_error: SndError,
1482
1483 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1484 undocumented: JsonObject,
1485 },
1486 #[serde(rename = "rcvNew")]
1487 RcvNew,
1488 #[serde(rename = "rcvRead")]
1489 RcvRead,
1490 #[serde(rename = "invalid")]
1491 Invalid {
1492 #[serde(rename = "text")]
1493 text: String,
1494
1495 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1496 undocumented: JsonObject,
1497 },
1498 #[serde(untagged)]
1499 Undocumented(JsonObject),
1500}
1501
1502impl CIStatus {
1503 pub fn snd_new() -> Self {
1504 Self::SndNew
1505 }
1506
1507 pub fn snd_sent(snd_progress: SndCIStatusProgress) -> Self {
1508 Self::SndSent {
1509 snd_progress,
1510 undocumented: Default::default(),
1511 }
1512 }
1513
1514 pub fn snd_rcvd(msg_rcpt_status: MsgReceiptStatus, snd_progress: SndCIStatusProgress) -> Self {
1515 Self::SndRcvd {
1516 msg_rcpt_status,
1517 snd_progress,
1518 undocumented: Default::default(),
1519 }
1520 }
1521
1522 pub fn snd_error_auth() -> Self {
1523 Self::SndErrorAuth
1524 }
1525
1526 pub fn snd_error(agent_error: SndError) -> Self {
1527 Self::SndError {
1528 agent_error,
1529 undocumented: Default::default(),
1530 }
1531 }
1532
1533 pub fn snd_warning(agent_error: SndError) -> Self {
1534 Self::SndWarning {
1535 agent_error,
1536 undocumented: Default::default(),
1537 }
1538 }
1539
1540 pub fn rcv_new() -> Self {
1541 Self::RcvNew
1542 }
1543
1544 pub fn rcv_read() -> Self {
1545 Self::RcvRead
1546 }
1547
1548 pub fn invalid(text: String) -> Self {
1549 Self::Invalid {
1550 text,
1551 undocumented: Default::default(),
1552 }
1553 }
1554}
1555
1556#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1557#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1558#[cfg_attr(feature = "bon", builder(on(String, into)))]
1559pub struct CITimed {
1560 #[serde(rename = "ttl", deserialize_with = "deserialize_number_from_string")]
1561 pub ttl: i32,
1562
1563 #[serde(rename = "deleteAt", skip_serializing_if = "Option::is_none")]
1564 pub delete_at: Option<UtcTime>,
1565
1566 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1567 #[cfg_attr(feature = "bon", builder(default))]
1568 pub undocumented: JsonObject,
1569}
1570
1571#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1572#[serde(tag = "type")]
1573#[non_exhaustive]
1574pub enum ChatBotCommand {
1575 #[serde(rename = "command")]
1576 Command {
1577 #[serde(rename = "keyword")]
1578 keyword: String,
1579
1580 #[serde(rename = "label")]
1581 label: String,
1582
1583 #[serde(rename = "params", skip_serializing_if = "Option::is_none")]
1584 params: Option<String>,
1585
1586 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1587 undocumented: JsonObject,
1588 },
1589 #[serde(rename = "menu")]
1590 Menu {
1591 #[serde(rename = "label")]
1592 label: String,
1593
1594 #[serde(rename = "commands")]
1595 commands: Vec<ChatBotCommand>,
1596
1597 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1598 undocumented: JsonObject,
1599 },
1600 #[serde(untagged)]
1601 Undocumented(JsonObject),
1602}
1603
1604impl ChatBotCommand {
1605 pub fn command(keyword: String, label: String, params: Option<String>) -> Self {
1606 Self::Command {
1607 keyword,
1608 label,
1609 params,
1610 undocumented: Default::default(),
1611 }
1612 }
1613
1614 pub fn menu(label: String, commands: Vec<ChatBotCommand>) -> Self {
1615 Self::Menu {
1616 label,
1617 commands,
1618 undocumented: Default::default(),
1619 }
1620 }
1621}
1622
1623#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1629#[serde(tag = "type")]
1630#[non_exhaustive]
1631pub enum ChatDeleteMode {
1632 #[serde(rename = "full")]
1633 Full {
1634 #[serde(rename = "notify")]
1635 notify: bool,
1636
1637 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1638 undocumented: JsonObject,
1639 },
1640 #[serde(rename = "entity")]
1641 Entity {
1642 #[serde(rename = "notify")]
1643 notify: bool,
1644
1645 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1646 undocumented: JsonObject,
1647 },
1648 #[serde(rename = "messages")]
1649 Messages,
1650 #[serde(untagged)]
1651 Undocumented(JsonObject),
1652}
1653
1654impl CommandSyntax for ChatDeleteMode {
1655 const COMMAND_BUF_SIZE: usize = 64;
1656
1657 fn append_command_syntax(&self, buf: &mut String) {
1658 match self {
1659 Self::Full { notify, .. } => {
1660 buf.push_str("full");
1661 if !notify {
1662 buf.push_str(" notify=off");
1663 }
1664 }
1665 Self::Entity { notify, .. } => {
1666 buf.push_str("entity");
1667 if !notify {
1668 buf.push_str(" notify=off");
1669 }
1670 }
1671 Self::Messages | Self::Undocumented(_) => {}
1672 }
1673 }
1674}
1675
1676impl ChatDeleteMode {
1677 pub fn full(notify: bool) -> Self {
1678 Self::Full {
1679 notify,
1680 undocumented: Default::default(),
1681 }
1682 }
1683
1684 pub fn entity(notify: bool) -> Self {
1685 Self::Entity {
1686 notify,
1687 undocumented: Default::default(),
1688 }
1689 }
1690
1691 pub fn messages() -> Self {
1692 Self::Messages
1693 }
1694}
1695
1696#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
1697#[non_exhaustive]
1698pub enum ChatFeature {
1699 #[default]
1700 #[serde(rename = "timedMessages")]
1701 TimedMessages,
1702 #[serde(rename = "fullDelete")]
1703 FullDelete,
1704 #[serde(rename = "reactions")]
1705 Reactions,
1706 #[serde(rename = "voice")]
1707 Voice,
1708 #[serde(rename = "files")]
1709 Files,
1710 #[serde(rename = "calls")]
1711 Calls,
1712 #[serde(rename = "sessions")]
1713 Sessions,
1714}
1715
1716#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1717#[serde(tag = "type")]
1718#[non_exhaustive]
1719pub enum ChatInfo {
1720 #[serde(rename = "direct")]
1721 Direct {
1722 #[serde(rename = "contact")]
1723 contact: Contact,
1724
1725 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1726 undocumented: JsonObject,
1727 },
1728 #[serde(rename = "group")]
1729 Group {
1730 #[serde(rename = "groupInfo")]
1731 group_info: GroupInfo,
1732
1733 #[serde(rename = "groupChatScope", skip_serializing_if = "Option::is_none")]
1734 group_chat_scope: Option<GroupChatScopeInfo>,
1735
1736 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1737 undocumented: JsonObject,
1738 },
1739 #[serde(rename = "local")]
1740 Local {
1741 #[serde(rename = "noteFolder")]
1742 note_folder: NoteFolder,
1743
1744 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1745 undocumented: JsonObject,
1746 },
1747 #[serde(rename = "contactRequest")]
1748 ContactRequest {
1749 #[serde(rename = "contactRequest")]
1750 contact_request: UserContactRequest,
1751
1752 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1753 undocumented: JsonObject,
1754 },
1755 #[serde(rename = "contactConnection")]
1756 ContactConnection {
1757 #[serde(rename = "contactConnection")]
1758 contact_connection: PendingContactConnection,
1759
1760 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1761 undocumented: JsonObject,
1762 },
1763 #[serde(untagged)]
1764 Undocumented(JsonObject),
1765}
1766
1767impl ChatInfo {
1768 pub fn direct(contact: Contact) -> Self {
1769 Self::Direct {
1770 contact,
1771 undocumented: Default::default(),
1772 }
1773 }
1774
1775 pub fn group(group_info: GroupInfo, group_chat_scope: Option<GroupChatScopeInfo>) -> Self {
1776 Self::Group {
1777 group_info,
1778 group_chat_scope,
1779 undocumented: Default::default(),
1780 }
1781 }
1782
1783 pub fn local(note_folder: NoteFolder) -> Self {
1784 Self::Local {
1785 note_folder,
1786 undocumented: Default::default(),
1787 }
1788 }
1789
1790 pub fn contact_request(contact_request: UserContactRequest) -> Self {
1791 Self::ContactRequest {
1792 contact_request,
1793 undocumented: Default::default(),
1794 }
1795 }
1796
1797 pub fn contact_connection(contact_connection: PendingContactConnection) -> Self {
1798 Self::ContactConnection {
1799 contact_connection,
1800 undocumented: Default::default(),
1801 }
1802 }
1803}
1804
1805#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1806#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1807#[cfg_attr(feature = "bon", builder(on(String, into)))]
1808pub struct ChatItem {
1809 #[serde(rename = "chatDir")]
1810 pub chat_dir: CIDirection,
1811
1812 #[serde(rename = "meta")]
1813 pub meta: CIMeta,
1814
1815 #[serde(rename = "content")]
1816 pub content: CIContent,
1817
1818 #[serde(rename = "mentions")]
1819 pub mentions: BTreeMap<String, CIMention>,
1820
1821 #[serde(rename = "formattedText", skip_serializing_if = "Option::is_none")]
1822 pub formatted_text: Option<Vec<FormattedText>>,
1823
1824 #[serde(rename = "quotedItem", skip_serializing_if = "Option::is_none")]
1825 pub quoted_item: Option<CIQuote>,
1826
1827 #[serde(rename = "reactions")]
1828 pub reactions: Vec<CIReactionCount>,
1829
1830 #[serde(rename = "file", skip_serializing_if = "Option::is_none")]
1831 pub file: Option<CIFile>,
1832
1833 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1834 #[cfg_attr(feature = "bon", builder(default))]
1835 pub undocumented: JsonObject,
1836}
1837
1838#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1840#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1841#[cfg_attr(feature = "bon", builder(on(String, into)))]
1842pub struct ChatItemDeletion {
1843 #[serde(rename = "deletedChatItem")]
1844 pub deleted_chat_item: AChatItem,
1845
1846 #[serde(rename = "toChatItem", skip_serializing_if = "Option::is_none")]
1847 pub to_chat_item: Option<AChatItem>,
1848
1849 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1850 #[cfg_attr(feature = "bon", builder(default))]
1851 pub undocumented: JsonObject,
1852}
1853
1854#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
1855#[non_exhaustive]
1856pub enum ChatPeerType {
1857 #[default]
1858 #[serde(rename = "human")]
1859 Human,
1860 #[serde(rename = "bot")]
1861 Bot,
1862}
1863
1864#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1872#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1873#[cfg_attr(feature = "bon", builder(on(String, into)))]
1874pub struct ChatRef {
1875 #[serde(rename = "chatType")]
1876 pub chat_type: ChatType,
1877
1878 #[serde(rename = "chatId", deserialize_with = "deserialize_number_from_string")]
1879 pub chat_id: i64,
1880
1881 #[serde(rename = "chatScope", skip_serializing_if = "Option::is_none")]
1882 pub chat_scope: Option<GroupChatScope>,
1883
1884 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1885 #[cfg_attr(feature = "bon", builder(default))]
1886 pub undocumented: JsonObject,
1887}
1888
1889impl CommandSyntax for ChatRef {
1890 const COMMAND_BUF_SIZE: usize = 256;
1891
1892 fn append_command_syntax(&self, buf: &mut String) {
1893 self.chat_type.append_command_syntax(buf);
1894 write!(buf, "{}", self.chat_id).unwrap();
1895 if let Some(chat_scope) = &self.chat_scope {
1896 chat_scope.append_command_syntax(buf);
1897 }
1898 }
1899}
1900
1901#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1902#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1903#[cfg_attr(feature = "bon", builder(on(String, into)))]
1904pub struct ChatSettings {
1905 #[serde(rename = "enableNtfs")]
1906 pub enable_ntfs: MsgFilter,
1907
1908 #[serde(rename = "sendRcpts", skip_serializing_if = "Option::is_none")]
1909 pub send_rcpts: Option<bool>,
1910
1911 #[serde(rename = "favorite")]
1912 pub favorite: bool,
1913
1914 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1915 #[cfg_attr(feature = "bon", builder(default))]
1916 pub undocumented: JsonObject,
1917}
1918
1919#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1920#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1921#[cfg_attr(feature = "bon", builder(on(String, into)))]
1922pub struct ChatStats {
1923 #[serde(
1924 rename = "unreadCount",
1925 deserialize_with = "deserialize_number_from_string"
1926 )]
1927 pub unread_count: i32,
1928
1929 #[serde(
1930 rename = "unreadMentions",
1931 deserialize_with = "deserialize_number_from_string"
1932 )]
1933 pub unread_mentions: i32,
1934
1935 #[serde(
1936 rename = "reportsCount",
1937 deserialize_with = "deserialize_number_from_string"
1938 )]
1939 pub reports_count: i32,
1940
1941 #[serde(
1942 rename = "minUnreadItemId",
1943 deserialize_with = "deserialize_number_from_string"
1944 )]
1945 pub min_unread_item_id: i64,
1946
1947 #[serde(rename = "unreadChat")]
1948 pub unread_chat: bool,
1949
1950 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
1951 #[cfg_attr(feature = "bon", builder(default))]
1952 pub undocumented: JsonObject,
1953}
1954
1955#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
1961#[non_exhaustive]
1962pub enum ChatType {
1963 #[default]
1964 #[serde(rename = "direct")]
1965 Direct,
1966 #[serde(rename = "group")]
1967 Group,
1968 #[serde(rename = "local")]
1969 Local,
1970}
1971
1972impl CommandSyntax for ChatType {
1973 const COMMAND_BUF_SIZE: usize = 16;
1974
1975 fn append_command_syntax(&self, buf: &mut String) {
1976 match self {
1977 Self::Direct => {
1978 buf.push('@');
1979 }
1980 Self::Group => {
1981 buf.push('#');
1982 }
1983 Self::Local => {
1984 buf.push('*');
1985 }
1986 }
1987 }
1988}
1989
1990#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1991#[cfg_attr(feature = "bon", derive(::bon::Builder))]
1992#[cfg_attr(feature = "bon", builder(on(String, into)))]
1993pub struct ChatWallpaper {
1994 #[serde(rename = "preset", skip_serializing_if = "Option::is_none")]
1995 pub preset: Option<String>,
1996
1997 #[serde(rename = "imageFile", skip_serializing_if = "Option::is_none")]
1998 pub image_file: Option<String>,
1999
2000 #[serde(rename = "background", skip_serializing_if = "Option::is_none")]
2001 pub background: Option<String>,
2002
2003 #[serde(rename = "tint", skip_serializing_if = "Option::is_none")]
2004 pub tint: Option<String>,
2005
2006 #[serde(rename = "scaleType", skip_serializing_if = "Option::is_none")]
2007 pub scale_type: Option<ChatWallpaperScale>,
2008
2009 #[serde(
2010 rename = "scale",
2011 skip_serializing_if = "Option::is_none",
2012 deserialize_with = "deserialize_option_number_from_string",
2013 default
2014 )]
2015 pub scale: Option<f64>,
2016
2017 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2018 #[cfg_attr(feature = "bon", builder(default))]
2019 pub undocumented: JsonObject,
2020}
2021
2022#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2023#[non_exhaustive]
2024pub enum ChatWallpaperScale {
2025 #[default]
2026 #[serde(rename = "fill")]
2027 Fill,
2028 #[serde(rename = "fit")]
2029 Fit,
2030 #[serde(rename = "repeat")]
2031 Repeat,
2032}
2033
2034#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2035#[non_exhaustive]
2036pub enum Color {
2037 #[default]
2038 #[serde(rename = "black")]
2039 Black,
2040 #[serde(rename = "red")]
2041 Red,
2042 #[serde(rename = "green")]
2043 Green,
2044 #[serde(rename = "yellow")]
2045 Yellow,
2046 #[serde(rename = "blue")]
2047 Blue,
2048 #[serde(rename = "magenta")]
2049 Magenta,
2050 #[serde(rename = "cyan")]
2051 Cyan,
2052 #[serde(rename = "white")]
2053 White,
2054}
2055
2056#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2057#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2058#[cfg_attr(feature = "bon", builder(on(String, into)))]
2059pub struct ComposedMessage {
2060 #[serde(rename = "fileSource", skip_serializing_if = "Option::is_none")]
2061 pub file_source: Option<CryptoFile>,
2062
2063 #[serde(
2064 rename = "quotedItemId",
2065 skip_serializing_if = "Option::is_none",
2066 deserialize_with = "deserialize_option_number_from_string",
2067 default
2068 )]
2069 pub quoted_item_id: Option<i64>,
2070
2071 #[serde(rename = "msgContent")]
2072 pub msg_content: MsgContent,
2073
2074 #[serde(rename = "mentions")]
2075 pub mentions: BTreeMap<String, i64>,
2076
2077 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2078 #[cfg_attr(feature = "bon", builder(default))]
2079 pub undocumented: JsonObject,
2080}
2081
2082#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2083#[non_exhaustive]
2084pub enum ConnStatus {
2085 #[default]
2086 #[serde(rename = "new")]
2087 New,
2088 #[serde(rename = "prepared")]
2089 Prepared,
2090 #[serde(rename = "joined")]
2091 Joined,
2092 #[serde(rename = "requested")]
2093 Requested,
2094 #[serde(rename = "accepted")]
2095 Accepted,
2096 #[serde(rename = "snd-ready")]
2097 SndReady,
2098 #[serde(rename = "ready")]
2099 Ready,
2100 #[serde(rename = "deleted")]
2101 Deleted,
2102}
2103
2104#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2105#[non_exhaustive]
2106pub enum ConnType {
2107 #[default]
2108 #[serde(rename = "contact")]
2109 Contact,
2110 #[serde(rename = "member")]
2111 Member,
2112 #[serde(rename = "user_contact")]
2113 UserContact,
2114}
2115
2116#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2117#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2118#[cfg_attr(feature = "bon", builder(on(String, into)))]
2119pub struct Connection {
2120 #[serde(rename = "connId", deserialize_with = "deserialize_number_from_string")]
2121 pub conn_id: i64,
2122
2123 #[serde(rename = "agentConnId")]
2124 pub agent_conn_id: String,
2125
2126 #[serde(
2127 rename = "connChatVersion",
2128 deserialize_with = "deserialize_number_from_string"
2129 )]
2130 pub conn_chat_version: i32,
2131
2132 #[serde(rename = "peerChatVRange")]
2133 pub peer_chat_v_range: VersionRange,
2134
2135 #[serde(
2136 rename = "connLevel",
2137 deserialize_with = "deserialize_number_from_string"
2138 )]
2139 pub conn_level: i32,
2140
2141 #[serde(
2142 rename = "viaContact",
2143 skip_serializing_if = "Option::is_none",
2144 deserialize_with = "deserialize_option_number_from_string",
2145 default
2146 )]
2147 pub via_contact: Option<i64>,
2148
2149 #[serde(
2150 rename = "viaUserContactLink",
2151 skip_serializing_if = "Option::is_none",
2152 deserialize_with = "deserialize_option_number_from_string",
2153 default
2154 )]
2155 pub via_user_contact_link: Option<i64>,
2156
2157 #[serde(rename = "viaGroupLink")]
2158 pub via_group_link: bool,
2159
2160 #[serde(rename = "groupLinkId", skip_serializing_if = "Option::is_none")]
2161 pub group_link_id: Option<String>,
2162
2163 #[serde(rename = "xContactId", skip_serializing_if = "Option::is_none")]
2164 pub x_contact_id: Option<String>,
2165
2166 #[serde(
2167 rename = "customUserProfileId",
2168 skip_serializing_if = "Option::is_none",
2169 deserialize_with = "deserialize_option_number_from_string",
2170 default
2171 )]
2172 pub custom_user_profile_id: Option<i64>,
2173
2174 #[serde(rename = "connType")]
2175 pub conn_type: ConnType,
2176
2177 #[serde(rename = "connStatus")]
2178 pub conn_status: ConnStatus,
2179
2180 #[serde(rename = "contactConnInitiated")]
2181 pub contact_conn_initiated: bool,
2182
2183 #[serde(rename = "localAlias")]
2184 pub local_alias: String,
2185
2186 #[serde(
2187 rename = "entityId",
2188 skip_serializing_if = "Option::is_none",
2189 deserialize_with = "deserialize_option_number_from_string",
2190 default
2191 )]
2192 pub entity_id: Option<i64>,
2193
2194 #[serde(rename = "connectionCode", skip_serializing_if = "Option::is_none")]
2195 pub connection_code: Option<SecurityCode>,
2196
2197 #[serde(rename = "pqSupport")]
2198 pub pq_support: bool,
2199
2200 #[serde(rename = "pqEncryption")]
2201 pub pq_encryption: bool,
2202
2203 #[serde(rename = "pqSndEnabled", skip_serializing_if = "Option::is_none")]
2204 pub pq_snd_enabled: Option<bool>,
2205
2206 #[serde(rename = "pqRcvEnabled", skip_serializing_if = "Option::is_none")]
2207 pub pq_rcv_enabled: Option<bool>,
2208
2209 #[serde(
2210 rename = "authErrCounter",
2211 deserialize_with = "deserialize_number_from_string"
2212 )]
2213 pub auth_err_counter: i32,
2214
2215 #[serde(
2216 rename = "quotaErrCounter",
2217 deserialize_with = "deserialize_number_from_string"
2218 )]
2219 pub quota_err_counter: i32,
2220
2221 #[serde(rename = "createdAt")]
2222 pub created_at: UtcTime,
2223
2224 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2225 #[cfg_attr(feature = "bon", builder(default))]
2226 pub undocumented: JsonObject,
2227}
2228
2229#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2230#[serde(tag = "type")]
2231#[non_exhaustive]
2232pub enum ConnectionEntity {
2233 #[serde(rename = "rcvDirectMsgConnection")]
2234 RcvDirectMsgConnection {
2235 #[serde(rename = "entityConnection")]
2236 entity_connection: Connection,
2237
2238 #[serde(rename = "contact", skip_serializing_if = "Option::is_none")]
2239 contact: Option<Contact>,
2240
2241 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2242 undocumented: JsonObject,
2243 },
2244 #[serde(rename = "rcvGroupMsgConnection")]
2245 RcvGroupMsgConnection {
2246 #[serde(rename = "entityConnection")]
2247 entity_connection: Connection,
2248
2249 #[serde(rename = "groupInfo")]
2250 group_info: GroupInfo,
2251
2252 #[serde(rename = "groupMember")]
2253 group_member: GroupMember,
2254
2255 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2256 undocumented: JsonObject,
2257 },
2258 #[serde(rename = "sndFileConnection")]
2259 SndFileConnection {
2260 #[serde(rename = "entityConnection")]
2261 entity_connection: Connection,
2262
2263 #[serde(rename = "sndFileTransfer")]
2264 snd_file_transfer: SndFileTransfer,
2265
2266 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2267 undocumented: JsonObject,
2268 },
2269 #[serde(rename = "rcvFileConnection")]
2270 RcvFileConnection {
2271 #[serde(rename = "entityConnection")]
2272 entity_connection: Connection,
2273
2274 #[serde(rename = "rcvFileTransfer")]
2275 rcv_file_transfer: RcvFileTransfer,
2276
2277 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2278 undocumented: JsonObject,
2279 },
2280 #[serde(rename = "userContactConnection")]
2281 UserContactConnection {
2282 #[serde(rename = "entityConnection")]
2283 entity_connection: Connection,
2284
2285 #[serde(rename = "userContact")]
2286 user_contact: UserContact,
2287
2288 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2289 undocumented: JsonObject,
2290 },
2291 #[serde(untagged)]
2292 Undocumented(JsonObject),
2293}
2294
2295impl ConnectionEntity {
2296 pub fn rcv_direct_msg_connection(
2297 entity_connection: Connection,
2298 contact: Option<Contact>,
2299 ) -> Self {
2300 Self::RcvDirectMsgConnection {
2301 entity_connection,
2302 contact,
2303 undocumented: Default::default(),
2304 }
2305 }
2306
2307 pub fn rcv_group_msg_connection(
2308 entity_connection: Connection,
2309 group_info: GroupInfo,
2310 group_member: GroupMember,
2311 ) -> Self {
2312 Self::RcvGroupMsgConnection {
2313 entity_connection,
2314 group_info,
2315 group_member,
2316 undocumented: Default::default(),
2317 }
2318 }
2319
2320 pub fn snd_file_connection(
2321 entity_connection: Connection,
2322 snd_file_transfer: SndFileTransfer,
2323 ) -> Self {
2324 Self::SndFileConnection {
2325 entity_connection,
2326 snd_file_transfer,
2327 undocumented: Default::default(),
2328 }
2329 }
2330
2331 pub fn rcv_file_connection(
2332 entity_connection: Connection,
2333 rcv_file_transfer: RcvFileTransfer,
2334 ) -> Self {
2335 Self::RcvFileConnection {
2336 entity_connection,
2337 rcv_file_transfer,
2338 undocumented: Default::default(),
2339 }
2340 }
2341
2342 pub fn user_contact_connection(
2343 entity_connection: Connection,
2344 user_contact: UserContact,
2345 ) -> Self {
2346 Self::UserContactConnection {
2347 entity_connection,
2348 user_contact,
2349 undocumented: Default::default(),
2350 }
2351 }
2352}
2353
2354#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2355#[non_exhaustive]
2356pub enum ConnectionMode {
2357 #[default]
2358 #[serde(rename = "inv")]
2359 Inv,
2360 #[serde(rename = "con")]
2361 Con,
2362}
2363
2364#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2365#[serde(tag = "type")]
2366#[non_exhaustive]
2367pub enum ConnectionPlan {
2368 #[serde(rename = "invitationLink")]
2369 InvitationLink {
2370 #[serde(rename = "invitationLinkPlan")]
2371 invitation_link_plan: InvitationLinkPlan,
2372
2373 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2374 undocumented: JsonObject,
2375 },
2376 #[serde(rename = "contactAddress")]
2377 ContactAddress {
2378 #[serde(rename = "contactAddressPlan")]
2379 contact_address_plan: ContactAddressPlan,
2380
2381 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2382 undocumented: JsonObject,
2383 },
2384 #[serde(rename = "groupLink")]
2385 GroupLink {
2386 #[serde(rename = "groupLinkPlan")]
2387 group_link_plan: GroupLinkPlan,
2388
2389 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2390 undocumented: JsonObject,
2391 },
2392 #[serde(rename = "error")]
2393 Error {
2394 #[serde(rename = "chatError")]
2395 chat_error: ChatError,
2396
2397 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2398 undocumented: JsonObject,
2399 },
2400 #[serde(untagged)]
2401 Undocumented(JsonObject),
2402}
2403
2404impl ConnectionPlan {
2405 pub fn invitation_link(invitation_link_plan: InvitationLinkPlan) -> Self {
2406 Self::InvitationLink {
2407 invitation_link_plan,
2408 undocumented: Default::default(),
2409 }
2410 }
2411
2412 pub fn contact_address(contact_address_plan: ContactAddressPlan) -> Self {
2413 Self::ContactAddress {
2414 contact_address_plan,
2415 undocumented: Default::default(),
2416 }
2417 }
2418
2419 pub fn group_link(group_link_plan: GroupLinkPlan) -> Self {
2420 Self::GroupLink {
2421 group_link_plan,
2422 undocumented: Default::default(),
2423 }
2424 }
2425
2426 pub fn error(chat_error: ChatError) -> Self {
2427 Self::Error {
2428 chat_error,
2429 undocumented: Default::default(),
2430 }
2431 }
2432}
2433
2434#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2435#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2436#[cfg_attr(feature = "bon", builder(on(String, into)))]
2437pub struct Contact {
2438 #[serde(
2439 rename = "contactId",
2440 deserialize_with = "deserialize_number_from_string"
2441 )]
2442 pub contact_id: i64,
2443
2444 #[serde(rename = "localDisplayName")]
2445 pub local_display_name: String,
2446
2447 #[serde(rename = "profile")]
2448 pub profile: LocalProfile,
2449
2450 #[serde(rename = "activeConn", skip_serializing_if = "Option::is_none")]
2451 pub active_conn: Option<Connection>,
2452
2453 #[serde(
2454 rename = "viaGroup",
2455 skip_serializing_if = "Option::is_none",
2456 deserialize_with = "deserialize_option_number_from_string",
2457 default
2458 )]
2459 pub via_group: Option<i64>,
2460
2461 #[serde(rename = "contactUsed")]
2462 pub contact_used: bool,
2463
2464 #[serde(rename = "contactStatus")]
2465 pub contact_status: ContactStatus,
2466
2467 #[serde(rename = "chatSettings")]
2468 pub chat_settings: ChatSettings,
2469
2470 #[serde(rename = "userPreferences")]
2471 pub user_preferences: Preferences,
2472
2473 #[serde(rename = "mergedPreferences")]
2474 pub merged_preferences: ContactUserPreferences,
2475
2476 #[serde(rename = "createdAt")]
2477 pub created_at: UtcTime,
2478
2479 #[serde(rename = "updatedAt")]
2480 pub updated_at: UtcTime,
2481
2482 #[serde(rename = "chatTs", skip_serializing_if = "Option::is_none")]
2483 pub chat_ts: Option<UtcTime>,
2484
2485 #[serde(rename = "preparedContact", skip_serializing_if = "Option::is_none")]
2486 pub prepared_contact: Option<PreparedContact>,
2487
2488 #[serde(
2489 rename = "contactRequestId",
2490 skip_serializing_if = "Option::is_none",
2491 deserialize_with = "deserialize_option_number_from_string",
2492 default
2493 )]
2494 pub contact_request_id: Option<i64>,
2495
2496 #[serde(
2497 rename = "contactGroupMemberId",
2498 skip_serializing_if = "Option::is_none",
2499 deserialize_with = "deserialize_option_number_from_string",
2500 default
2501 )]
2502 pub contact_group_member_id: Option<i64>,
2503
2504 #[serde(rename = "contactGrpInvSent")]
2505 pub contact_grp_inv_sent: bool,
2506
2507 #[serde(rename = "groupDirectInv", skip_serializing_if = "Option::is_none")]
2508 pub group_direct_inv: Option<GroupDirectInvitation>,
2509
2510 #[serde(rename = "chatTags")]
2511 pub chat_tags: Vec<i64>,
2512
2513 #[serde(
2514 rename = "chatItemTTL",
2515 skip_serializing_if = "Option::is_none",
2516 deserialize_with = "deserialize_option_number_from_string",
2517 default
2518 )]
2519 pub chat_item_ttl: Option<i64>,
2520
2521 #[serde(rename = "uiThemes", skip_serializing_if = "Option::is_none")]
2522 pub ui_themes: Option<UIThemeEntityOverrides>,
2523
2524 #[serde(rename = "chatDeleted")]
2525 pub chat_deleted: bool,
2526
2527 #[serde(rename = "customData", skip_serializing_if = "Option::is_none")]
2528 pub custom_data: Option<JsonObject>,
2529
2530 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2531 #[cfg_attr(feature = "bon", builder(default))]
2532 pub undocumented: JsonObject,
2533}
2534
2535#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2536#[serde(tag = "type")]
2537#[non_exhaustive]
2538pub enum ContactAddressPlan {
2539 #[serde(rename = "ok")]
2540 Ok {
2541 #[serde(rename = "contactSLinkData_", skip_serializing_if = "Option::is_none")]
2542 contact_s_link_data: Option<ContactShortLinkData>,
2543
2544 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2545 undocumented: JsonObject,
2546 },
2547 #[serde(rename = "ownLink")]
2548 OwnLink,
2549 #[serde(rename = "connectingConfirmReconnect")]
2550 ConnectingConfirmReconnect,
2551 #[serde(rename = "connectingProhibit")]
2552 ConnectingProhibit {
2553 #[serde(rename = "contact")]
2554 contact: Contact,
2555
2556 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2557 undocumented: JsonObject,
2558 },
2559 #[serde(rename = "known")]
2560 Known {
2561 #[serde(rename = "contact")]
2562 contact: Contact,
2563
2564 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2565 undocumented: JsonObject,
2566 },
2567 #[serde(rename = "contactViaAddress")]
2568 ContactViaAddress {
2569 #[serde(rename = "contact")]
2570 contact: Contact,
2571
2572 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2573 undocumented: JsonObject,
2574 },
2575 #[serde(untagged)]
2576 Undocumented(JsonObject),
2577}
2578
2579impl ContactAddressPlan {
2580 pub fn ok(contact_s_link_data: Option<ContactShortLinkData>) -> Self {
2581 Self::Ok {
2582 contact_s_link_data,
2583 undocumented: Default::default(),
2584 }
2585 }
2586
2587 pub fn own_link() -> Self {
2588 Self::OwnLink
2589 }
2590
2591 pub fn connecting_confirm_reconnect() -> Self {
2592 Self::ConnectingConfirmReconnect
2593 }
2594
2595 pub fn connecting_prohibit(contact: Contact) -> Self {
2596 Self::ConnectingProhibit {
2597 contact,
2598 undocumented: Default::default(),
2599 }
2600 }
2601
2602 pub fn known(contact: Contact) -> Self {
2603 Self::Known {
2604 contact,
2605 undocumented: Default::default(),
2606 }
2607 }
2608
2609 pub fn contact_via_address(contact: Contact) -> Self {
2610 Self::ContactViaAddress {
2611 contact,
2612 undocumented: Default::default(),
2613 }
2614 }
2615}
2616
2617#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2618#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2619#[cfg_attr(feature = "bon", builder(on(String, into)))]
2620pub struct ContactShortLinkData {
2621 #[serde(rename = "profile")]
2622 pub profile: Profile,
2623
2624 #[serde(rename = "message", skip_serializing_if = "Option::is_none")]
2625 pub message: Option<MsgContent>,
2626
2627 #[serde(rename = "business")]
2628 pub business: bool,
2629
2630 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2631 #[cfg_attr(feature = "bon", builder(default))]
2632 pub undocumented: JsonObject,
2633}
2634
2635#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2636#[non_exhaustive]
2637pub enum ContactStatus {
2638 #[default]
2639 #[serde(rename = "active")]
2640 Active,
2641 #[serde(rename = "deleted")]
2642 Deleted,
2643 #[serde(rename = "deletedByUser")]
2644 DeletedByUser,
2645}
2646
2647#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2648#[serde(tag = "type")]
2649#[non_exhaustive]
2650pub enum ContactUserPref {
2651 #[serde(rename = "contact")]
2652 Contact {
2653 #[serde(rename = "preference")]
2654 preference: SimplePreference,
2655
2656 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2657 undocumented: JsonObject,
2658 },
2659 #[serde(rename = "user")]
2660 User {
2661 #[serde(rename = "preference")]
2662 preference: SimplePreference,
2663
2664 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2665 undocumented: JsonObject,
2666 },
2667 #[serde(untagged)]
2668 Undocumented(JsonObject),
2669}
2670
2671impl ContactUserPref {
2672 pub fn contact(preference: SimplePreference) -> Self {
2673 Self::Contact {
2674 preference,
2675 undocumented: Default::default(),
2676 }
2677 }
2678
2679 pub fn user(preference: SimplePreference) -> Self {
2680 Self::User {
2681 preference,
2682 undocumented: Default::default(),
2683 }
2684 }
2685}
2686
2687#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2688#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2689#[cfg_attr(feature = "bon", builder(on(String, into)))]
2690pub struct ContactUserPreference {
2691 #[serde(rename = "enabled")]
2692 pub enabled: PrefEnabled,
2693
2694 #[serde(rename = "userPreference")]
2695 pub user_preference: ContactUserPref,
2696
2697 #[serde(rename = "contactPreference")]
2698 pub contact_preference: SimplePreference,
2699
2700 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2701 #[cfg_attr(feature = "bon", builder(default))]
2702 pub undocumented: JsonObject,
2703}
2704
2705#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2706#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2707#[cfg_attr(feature = "bon", builder(on(String, into)))]
2708pub struct ContactUserPreferences {
2709 #[serde(rename = "timedMessages")]
2710 pub timed_messages: ContactUserPreference,
2711
2712 #[serde(rename = "fullDelete")]
2713 pub full_delete: ContactUserPreference,
2714
2715 #[serde(rename = "reactions")]
2716 pub reactions: ContactUserPreference,
2717
2718 #[serde(rename = "voice")]
2719 pub voice: ContactUserPreference,
2720
2721 #[serde(rename = "files")]
2722 pub files: ContactUserPreference,
2723
2724 #[serde(rename = "calls")]
2725 pub calls: ContactUserPreference,
2726
2727 #[serde(rename = "sessions")]
2728 pub sessions: ContactUserPreference,
2729
2730 #[serde(rename = "commands", skip_serializing_if = "Option::is_none")]
2731 pub commands: Option<Vec<ChatBotCommand>>,
2732
2733 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2734 #[cfg_attr(feature = "bon", builder(default))]
2735 pub undocumented: JsonObject,
2736}
2737
2738#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2744#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2745#[cfg_attr(feature = "bon", builder(on(String, into)))]
2746pub struct CreatedConnLink {
2747 #[serde(rename = "connFullLink")]
2748 pub conn_full_link: String,
2749
2750 #[serde(rename = "connShortLink", skip_serializing_if = "Option::is_none")]
2751 pub conn_short_link: Option<String>,
2752
2753 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2754 #[cfg_attr(feature = "bon", builder(default))]
2755 pub undocumented: JsonObject,
2756}
2757
2758impl CommandSyntax for CreatedConnLink {
2759 const COMMAND_BUF_SIZE: usize = 64;
2760
2761 fn append_command_syntax(&self, buf: &mut String) {
2762 write!(buf, "{}", self.conn_full_link).unwrap();
2763 if let Some(conn_short_link) = &self.conn_short_link {
2764 buf.push(' ');
2765 write!(buf, "{}", conn_short_link).unwrap();
2766 }
2767 }
2768}
2769
2770#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2771#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2772#[cfg_attr(feature = "bon", builder(on(String, into)))]
2773pub struct CryptoFile {
2774 #[serde(rename = "filePath")]
2775 pub file_path: String,
2776
2777 #[serde(rename = "cryptoArgs", skip_serializing_if = "Option::is_none")]
2778 pub crypto_args: Option<CryptoFileArgs>,
2779
2780 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2781 #[cfg_attr(feature = "bon", builder(default))]
2782 pub undocumented: JsonObject,
2783}
2784
2785#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2786#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2787#[cfg_attr(feature = "bon", builder(on(String, into)))]
2788pub struct CryptoFileArgs {
2789 #[serde(rename = "fileKey")]
2790 pub file_key: String,
2791
2792 #[serde(rename = "fileNonce")]
2793 pub file_nonce: String,
2794
2795 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2796 #[cfg_attr(feature = "bon", builder(default))]
2797 pub undocumented: JsonObject,
2798}
2799
2800#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2801#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2802#[cfg_attr(feature = "bon", builder(on(String, into)))]
2803pub struct E2EInfo {
2804 #[serde(rename = "pqEnabled", skip_serializing_if = "Option::is_none")]
2805 pub pq_enabled: Option<bool>,
2806
2807 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2808 #[cfg_attr(feature = "bon", builder(default))]
2809 pub undocumented: JsonObject,
2810}
2811
2812#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2813#[non_exhaustive]
2814pub enum FeatureAllowed {
2815 #[default]
2816 #[serde(rename = "always")]
2817 Always,
2818 #[serde(rename = "yes")]
2819 Yes,
2820 #[serde(rename = "no")]
2821 No,
2822}
2823
2824#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2825#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2826#[cfg_attr(feature = "bon", builder(on(String, into)))]
2827pub struct FileDescr {
2828 #[serde(rename = "fileDescrText")]
2829 pub file_descr_text: String,
2830
2831 #[serde(
2832 rename = "fileDescrPartNo",
2833 deserialize_with = "deserialize_number_from_string"
2834 )]
2835 pub file_descr_part_no: i32,
2836
2837 #[serde(rename = "fileDescrComplete")]
2838 pub file_descr_complete: bool,
2839
2840 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2841 #[cfg_attr(feature = "bon", builder(default))]
2842 pub undocumented: JsonObject,
2843}
2844
2845#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2846#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2847#[cfg_attr(feature = "bon", builder(on(String, into)))]
2848pub struct FileInvitation {
2849 #[serde(rename = "fileName")]
2850 pub file_name: String,
2851
2852 #[serde(
2853 rename = "fileSize",
2854 deserialize_with = "deserialize_number_from_string"
2855 )]
2856 pub file_size: i64,
2857
2858 #[serde(rename = "fileDigest", skip_serializing_if = "Option::is_none")]
2859 pub file_digest: Option<String>,
2860
2861 #[serde(rename = "fileConnReq", skip_serializing_if = "Option::is_none")]
2862 pub file_conn_req: Option<String>,
2863
2864 #[serde(rename = "fileInline", skip_serializing_if = "Option::is_none")]
2865 pub file_inline: Option<InlineFileMode>,
2866
2867 #[serde(rename = "fileDescr", skip_serializing_if = "Option::is_none")]
2868 pub file_descr: Option<FileDescr>,
2869
2870 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2871 #[cfg_attr(feature = "bon", builder(default))]
2872 pub undocumented: JsonObject,
2873}
2874
2875#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2876#[non_exhaustive]
2877pub enum FileProtocol {
2878 #[default]
2879 #[serde(rename = "smp")]
2880 Smp,
2881 #[serde(rename = "xftp")]
2882 Xftp,
2883 #[serde(rename = "local")]
2884 Local,
2885}
2886
2887#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
2888#[non_exhaustive]
2889pub enum FileStatus {
2890 #[default]
2891 #[serde(rename = "new")]
2892 New,
2893 #[serde(rename = "accepted")]
2894 Accepted,
2895 #[serde(rename = "connected")]
2896 Connected,
2897 #[serde(rename = "complete")]
2898 Complete,
2899 #[serde(rename = "cancelled")]
2900 Cancelled,
2901}
2902
2903#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2904#[cfg_attr(feature = "bon", derive(::bon::Builder))]
2905#[cfg_attr(feature = "bon", builder(on(String, into)))]
2906pub struct FileTransferMeta {
2907 #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
2908 pub file_id: i64,
2909
2910 #[serde(rename = "xftpSndFile", skip_serializing_if = "Option::is_none")]
2911 pub xftp_snd_file: Option<XFTPSndFile>,
2912
2913 #[serde(
2914 rename = "xftpRedirectFor",
2915 skip_serializing_if = "Option::is_none",
2916 deserialize_with = "deserialize_option_number_from_string",
2917 default
2918 )]
2919 pub xftp_redirect_for: Option<i64>,
2920
2921 #[serde(rename = "fileName")]
2922 pub file_name: String,
2923
2924 #[serde(rename = "filePath")]
2925 pub file_path: String,
2926
2927 #[serde(
2928 rename = "fileSize",
2929 deserialize_with = "deserialize_number_from_string"
2930 )]
2931 pub file_size: i64,
2932
2933 #[serde(rename = "fileInline", skip_serializing_if = "Option::is_none")]
2934 pub file_inline: Option<InlineFileMode>,
2935
2936 #[serde(
2937 rename = "chunkSize",
2938 deserialize_with = "deserialize_number_from_string"
2939 )]
2940 pub chunk_size: i64,
2941
2942 #[serde(rename = "cancelled")]
2943 pub cancelled: bool,
2944
2945 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2946 #[cfg_attr(feature = "bon", builder(default))]
2947 pub undocumented: JsonObject,
2948}
2949
2950#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
2951#[serde(tag = "type")]
2952#[non_exhaustive]
2953pub enum Format {
2954 #[serde(rename = "bold")]
2955 Bold,
2956 #[serde(rename = "italic")]
2957 Italic,
2958 #[serde(rename = "strikeThrough")]
2959 StrikeThrough,
2960 #[serde(rename = "snippet")]
2961 Snippet,
2962 #[serde(rename = "secret")]
2963 Secret,
2964 #[serde(rename = "colored")]
2965 Colored {
2966 #[serde(rename = "color")]
2967 color: Color,
2968
2969 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2970 undocumented: JsonObject,
2971 },
2972 #[serde(rename = "uri")]
2973 Uri,
2974 #[serde(rename = "hyperLink")]
2975 HyperLink {
2976 #[serde(rename = "showText", skip_serializing_if = "Option::is_none")]
2977 show_text: Option<String>,
2978
2979 #[serde(rename = "linkUri")]
2980 link_uri: String,
2981
2982 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
2983 undocumented: JsonObject,
2984 },
2985 #[serde(rename = "simplexLink")]
2986 SimplexLink {
2987 #[serde(rename = "showText", skip_serializing_if = "Option::is_none")]
2988 show_text: Option<String>,
2989
2990 #[serde(rename = "linkType")]
2991 link_type: SimplexLinkType,
2992
2993 #[serde(rename = "simplexUri")]
2994 simplex_uri: String,
2995
2996 #[serde(rename = "smpHosts")]
2997 smp_hosts: Vec<String>,
2998
2999 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3000 undocumented: JsonObject,
3001 },
3002 #[serde(rename = "command")]
3003 Command {
3004 #[serde(rename = "commandStr")]
3005 command_str: String,
3006
3007 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3008 undocumented: JsonObject,
3009 },
3010 #[serde(rename = "mention")]
3011 Mention {
3012 #[serde(rename = "memberName")]
3013 member_name: String,
3014
3015 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3016 undocumented: JsonObject,
3017 },
3018 #[serde(rename = "email")]
3019 Email,
3020 #[serde(rename = "phone")]
3021 Phone,
3022 #[serde(untagged)]
3023 Undocumented(JsonObject),
3024}
3025
3026impl Format {
3027 pub fn bold() -> Self {
3028 Self::Bold
3029 }
3030
3031 pub fn italic() -> Self {
3032 Self::Italic
3033 }
3034
3035 pub fn strike_through() -> Self {
3036 Self::StrikeThrough
3037 }
3038
3039 pub fn snippet() -> Self {
3040 Self::Snippet
3041 }
3042
3043 pub fn secret() -> Self {
3044 Self::Secret
3045 }
3046
3047 pub fn colored(color: Color) -> Self {
3048 Self::Colored {
3049 color,
3050 undocumented: Default::default(),
3051 }
3052 }
3053
3054 pub fn uri() -> Self {
3055 Self::Uri
3056 }
3057
3058 pub fn hyper_link(show_text: Option<String>, link_uri: String) -> Self {
3059 Self::HyperLink {
3060 show_text,
3061 link_uri,
3062 undocumented: Default::default(),
3063 }
3064 }
3065
3066 pub fn simplex_link(
3067 show_text: Option<String>,
3068 link_type: SimplexLinkType,
3069 simplex_uri: String,
3070 smp_hosts: Vec<String>,
3071 ) -> Self {
3072 Self::SimplexLink {
3073 show_text,
3074 link_type,
3075 simplex_uri,
3076 smp_hosts,
3077 undocumented: Default::default(),
3078 }
3079 }
3080
3081 pub fn command(command_str: String) -> Self {
3082 Self::Command {
3083 command_str,
3084 undocumented: Default::default(),
3085 }
3086 }
3087
3088 pub fn mention(member_name: String) -> Self {
3089 Self::Mention {
3090 member_name,
3091 undocumented: Default::default(),
3092 }
3093 }
3094
3095 pub fn email() -> Self {
3096 Self::Email
3097 }
3098
3099 pub fn phone() -> Self {
3100 Self::Phone
3101 }
3102}
3103
3104#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3105#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3106#[cfg_attr(feature = "bon", builder(on(String, into)))]
3107pub struct FormattedText {
3108 #[serde(rename = "format", skip_serializing_if = "Option::is_none")]
3109 pub format: Option<Format>,
3110
3111 #[serde(rename = "text")]
3112 pub text: String,
3113
3114 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3115 #[cfg_attr(feature = "bon", builder(default))]
3116 pub undocumented: JsonObject,
3117}
3118
3119#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3120#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3121#[cfg_attr(feature = "bon", builder(on(String, into)))]
3122pub struct FullGroupPreferences {
3123 #[serde(rename = "timedMessages")]
3124 pub timed_messages: TimedMessagesGroupPreference,
3125
3126 #[serde(rename = "directMessages")]
3127 pub direct_messages: RoleGroupPreference,
3128
3129 #[serde(rename = "fullDelete")]
3130 pub full_delete: GroupPreference,
3131
3132 #[serde(rename = "reactions")]
3133 pub reactions: GroupPreference,
3134
3135 #[serde(rename = "voice")]
3136 pub voice: RoleGroupPreference,
3137
3138 #[serde(rename = "files")]
3139 pub files: RoleGroupPreference,
3140
3141 #[serde(rename = "simplexLinks")]
3142 pub simplex_links: RoleGroupPreference,
3143
3144 #[serde(rename = "reports")]
3145 pub reports: GroupPreference,
3146
3147 #[serde(rename = "history")]
3148 pub history: GroupPreference,
3149
3150 #[serde(rename = "sessions")]
3151 pub sessions: RoleGroupPreference,
3152
3153 #[serde(rename = "commands")]
3154 pub commands: Vec<ChatBotCommand>,
3155
3156 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3157 #[cfg_attr(feature = "bon", builder(default))]
3158 pub undocumented: JsonObject,
3159}
3160
3161#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3162#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3163#[cfg_attr(feature = "bon", builder(on(String, into)))]
3164pub struct FullPreferences {
3165 #[serde(rename = "timedMessages")]
3166 pub timed_messages: TimedMessagesPreference,
3167
3168 #[serde(rename = "fullDelete")]
3169 pub full_delete: SimplePreference,
3170
3171 #[serde(rename = "reactions")]
3172 pub reactions: SimplePreference,
3173
3174 #[serde(rename = "voice")]
3175 pub voice: SimplePreference,
3176
3177 #[serde(rename = "files")]
3178 pub files: SimplePreference,
3179
3180 #[serde(rename = "calls")]
3181 pub calls: SimplePreference,
3182
3183 #[serde(rename = "sessions")]
3184 pub sessions: SimplePreference,
3185
3186 #[serde(rename = "commands")]
3187 pub commands: Vec<ChatBotCommand>,
3188
3189 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3190 #[cfg_attr(feature = "bon", builder(default))]
3191 pub undocumented: JsonObject,
3192}
3193
3194#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3195#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3196#[cfg_attr(feature = "bon", builder(on(String, into)))]
3197pub struct Group {
3198 #[serde(rename = "groupInfo")]
3199 pub group_info: GroupInfo,
3200
3201 #[serde(rename = "members")]
3202 pub members: Vec<GroupMember>,
3203
3204 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3205 #[cfg_attr(feature = "bon", builder(default))]
3206 pub undocumented: JsonObject,
3207}
3208
3209#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3215#[serde(tag = "type")]
3216#[non_exhaustive]
3217pub enum GroupChatScope {
3218 #[serde(rename = "memberSupport")]
3219 MemberSupport {
3220 #[serde(
3221 rename = "groupMemberId_",
3222 skip_serializing_if = "Option::is_none",
3223 deserialize_with = "deserialize_option_number_from_string",
3224 default
3225 )]
3226 group_member_id: Option<i64>,
3227
3228 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3229 undocumented: JsonObject,
3230 },
3231 #[serde(untagged)]
3232 Undocumented(JsonObject),
3233}
3234
3235impl CommandSyntax for GroupChatScope {
3236 const COMMAND_BUF_SIZE: usize = 64;
3237
3238 fn append_command_syntax(&self, buf: &mut String) {
3239 buf.push_str("(_support");
3240 match self {
3241 Self::MemberSupport {
3242 group_member_id, ..
3243 } => {
3244 if let Some(group_member_id) = group_member_id {
3245 buf.push(':');
3246 write!(buf, "{}", group_member_id).unwrap();
3247 }
3248 }
3249 Self::Undocumented(_) => {}
3250 }
3251 buf.push(')');
3252 }
3253}
3254
3255impl GroupChatScope {
3256 pub fn member_support(group_member_id: Option<i64>) -> Self {
3257 Self::MemberSupport {
3258 group_member_id,
3259 undocumented: Default::default(),
3260 }
3261 }
3262}
3263
3264#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3265#[serde(tag = "type")]
3266#[non_exhaustive]
3267pub enum GroupChatScopeInfo {
3268 #[serde(rename = "memberSupport")]
3269 MemberSupport {
3270 #[serde(rename = "groupMember_", skip_serializing_if = "Option::is_none")]
3271 group_member: Option<GroupMember>,
3272
3273 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3274 undocumented: JsonObject,
3275 },
3276 #[serde(untagged)]
3277 Undocumented(JsonObject),
3278}
3279
3280impl GroupChatScopeInfo {
3281 pub fn member_support(group_member: Option<GroupMember>) -> Self {
3282 Self::MemberSupport {
3283 group_member,
3284 undocumented: Default::default(),
3285 }
3286 }
3287}
3288
3289#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3290#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3291#[cfg_attr(feature = "bon", builder(on(String, into)))]
3292pub struct GroupDirectInvitation {
3293 #[serde(rename = "groupDirectInvLink")]
3294 pub group_direct_inv_link: String,
3295
3296 #[serde(
3297 rename = "fromGroupId_",
3298 skip_serializing_if = "Option::is_none",
3299 deserialize_with = "deserialize_option_number_from_string",
3300 default
3301 )]
3302 pub from_group_id: Option<i64>,
3303
3304 #[serde(
3305 rename = "fromGroupMemberId_",
3306 skip_serializing_if = "Option::is_none",
3307 deserialize_with = "deserialize_option_number_from_string",
3308 default
3309 )]
3310 pub from_group_member_id: Option<i64>,
3311
3312 #[serde(
3313 rename = "fromGroupMemberConnId_",
3314 skip_serializing_if = "Option::is_none",
3315 deserialize_with = "deserialize_option_number_from_string",
3316 default
3317 )]
3318 pub from_group_member_conn_id: Option<i64>,
3319
3320 #[serde(rename = "groupDirectInvStartedConnection")]
3321 pub group_direct_inv_started_connection: bool,
3322
3323 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3324 #[cfg_attr(feature = "bon", builder(default))]
3325 pub undocumented: JsonObject,
3326}
3327
3328#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
3329#[non_exhaustive]
3330pub enum GroupFeature {
3331 #[default]
3332 #[serde(rename = "timedMessages")]
3333 TimedMessages,
3334 #[serde(rename = "directMessages")]
3335 DirectMessages,
3336 #[serde(rename = "fullDelete")]
3337 FullDelete,
3338 #[serde(rename = "reactions")]
3339 Reactions,
3340 #[serde(rename = "voice")]
3341 Voice,
3342 #[serde(rename = "files")]
3343 Files,
3344 #[serde(rename = "simplexLinks")]
3345 SimplexLinks,
3346 #[serde(rename = "reports")]
3347 Reports,
3348 #[serde(rename = "history")]
3349 History,
3350 #[serde(rename = "sessions")]
3351 Sessions,
3352}
3353
3354#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
3355#[non_exhaustive]
3356pub enum GroupFeatureEnabled {
3357 #[default]
3358 #[serde(rename = "on")]
3359 On,
3360 #[serde(rename = "off")]
3361 Off,
3362}
3363
3364#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3365#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3366#[cfg_attr(feature = "bon", builder(on(String, into)))]
3367pub struct GroupInfo {
3368 #[serde(
3369 rename = "groupId",
3370 deserialize_with = "deserialize_number_from_string"
3371 )]
3372 pub group_id: i64,
3373
3374 #[serde(rename = "localDisplayName")]
3375 pub local_display_name: String,
3376
3377 #[serde(rename = "groupProfile")]
3378 pub group_profile: GroupProfile,
3379
3380 #[serde(rename = "localAlias")]
3381 pub local_alias: String,
3382
3383 #[serde(rename = "businessChat", skip_serializing_if = "Option::is_none")]
3384 pub business_chat: Option<BusinessChatInfo>,
3385
3386 #[serde(rename = "fullGroupPreferences")]
3387 pub full_group_preferences: FullGroupPreferences,
3388
3389 #[serde(rename = "membership")]
3390 pub membership: GroupMember,
3391
3392 #[serde(rename = "chatSettings")]
3393 pub chat_settings: ChatSettings,
3394
3395 #[serde(rename = "createdAt")]
3396 pub created_at: UtcTime,
3397
3398 #[serde(rename = "updatedAt")]
3399 pub updated_at: UtcTime,
3400
3401 #[serde(rename = "chatTs", skip_serializing_if = "Option::is_none")]
3402 pub chat_ts: Option<UtcTime>,
3403
3404 #[serde(
3405 rename = "userMemberProfileSentAt",
3406 skip_serializing_if = "Option::is_none"
3407 )]
3408 pub user_member_profile_sent_at: Option<UtcTime>,
3409
3410 #[serde(rename = "preparedGroup", skip_serializing_if = "Option::is_none")]
3411 pub prepared_group: Option<PreparedGroup>,
3412
3413 #[serde(rename = "chatTags")]
3414 pub chat_tags: Vec<i64>,
3415
3416 #[serde(
3417 rename = "chatItemTTL",
3418 skip_serializing_if = "Option::is_none",
3419 deserialize_with = "deserialize_option_number_from_string",
3420 default
3421 )]
3422 pub chat_item_ttl: Option<i64>,
3423
3424 #[serde(rename = "uiThemes", skip_serializing_if = "Option::is_none")]
3425 pub ui_themes: Option<UIThemeEntityOverrides>,
3426
3427 #[serde(rename = "customData", skip_serializing_if = "Option::is_none")]
3428 pub custom_data: Option<JsonObject>,
3429
3430 #[serde(
3431 rename = "membersRequireAttention",
3432 deserialize_with = "deserialize_number_from_string"
3433 )]
3434 pub members_require_attention: i32,
3435
3436 #[serde(rename = "viaGroupLinkUri", skip_serializing_if = "Option::is_none")]
3437 pub via_group_link_uri: Option<String>,
3438
3439 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3440 #[cfg_attr(feature = "bon", builder(default))]
3441 pub undocumented: JsonObject,
3442}
3443
3444#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3445#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3446#[cfg_attr(feature = "bon", builder(on(String, into)))]
3447pub struct GroupInfoSummary {
3448 #[serde(rename = "groupInfo")]
3449 pub group_info: GroupInfo,
3450
3451 #[serde(rename = "groupSummary")]
3452 pub group_summary: GroupSummary,
3453
3454 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3455 #[cfg_attr(feature = "bon", builder(default))]
3456 pub undocumented: JsonObject,
3457}
3458
3459#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3460#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3461#[cfg_attr(feature = "bon", builder(on(String, into)))]
3462pub struct GroupLink {
3463 #[serde(
3464 rename = "userContactLinkId",
3465 deserialize_with = "deserialize_number_from_string"
3466 )]
3467 pub user_contact_link_id: i64,
3468
3469 #[serde(rename = "connLinkContact")]
3470 pub conn_link_contact: CreatedConnLink,
3471
3472 #[serde(rename = "shortLinkDataSet")]
3473 pub short_link_data_set: bool,
3474
3475 #[serde(rename = "shortLinkLargeDataSet")]
3476 pub short_link_large_data_set: bool,
3477
3478 #[serde(rename = "groupLinkId")]
3479 pub group_link_id: String,
3480
3481 #[serde(rename = "acceptMemberRole")]
3482 pub accept_member_role: GroupMemberRole,
3483
3484 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3485 #[cfg_attr(feature = "bon", builder(default))]
3486 pub undocumented: JsonObject,
3487}
3488
3489#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3490#[serde(tag = "type")]
3491#[non_exhaustive]
3492pub enum GroupLinkPlan {
3493 #[serde(rename = "ok")]
3494 Ok {
3495 #[serde(rename = "groupSLinkData_", skip_serializing_if = "Option::is_none")]
3496 group_s_link_data: Option<GroupShortLinkData>,
3497
3498 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3499 undocumented: JsonObject,
3500 },
3501 #[serde(rename = "ownLink")]
3502 OwnLink {
3503 #[serde(rename = "groupInfo")]
3504 group_info: GroupInfo,
3505
3506 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3507 undocumented: JsonObject,
3508 },
3509 #[serde(rename = "connectingConfirmReconnect")]
3510 ConnectingConfirmReconnect,
3511 #[serde(rename = "connectingProhibit")]
3512 ConnectingProhibit {
3513 #[serde(rename = "groupInfo_", skip_serializing_if = "Option::is_none")]
3514 group_info: Option<GroupInfo>,
3515
3516 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3517 undocumented: JsonObject,
3518 },
3519 #[serde(rename = "known")]
3520 Known {
3521 #[serde(rename = "groupInfo")]
3522 group_info: GroupInfo,
3523
3524 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3525 undocumented: JsonObject,
3526 },
3527 #[serde(untagged)]
3528 Undocumented(JsonObject),
3529}
3530
3531impl GroupLinkPlan {
3532 pub fn ok(group_s_link_data: Option<GroupShortLinkData>) -> Self {
3533 Self::Ok {
3534 group_s_link_data,
3535 undocumented: Default::default(),
3536 }
3537 }
3538
3539 pub fn own_link(group_info: GroupInfo) -> Self {
3540 Self::OwnLink {
3541 group_info,
3542 undocumented: Default::default(),
3543 }
3544 }
3545
3546 pub fn connecting_confirm_reconnect() -> Self {
3547 Self::ConnectingConfirmReconnect
3548 }
3549
3550 pub fn connecting_prohibit(group_info: Option<GroupInfo>) -> Self {
3551 Self::ConnectingProhibit {
3552 group_info,
3553 undocumented: Default::default(),
3554 }
3555 }
3556
3557 pub fn known(group_info: GroupInfo) -> Self {
3558 Self::Known {
3559 group_info,
3560 undocumented: Default::default(),
3561 }
3562 }
3563}
3564
3565#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3566#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3567#[cfg_attr(feature = "bon", builder(on(String, into)))]
3568pub struct GroupMember {
3569 #[serde(
3570 rename = "groupMemberId",
3571 deserialize_with = "deserialize_number_from_string"
3572 )]
3573 pub group_member_id: i64,
3574
3575 #[serde(
3576 rename = "groupId",
3577 deserialize_with = "deserialize_number_from_string"
3578 )]
3579 pub group_id: i64,
3580
3581 #[serde(rename = "memberId")]
3582 pub member_id: String,
3583
3584 #[serde(rename = "memberRole")]
3585 pub member_role: GroupMemberRole,
3586
3587 #[serde(rename = "memberCategory")]
3588 pub member_category: GroupMemberCategory,
3589
3590 #[serde(rename = "memberStatus")]
3591 pub member_status: GroupMemberStatus,
3592
3593 #[serde(rename = "memberSettings")]
3594 pub member_settings: GroupMemberSettings,
3595
3596 #[serde(rename = "blockedByAdmin")]
3597 pub blocked_by_admin: bool,
3598
3599 #[serde(rename = "invitedBy")]
3600 pub invited_by: InvitedBy,
3601
3602 #[serde(
3603 rename = "invitedByGroupMemberId",
3604 skip_serializing_if = "Option::is_none",
3605 deserialize_with = "deserialize_option_number_from_string",
3606 default
3607 )]
3608 pub invited_by_group_member_id: Option<i64>,
3609
3610 #[serde(rename = "localDisplayName")]
3611 pub local_display_name: String,
3612
3613 #[serde(rename = "memberProfile")]
3614 pub member_profile: LocalProfile,
3615
3616 #[serde(
3617 rename = "memberContactId",
3618 skip_serializing_if = "Option::is_none",
3619 deserialize_with = "deserialize_option_number_from_string",
3620 default
3621 )]
3622 pub member_contact_id: Option<i64>,
3623
3624 #[serde(
3625 rename = "memberContactProfileId",
3626 deserialize_with = "deserialize_number_from_string"
3627 )]
3628 pub member_contact_profile_id: i64,
3629
3630 #[serde(rename = "activeConn", skip_serializing_if = "Option::is_none")]
3631 pub active_conn: Option<Connection>,
3632
3633 #[serde(rename = "memberChatVRange")]
3634 pub member_chat_v_range: VersionRange,
3635
3636 #[serde(rename = "createdAt")]
3637 pub created_at: UtcTime,
3638
3639 #[serde(rename = "updatedAt")]
3640 pub updated_at: UtcTime,
3641
3642 #[serde(rename = "supportChat", skip_serializing_if = "Option::is_none")]
3643 pub support_chat: Option<GroupSupportChat>,
3644
3645 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3646 #[cfg_attr(feature = "bon", builder(default))]
3647 pub undocumented: JsonObject,
3648}
3649
3650#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3651#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3652#[cfg_attr(feature = "bon", builder(on(String, into)))]
3653pub struct GroupMemberAdmission {
3654 #[serde(rename = "review", skip_serializing_if = "Option::is_none")]
3655 pub review: Option<MemberCriteria>,
3656
3657 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3658 #[cfg_attr(feature = "bon", builder(default))]
3659 pub undocumented: JsonObject,
3660}
3661
3662#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
3663#[non_exhaustive]
3664pub enum GroupMemberCategory {
3665 #[default]
3666 #[serde(rename = "user")]
3667 User,
3668 #[serde(rename = "invitee")]
3669 Invitee,
3670 #[serde(rename = "host")]
3671 Host,
3672 #[serde(rename = "pre")]
3673 Pre,
3674 #[serde(rename = "post")]
3675 Post,
3676}
3677
3678#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3679#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3680#[cfg_attr(feature = "bon", builder(on(String, into)))]
3681pub struct GroupMemberRef {
3682 #[serde(
3683 rename = "groupMemberId",
3684 deserialize_with = "deserialize_number_from_string"
3685 )]
3686 pub group_member_id: i64,
3687
3688 #[serde(rename = "profile")]
3689 pub profile: Profile,
3690
3691 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3692 #[cfg_attr(feature = "bon", builder(default))]
3693 pub undocumented: JsonObject,
3694}
3695
3696#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
3697#[non_exhaustive]
3698pub enum GroupMemberRole {
3699 #[default]
3700 #[serde(rename = "observer")]
3701 Observer,
3702 #[serde(rename = "author")]
3703 Author,
3704 #[serde(rename = "member")]
3705 Member,
3706 #[serde(rename = "moderator")]
3707 Moderator,
3708 #[serde(rename = "admin")]
3709 Admin,
3710 #[serde(rename = "owner")]
3711 Owner,
3712}
3713
3714#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3715#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3716#[cfg_attr(feature = "bon", builder(on(String, into)))]
3717pub struct GroupMemberSettings {
3718 #[serde(rename = "showMessages")]
3719 pub show_messages: bool,
3720
3721 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3722 #[cfg_attr(feature = "bon", builder(default))]
3723 pub undocumented: JsonObject,
3724}
3725
3726#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
3727#[non_exhaustive]
3728pub enum GroupMemberStatus {
3729 #[default]
3730 #[serde(rename = "rejected")]
3731 Rejected,
3732 #[serde(rename = "removed")]
3733 Removed,
3734 #[serde(rename = "left")]
3735 Left,
3736 #[serde(rename = "deleted")]
3737 Deleted,
3738 #[serde(rename = "unknown")]
3739 Unknown,
3740 #[serde(rename = "invited")]
3741 Invited,
3742 #[serde(rename = "pending_approval")]
3743 PendingApproval,
3744 #[serde(rename = "pending_review")]
3745 PendingReview,
3746 #[serde(rename = "introduced")]
3747 Introduced,
3748 #[serde(rename = "intro-inv")]
3749 IntroInv,
3750 #[serde(rename = "accepted")]
3751 Accepted,
3752 #[serde(rename = "announced")]
3753 Announced,
3754 #[serde(rename = "connected")]
3755 Connected,
3756 #[serde(rename = "complete")]
3757 Complete,
3758 #[serde(rename = "creator")]
3759 Creator,
3760}
3761
3762#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3763#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3764#[cfg_attr(feature = "bon", builder(on(String, into)))]
3765pub struct GroupPreference {
3766 #[serde(rename = "enable")]
3767 pub enable: GroupFeatureEnabled,
3768
3769 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3770 #[cfg_attr(feature = "bon", builder(default))]
3771 pub undocumented: JsonObject,
3772}
3773
3774#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3775#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3776#[cfg_attr(feature = "bon", builder(on(String, into)))]
3777pub struct GroupPreferences {
3778 #[serde(rename = "timedMessages", skip_serializing_if = "Option::is_none")]
3779 pub timed_messages: Option<TimedMessagesGroupPreference>,
3780
3781 #[serde(rename = "directMessages", skip_serializing_if = "Option::is_none")]
3782 pub direct_messages: Option<RoleGroupPreference>,
3783
3784 #[serde(rename = "fullDelete", skip_serializing_if = "Option::is_none")]
3785 pub full_delete: Option<GroupPreference>,
3786
3787 #[serde(rename = "reactions", skip_serializing_if = "Option::is_none")]
3788 pub reactions: Option<GroupPreference>,
3789
3790 #[serde(rename = "voice", skip_serializing_if = "Option::is_none")]
3791 pub voice: Option<RoleGroupPreference>,
3792
3793 #[serde(rename = "files", skip_serializing_if = "Option::is_none")]
3794 pub files: Option<RoleGroupPreference>,
3795
3796 #[serde(rename = "simplexLinks", skip_serializing_if = "Option::is_none")]
3797 pub simplex_links: Option<RoleGroupPreference>,
3798
3799 #[serde(rename = "reports", skip_serializing_if = "Option::is_none")]
3800 pub reports: Option<GroupPreference>,
3801
3802 #[serde(rename = "history", skip_serializing_if = "Option::is_none")]
3803 pub history: Option<GroupPreference>,
3804
3805 #[serde(rename = "sessions", skip_serializing_if = "Option::is_none")]
3806 pub sessions: Option<RoleGroupPreference>,
3807
3808 #[serde(rename = "commands", skip_serializing_if = "Option::is_none")]
3809 pub commands: Option<Vec<ChatBotCommand>>,
3810
3811 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3812 #[cfg_attr(feature = "bon", builder(default))]
3813 pub undocumented: JsonObject,
3814}
3815
3816#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3817#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3818#[cfg_attr(feature = "bon", builder(on(String, into)))]
3819pub struct GroupProfile {
3820 #[serde(rename = "displayName")]
3821 pub display_name: String,
3822
3823 #[serde(rename = "fullName")]
3824 pub full_name: String,
3825
3826 #[serde(rename = "shortDescr", skip_serializing_if = "Option::is_none")]
3827 pub short_descr: Option<String>,
3828
3829 #[serde(rename = "description", skip_serializing_if = "Option::is_none")]
3830 pub description: Option<String>,
3831
3832 #[serde(rename = "image", skip_serializing_if = "Option::is_none")]
3833 pub image: Option<String>,
3834
3835 #[serde(rename = "groupPreferences", skip_serializing_if = "Option::is_none")]
3836 pub group_preferences: Option<GroupPreferences>,
3837
3838 #[serde(rename = "memberAdmission", skip_serializing_if = "Option::is_none")]
3839 pub member_admission: Option<GroupMemberAdmission>,
3840
3841 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3842 #[cfg_attr(feature = "bon", builder(default))]
3843 pub undocumented: JsonObject,
3844}
3845
3846#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3847#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3848#[cfg_attr(feature = "bon", builder(on(String, into)))]
3849pub struct GroupShortLinkData {
3850 #[serde(rename = "groupProfile")]
3851 pub group_profile: GroupProfile,
3852
3853 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3854 #[cfg_attr(feature = "bon", builder(default))]
3855 pub undocumented: JsonObject,
3856}
3857
3858#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3859#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3860#[cfg_attr(feature = "bon", builder(on(String, into)))]
3861pub struct GroupSummary {
3862 #[serde(
3863 rename = "currentMembers",
3864 deserialize_with = "deserialize_number_from_string"
3865 )]
3866 pub current_members: i32,
3867
3868 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3869 #[cfg_attr(feature = "bon", builder(default))]
3870 pub undocumented: JsonObject,
3871}
3872
3873#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3874#[cfg_attr(feature = "bon", derive(::bon::Builder))]
3875#[cfg_attr(feature = "bon", builder(on(String, into)))]
3876pub struct GroupSupportChat {
3877 #[serde(rename = "chatTs")]
3878 pub chat_ts: UtcTime,
3879
3880 #[serde(rename = "unread", deserialize_with = "deserialize_number_from_string")]
3881 pub unread: i64,
3882
3883 #[serde(
3884 rename = "memberAttention",
3885 deserialize_with = "deserialize_number_from_string"
3886 )]
3887 pub member_attention: i64,
3888
3889 #[serde(
3890 rename = "mentions",
3891 deserialize_with = "deserialize_number_from_string"
3892 )]
3893 pub mentions: i64,
3894
3895 #[serde(
3896 rename = "lastMsgFromMemberTs",
3897 skip_serializing_if = "Option::is_none"
3898 )]
3899 pub last_msg_from_member_ts: Option<UtcTime>,
3900
3901 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3902 #[cfg_attr(feature = "bon", builder(default))]
3903 pub undocumented: JsonObject,
3904}
3905
3906#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
3907#[non_exhaustive]
3908pub enum InlineFileMode {
3909 #[default]
3910 #[serde(rename = "offer")]
3911 Offer,
3912 #[serde(rename = "sent")]
3913 Sent,
3914}
3915
3916#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3917#[serde(tag = "type")]
3918#[non_exhaustive]
3919pub enum InvitationLinkPlan {
3920 #[serde(rename = "ok")]
3921 Ok {
3922 #[serde(rename = "contactSLinkData_", skip_serializing_if = "Option::is_none")]
3923 contact_s_link_data: Option<ContactShortLinkData>,
3924
3925 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3926 undocumented: JsonObject,
3927 },
3928 #[serde(rename = "ownLink")]
3929 OwnLink,
3930 #[serde(rename = "connecting")]
3931 Connecting {
3932 #[serde(rename = "contact_", skip_serializing_if = "Option::is_none")]
3933 contact: Option<Contact>,
3934
3935 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3936 undocumented: JsonObject,
3937 },
3938 #[serde(rename = "known")]
3939 Known {
3940 #[serde(rename = "contact")]
3941 contact: Contact,
3942
3943 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3944 undocumented: JsonObject,
3945 },
3946 #[serde(untagged)]
3947 Undocumented(JsonObject),
3948}
3949
3950impl InvitationLinkPlan {
3951 pub fn ok(contact_s_link_data: Option<ContactShortLinkData>) -> Self {
3952 Self::Ok {
3953 contact_s_link_data,
3954 undocumented: Default::default(),
3955 }
3956 }
3957
3958 pub fn own_link() -> Self {
3959 Self::OwnLink
3960 }
3961
3962 pub fn connecting(contact: Option<Contact>) -> Self {
3963 Self::Connecting {
3964 contact,
3965 undocumented: Default::default(),
3966 }
3967 }
3968
3969 pub fn known(contact: Contact) -> Self {
3970 Self::Known {
3971 contact,
3972 undocumented: Default::default(),
3973 }
3974 }
3975}
3976
3977#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
3978#[serde(tag = "type")]
3979#[non_exhaustive]
3980pub enum InvitedBy {
3981 #[serde(rename = "contact")]
3982 Contact {
3983 #[serde(
3984 rename = "byContactId",
3985 deserialize_with = "deserialize_number_from_string"
3986 )]
3987 by_contact_id: i64,
3988
3989 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
3990 undocumented: JsonObject,
3991 },
3992 #[serde(rename = "user")]
3993 User,
3994 #[serde(rename = "unknown")]
3995 Unknown,
3996 #[serde(untagged)]
3997 Undocumented(JsonObject),
3998}
3999
4000impl InvitedBy {
4001 pub fn contact(by_contact_id: i64) -> Self {
4002 Self::Contact {
4003 by_contact_id,
4004 undocumented: Default::default(),
4005 }
4006 }
4007
4008 pub fn user() -> Self {
4009 Self::User
4010 }
4011
4012 pub fn unknown() -> Self {
4013 Self::Unknown
4014 }
4015}
4016
4017#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4018#[serde(tag = "type")]
4019#[non_exhaustive]
4020pub enum LinkContent {
4021 #[serde(rename = "page")]
4022 Page,
4023 #[serde(rename = "image")]
4024 Image,
4025 #[serde(rename = "video")]
4026 Video {
4027 #[serde(
4028 rename = "duration",
4029 skip_serializing_if = "Option::is_none",
4030 deserialize_with = "deserialize_option_number_from_string",
4031 default
4032 )]
4033 duration: Option<i32>,
4034
4035 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4036 undocumented: JsonObject,
4037 },
4038 #[serde(rename = "unknown")]
4039 Unknown {
4040 #[serde(rename = "tag")]
4041 tag: String,
4042
4043 #[serde(rename = "json")]
4044 json: JsonObject,
4045
4046 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4047 undocumented: JsonObject,
4048 },
4049 #[serde(untagged)]
4050 Undocumented(JsonObject),
4051}
4052
4053impl LinkContent {
4054 pub fn page() -> Self {
4055 Self::Page
4056 }
4057
4058 pub fn image() -> Self {
4059 Self::Image
4060 }
4061
4062 pub fn video(duration: Option<i32>) -> Self {
4063 Self::Video {
4064 duration,
4065 undocumented: Default::default(),
4066 }
4067 }
4068
4069 pub fn unknown(tag: String, json: JsonObject) -> Self {
4070 Self::Unknown {
4071 tag,
4072 json,
4073 undocumented: Default::default(),
4074 }
4075 }
4076}
4077
4078#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4079#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4080#[cfg_attr(feature = "bon", builder(on(String, into)))]
4081pub struct LinkPreview {
4082 #[serde(rename = "uri")]
4083 pub uri: String,
4084
4085 #[serde(rename = "title")]
4086 pub title: String,
4087
4088 #[serde(rename = "description")]
4089 pub description: String,
4090
4091 #[serde(rename = "image")]
4092 pub image: String,
4093
4094 #[serde(rename = "content", skip_serializing_if = "Option::is_none")]
4095 pub content: Option<LinkContent>,
4096
4097 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4098 #[cfg_attr(feature = "bon", builder(default))]
4099 pub undocumented: JsonObject,
4100}
4101
4102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4103#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4104#[cfg_attr(feature = "bon", builder(on(String, into)))]
4105pub struct LocalProfile {
4106 #[serde(
4107 rename = "profileId",
4108 deserialize_with = "deserialize_number_from_string"
4109 )]
4110 pub profile_id: i64,
4111
4112 #[serde(rename = "displayName")]
4113 pub display_name: String,
4114
4115 #[serde(rename = "fullName")]
4116 pub full_name: String,
4117
4118 #[serde(rename = "shortDescr", skip_serializing_if = "Option::is_none")]
4119 pub short_descr: Option<String>,
4120
4121 #[serde(rename = "image", skip_serializing_if = "Option::is_none")]
4122 pub image: Option<String>,
4123
4124 #[serde(rename = "contactLink", skip_serializing_if = "Option::is_none")]
4125 pub contact_link: Option<String>,
4126
4127 #[serde(rename = "preferences", skip_serializing_if = "Option::is_none")]
4128 pub preferences: Option<Preferences>,
4129
4130 #[serde(rename = "peerType", skip_serializing_if = "Option::is_none")]
4131 pub peer_type: Option<ChatPeerType>,
4132
4133 #[serde(rename = "localAlias")]
4134 pub local_alias: String,
4135
4136 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4137 #[cfg_attr(feature = "bon", builder(default))]
4138 pub undocumented: JsonObject,
4139}
4140
4141#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
4142#[non_exhaustive]
4143pub enum MemberCriteria {
4144 #[default]
4145 #[serde(rename = "all")]
4146 All,
4147}
4148
4149#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4151#[serde(tag = "type")]
4152#[non_exhaustive]
4153pub enum MsgChatLink {
4154 #[serde(rename = "contact")]
4155 Contact {
4156 #[serde(rename = "connLink")]
4157 conn_link: String,
4158
4159 #[serde(rename = "profile")]
4160 profile: Profile,
4161
4162 #[serde(rename = "business")]
4163 business: bool,
4164
4165 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4166 undocumented: JsonObject,
4167 },
4168 #[serde(rename = "invitation")]
4169 Invitation {
4170 #[serde(rename = "invLink")]
4171 inv_link: String,
4172
4173 #[serde(rename = "profile")]
4174 profile: Profile,
4175
4176 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4177 undocumented: JsonObject,
4178 },
4179 #[serde(rename = "group")]
4180 Group {
4181 #[serde(rename = "connLink")]
4182 conn_link: String,
4183
4184 #[serde(rename = "groupProfile")]
4185 group_profile: GroupProfile,
4186
4187 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4188 undocumented: JsonObject,
4189 },
4190 #[serde(untagged)]
4191 Undocumented(JsonObject),
4192}
4193
4194impl MsgChatLink {
4195 pub fn contact(conn_link: String, profile: Profile, business: bool) -> Self {
4196 Self::Contact {
4197 conn_link,
4198 profile,
4199 business,
4200 undocumented: Default::default(),
4201 }
4202 }
4203
4204 pub fn invitation(inv_link: String, profile: Profile) -> Self {
4205 Self::Invitation {
4206 inv_link,
4207 profile,
4208 undocumented: Default::default(),
4209 }
4210 }
4211
4212 pub fn group(conn_link: String, group_profile: GroupProfile) -> Self {
4213 Self::Group {
4214 conn_link,
4215 group_profile,
4216 undocumented: Default::default(),
4217 }
4218 }
4219}
4220
4221#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4222#[serde(tag = "type")]
4223#[non_exhaustive]
4224pub enum MsgContent {
4225 #[serde(rename = "text")]
4226 Text {
4227 #[serde(rename = "text")]
4228 text: String,
4229
4230 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4231 undocumented: JsonObject,
4232 },
4233 #[serde(rename = "link")]
4234 Link {
4235 #[serde(rename = "text")]
4236 text: String,
4237
4238 #[serde(rename = "preview")]
4239 preview: LinkPreview,
4240
4241 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4242 undocumented: JsonObject,
4243 },
4244 #[serde(rename = "image")]
4245 Image {
4246 #[serde(rename = "text")]
4247 text: String,
4248
4249 #[serde(rename = "image")]
4250 image: String,
4251
4252 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4253 undocumented: JsonObject,
4254 },
4255 #[serde(rename = "video")]
4256 Video {
4257 #[serde(rename = "text")]
4258 text: String,
4259
4260 #[serde(rename = "image")]
4261 image: String,
4262
4263 #[serde(
4264 rename = "duration",
4265 deserialize_with = "deserialize_number_from_string"
4266 )]
4267 duration: i32,
4268
4269 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4270 undocumented: JsonObject,
4271 },
4272 #[serde(rename = "voice")]
4273 Voice {
4274 #[serde(rename = "text")]
4275 text: String,
4276
4277 #[serde(
4278 rename = "duration",
4279 deserialize_with = "deserialize_number_from_string"
4280 )]
4281 duration: i32,
4282
4283 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4284 undocumented: JsonObject,
4285 },
4286 #[serde(rename = "file")]
4287 File {
4288 #[serde(rename = "text")]
4289 text: String,
4290
4291 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4292 undocumented: JsonObject,
4293 },
4294 #[serde(rename = "report")]
4295 Report {
4296 #[serde(rename = "text")]
4297 text: String,
4298
4299 #[serde(rename = "reason")]
4300 reason: ReportReason,
4301
4302 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4303 undocumented: JsonObject,
4304 },
4305 #[serde(rename = "chat")]
4306 Chat {
4307 #[serde(rename = "text")]
4308 text: String,
4309
4310 #[serde(rename = "chatLink")]
4311 chat_link: MsgChatLink,
4312
4313 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4314 undocumented: JsonObject,
4315 },
4316 #[serde(rename = "unknown")]
4317 Unknown {
4318 #[serde(rename = "tag")]
4319 tag: String,
4320
4321 #[serde(rename = "text")]
4322 text: String,
4323
4324 #[serde(rename = "json")]
4325 json: JsonObject,
4326
4327 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4328 undocumented: JsonObject,
4329 },
4330 #[serde(untagged)]
4331 Undocumented(JsonObject),
4332}
4333
4334impl MsgContent {
4335 pub fn text(text: String) -> Self {
4336 Self::Text {
4337 text,
4338 undocumented: Default::default(),
4339 }
4340 }
4341
4342 pub fn link(text: String, preview: LinkPreview) -> Self {
4343 Self::Link {
4344 text,
4345 preview,
4346 undocumented: Default::default(),
4347 }
4348 }
4349
4350 pub fn image(text: String, image: String) -> Self {
4351 Self::Image {
4352 text,
4353 image,
4354 undocumented: Default::default(),
4355 }
4356 }
4357
4358 pub fn video(text: String, image: String, duration: i32) -> Self {
4359 Self::Video {
4360 text,
4361 image,
4362 duration,
4363 undocumented: Default::default(),
4364 }
4365 }
4366
4367 pub fn voice(text: String, duration: i32) -> Self {
4368 Self::Voice {
4369 text,
4370 duration,
4371 undocumented: Default::default(),
4372 }
4373 }
4374
4375 pub fn file(text: String) -> Self {
4376 Self::File {
4377 text,
4378 undocumented: Default::default(),
4379 }
4380 }
4381
4382 pub fn report(text: String, reason: ReportReason) -> Self {
4383 Self::Report {
4384 text,
4385 reason,
4386 undocumented: Default::default(),
4387 }
4388 }
4389
4390 pub fn chat(text: String, chat_link: MsgChatLink) -> Self {
4391 Self::Chat {
4392 text,
4393 chat_link,
4394 undocumented: Default::default(),
4395 }
4396 }
4397
4398 pub fn unknown(tag: String, text: String, json: JsonObject) -> Self {
4399 Self::Unknown {
4400 tag,
4401 text,
4402 json,
4403 undocumented: Default::default(),
4404 }
4405 }
4406}
4407
4408#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
4409#[non_exhaustive]
4410pub enum MsgDirection {
4411 #[default]
4412 #[serde(rename = "rcv")]
4413 Rcv,
4414 #[serde(rename = "snd")]
4415 Snd,
4416}
4417
4418#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
4419#[non_exhaustive]
4420pub enum MsgFilter {
4421 #[default]
4422 #[serde(rename = "none")]
4423 None,
4424 #[serde(rename = "all")]
4425 All,
4426 #[serde(rename = "mentions")]
4427 Mentions,
4428}
4429
4430#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4431#[serde(tag = "type")]
4432#[non_exhaustive]
4433pub enum MsgReaction {
4434 #[serde(rename = "emoji")]
4435 Emoji {
4436 #[serde(rename = "emoji")]
4437 emoji: String,
4438
4439 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4440 undocumented: JsonObject,
4441 },
4442 #[serde(rename = "unknown")]
4443 Unknown {
4444 #[serde(rename = "tag")]
4445 tag: String,
4446
4447 #[serde(rename = "json")]
4448 json: JsonObject,
4449
4450 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4451 undocumented: JsonObject,
4452 },
4453 #[serde(untagged)]
4454 Undocumented(JsonObject),
4455}
4456
4457impl MsgReaction {
4458 pub fn emoji(emoji: String) -> Self {
4459 Self::Emoji {
4460 emoji,
4461 undocumented: Default::default(),
4462 }
4463 }
4464
4465 pub fn unknown(tag: String, json: JsonObject) -> Self {
4466 Self::Unknown {
4467 tag,
4468 json,
4469 undocumented: Default::default(),
4470 }
4471 }
4472}
4473
4474#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
4475#[non_exhaustive]
4476pub enum MsgReceiptStatus {
4477 #[default]
4478 #[serde(rename = "ok")]
4479 Ok,
4480 #[serde(rename = "badMsgHash")]
4481 BadMsgHash,
4482}
4483
4484#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4485#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4486#[cfg_attr(feature = "bon", builder(on(String, into)))]
4487pub struct NewUser {
4488 #[serde(rename = "profile", skip_serializing_if = "Option::is_none")]
4489 pub profile: Option<Profile>,
4490
4491 #[serde(rename = "pastTimestamp")]
4492 pub past_timestamp: bool,
4493
4494 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4495 #[cfg_attr(feature = "bon", builder(default))]
4496 pub undocumented: JsonObject,
4497}
4498
4499#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4500#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4501#[cfg_attr(feature = "bon", builder(on(String, into)))]
4502pub struct NoteFolder {
4503 #[serde(
4504 rename = "noteFolderId",
4505 deserialize_with = "deserialize_number_from_string"
4506 )]
4507 pub note_folder_id: i64,
4508
4509 #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
4510 pub user_id: i64,
4511
4512 #[serde(rename = "createdAt")]
4513 pub created_at: UtcTime,
4514
4515 #[serde(rename = "updatedAt")]
4516 pub updated_at: UtcTime,
4517
4518 #[serde(rename = "chatTs")]
4519 pub chat_ts: UtcTime,
4520
4521 #[serde(rename = "favorite")]
4522 pub favorite: bool,
4523
4524 #[serde(rename = "unread")]
4525 pub unread: bool,
4526
4527 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4528 #[cfg_attr(feature = "bon", builder(default))]
4529 pub undocumented: JsonObject,
4530}
4531
4532#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4533#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4534#[cfg_attr(feature = "bon", builder(on(String, into)))]
4535pub struct PendingContactConnection {
4536 #[serde(
4537 rename = "pccConnId",
4538 deserialize_with = "deserialize_number_from_string"
4539 )]
4540 pub pcc_conn_id: i64,
4541
4542 #[serde(rename = "pccAgentConnId")]
4543 pub pcc_agent_conn_id: String,
4544
4545 #[serde(rename = "pccConnStatus")]
4546 pub pcc_conn_status: ConnStatus,
4547
4548 #[serde(rename = "viaContactUri")]
4549 pub via_contact_uri: bool,
4550
4551 #[serde(
4552 rename = "viaUserContactLink",
4553 skip_serializing_if = "Option::is_none",
4554 deserialize_with = "deserialize_option_number_from_string",
4555 default
4556 )]
4557 pub via_user_contact_link: Option<i64>,
4558
4559 #[serde(rename = "groupLinkId", skip_serializing_if = "Option::is_none")]
4560 pub group_link_id: Option<String>,
4561
4562 #[serde(
4563 rename = "customUserProfileId",
4564 skip_serializing_if = "Option::is_none",
4565 deserialize_with = "deserialize_option_number_from_string",
4566 default
4567 )]
4568 pub custom_user_profile_id: Option<i64>,
4569
4570 #[serde(rename = "connLinkInv", skip_serializing_if = "Option::is_none")]
4571 pub conn_link_inv: Option<CreatedConnLink>,
4572
4573 #[serde(rename = "localAlias")]
4574 pub local_alias: String,
4575
4576 #[serde(rename = "createdAt")]
4577 pub created_at: UtcTime,
4578
4579 #[serde(rename = "updatedAt")]
4580 pub updated_at: UtcTime,
4581
4582 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4583 #[cfg_attr(feature = "bon", builder(default))]
4584 pub undocumented: JsonObject,
4585}
4586
4587#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4588#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4589#[cfg_attr(feature = "bon", builder(on(String, into)))]
4590pub struct PrefEnabled {
4591 #[serde(rename = "forUser")]
4592 pub for_user: bool,
4593
4594 #[serde(rename = "forContact")]
4595 pub for_contact: bool,
4596
4597 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4598 #[cfg_attr(feature = "bon", builder(default))]
4599 pub undocumented: JsonObject,
4600}
4601
4602#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4603#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4604#[cfg_attr(feature = "bon", builder(on(String, into)))]
4605pub struct Preferences {
4606 #[serde(rename = "timedMessages", skip_serializing_if = "Option::is_none")]
4607 pub timed_messages: Option<TimedMessagesPreference>,
4608
4609 #[serde(rename = "fullDelete", skip_serializing_if = "Option::is_none")]
4610 pub full_delete: Option<SimplePreference>,
4611
4612 #[serde(rename = "reactions", skip_serializing_if = "Option::is_none")]
4613 pub reactions: Option<SimplePreference>,
4614
4615 #[serde(rename = "voice", skip_serializing_if = "Option::is_none")]
4616 pub voice: Option<SimplePreference>,
4617
4618 #[serde(rename = "files", skip_serializing_if = "Option::is_none")]
4619 pub files: Option<SimplePreference>,
4620
4621 #[serde(rename = "calls", skip_serializing_if = "Option::is_none")]
4622 pub calls: Option<SimplePreference>,
4623
4624 #[serde(rename = "sessions", skip_serializing_if = "Option::is_none")]
4625 pub sessions: Option<SimplePreference>,
4626
4627 #[serde(rename = "commands", skip_serializing_if = "Option::is_none")]
4628 pub commands: Option<Vec<ChatBotCommand>>,
4629
4630 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4631 #[cfg_attr(feature = "bon", builder(default))]
4632 pub undocumented: JsonObject,
4633}
4634
4635#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4636#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4637#[cfg_attr(feature = "bon", builder(on(String, into)))]
4638pub struct PreparedContact {
4639 #[serde(rename = "connLinkToConnect")]
4640 pub conn_link_to_connect: CreatedConnLink,
4641
4642 #[serde(rename = "uiConnLinkType")]
4643 pub ui_conn_link_type: ConnectionMode,
4644
4645 #[serde(rename = "welcomeSharedMsgId", skip_serializing_if = "Option::is_none")]
4646 pub welcome_shared_msg_id: Option<String>,
4647
4648 #[serde(rename = "requestSharedMsgId", skip_serializing_if = "Option::is_none")]
4649 pub request_shared_msg_id: Option<String>,
4650
4651 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4652 #[cfg_attr(feature = "bon", builder(default))]
4653 pub undocumented: JsonObject,
4654}
4655
4656#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4657#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4658#[cfg_attr(feature = "bon", builder(on(String, into)))]
4659pub struct PreparedGroup {
4660 #[serde(rename = "connLinkToConnect")]
4661 pub conn_link_to_connect: CreatedConnLink,
4662
4663 #[serde(rename = "connLinkPreparedConnection")]
4664 pub conn_link_prepared_connection: bool,
4665
4666 #[serde(rename = "connLinkStartedConnection")]
4667 pub conn_link_started_connection: bool,
4668
4669 #[serde(rename = "welcomeSharedMsgId", skip_serializing_if = "Option::is_none")]
4670 pub welcome_shared_msg_id: Option<String>,
4671
4672 #[serde(rename = "requestSharedMsgId", skip_serializing_if = "Option::is_none")]
4673 pub request_shared_msg_id: Option<String>,
4674
4675 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4676 #[cfg_attr(feature = "bon", builder(default))]
4677 pub undocumented: JsonObject,
4678}
4679
4680#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4681#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4682#[cfg_attr(feature = "bon", builder(on(String, into)))]
4683pub struct Profile {
4684 #[serde(rename = "displayName")]
4685 pub display_name: String,
4686
4687 #[serde(rename = "fullName")]
4688 pub full_name: String,
4689
4690 #[serde(rename = "shortDescr", skip_serializing_if = "Option::is_none")]
4691 pub short_descr: Option<String>,
4692
4693 #[serde(rename = "image", skip_serializing_if = "Option::is_none")]
4694 pub image: Option<String>,
4695
4696 #[serde(rename = "contactLink", skip_serializing_if = "Option::is_none")]
4697 pub contact_link: Option<String>,
4698
4699 #[serde(rename = "preferences", skip_serializing_if = "Option::is_none")]
4700 pub preferences: Option<Preferences>,
4701
4702 #[serde(rename = "peerType", skip_serializing_if = "Option::is_none")]
4703 pub peer_type: Option<ChatPeerType>,
4704
4705 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4706 #[cfg_attr(feature = "bon", builder(default))]
4707 pub undocumented: JsonObject,
4708}
4709
4710#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
4711#[non_exhaustive]
4712pub enum RatchetSyncState {
4713 #[default]
4714 #[serde(rename = "ok")]
4715 Ok,
4716 #[serde(rename = "allowed")]
4717 Allowed,
4718 #[serde(rename = "required")]
4719 Required,
4720 #[serde(rename = "started")]
4721 Started,
4722 #[serde(rename = "agreed")]
4723 Agreed,
4724}
4725
4726#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4727#[serde(tag = "type")]
4728#[non_exhaustive]
4729pub enum RcvConnEvent {
4730 #[serde(rename = "switchQueue")]
4731 SwitchQueue {
4732 #[serde(rename = "phase")]
4733 phase: SwitchPhase,
4734
4735 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4736 undocumented: JsonObject,
4737 },
4738 #[serde(rename = "ratchetSync")]
4739 RatchetSync {
4740 #[serde(rename = "syncStatus")]
4741 sync_status: RatchetSyncState,
4742
4743 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4744 undocumented: JsonObject,
4745 },
4746 #[serde(rename = "verificationCodeReset")]
4747 VerificationCodeReset,
4748 #[serde(rename = "pqEnabled")]
4749 PqEnabled {
4750 #[serde(rename = "enabled")]
4751 enabled: bool,
4752
4753 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4754 undocumented: JsonObject,
4755 },
4756 #[serde(untagged)]
4757 Undocumented(JsonObject),
4758}
4759
4760impl RcvConnEvent {
4761 pub fn switch_queue(phase: SwitchPhase) -> Self {
4762 Self::SwitchQueue {
4763 phase,
4764 undocumented: Default::default(),
4765 }
4766 }
4767
4768 pub fn ratchet_sync(sync_status: RatchetSyncState) -> Self {
4769 Self::RatchetSync {
4770 sync_status,
4771 undocumented: Default::default(),
4772 }
4773 }
4774
4775 pub fn verification_code_reset() -> Self {
4776 Self::VerificationCodeReset
4777 }
4778
4779 pub fn pq_enabled(enabled: bool) -> Self {
4780 Self::PqEnabled {
4781 enabled,
4782 undocumented: Default::default(),
4783 }
4784 }
4785}
4786
4787#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4788#[serde(tag = "type")]
4789#[non_exhaustive]
4790pub enum RcvDirectEvent {
4791 #[serde(rename = "contactDeleted")]
4792 ContactDeleted,
4793 #[serde(rename = "profileUpdated")]
4794 ProfileUpdated {
4795 #[serde(rename = "fromProfile")]
4796 from_profile: Profile,
4797
4798 #[serde(rename = "toProfile")]
4799 to_profile: Profile,
4800
4801 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4802 undocumented: JsonObject,
4803 },
4804 #[serde(rename = "groupInvLinkReceived")]
4805 GroupInvLinkReceived {
4806 #[serde(rename = "groupProfile")]
4807 group_profile: GroupProfile,
4808
4809 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4810 undocumented: JsonObject,
4811 },
4812 #[serde(untagged)]
4813 Undocumented(JsonObject),
4814}
4815
4816impl RcvDirectEvent {
4817 pub fn contact_deleted() -> Self {
4818 Self::ContactDeleted
4819 }
4820
4821 pub fn profile_updated(from_profile: Profile, to_profile: Profile) -> Self {
4822 Self::ProfileUpdated {
4823 from_profile,
4824 to_profile,
4825 undocumented: Default::default(),
4826 }
4827 }
4828
4829 pub fn group_inv_link_received(group_profile: GroupProfile) -> Self {
4830 Self::GroupInvLinkReceived {
4831 group_profile,
4832 undocumented: Default::default(),
4833 }
4834 }
4835}
4836
4837#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4838#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4839#[cfg_attr(feature = "bon", builder(on(String, into)))]
4840pub struct RcvFileDescr {
4841 #[serde(
4842 rename = "fileDescrId",
4843 deserialize_with = "deserialize_number_from_string"
4844 )]
4845 pub file_descr_id: i64,
4846
4847 #[serde(rename = "fileDescrText")]
4848 pub file_descr_text: String,
4849
4850 #[serde(
4851 rename = "fileDescrPartNo",
4852 deserialize_with = "deserialize_number_from_string"
4853 )]
4854 pub file_descr_part_no: i32,
4855
4856 #[serde(rename = "fileDescrComplete")]
4857 pub file_descr_complete: bool,
4858
4859 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4860 #[cfg_attr(feature = "bon", builder(default))]
4861 pub undocumented: JsonObject,
4862}
4863
4864#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4865#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4866#[cfg_attr(feature = "bon", builder(on(String, into)))]
4867pub struct RcvFileInfo {
4868 #[serde(rename = "filePath")]
4869 pub file_path: String,
4870
4871 #[serde(
4872 rename = "connId",
4873 skip_serializing_if = "Option::is_none",
4874 deserialize_with = "deserialize_option_number_from_string",
4875 default
4876 )]
4877 pub conn_id: Option<i64>,
4878
4879 #[serde(rename = "agentConnId", skip_serializing_if = "Option::is_none")]
4880 pub agent_conn_id: Option<String>,
4881
4882 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4883 #[cfg_attr(feature = "bon", builder(default))]
4884 pub undocumented: JsonObject,
4885}
4886
4887#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4888#[serde(tag = "type")]
4889#[non_exhaustive]
4890pub enum RcvFileStatus {
4891 #[serde(rename = "new")]
4892 New,
4893 #[serde(rename = "accepted")]
4894 Accepted {
4895 #[serde(rename = "fileInfo")]
4896 file_info: RcvFileInfo,
4897
4898 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4899 undocumented: JsonObject,
4900 },
4901 #[serde(rename = "connected")]
4902 Connected {
4903 #[serde(rename = "fileInfo")]
4904 file_info: RcvFileInfo,
4905
4906 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4907 undocumented: JsonObject,
4908 },
4909 #[serde(rename = "complete")]
4910 Complete {
4911 #[serde(rename = "fileInfo")]
4912 file_info: RcvFileInfo,
4913
4914 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4915 undocumented: JsonObject,
4916 },
4917 #[serde(rename = "cancelled")]
4918 Cancelled {
4919 #[serde(rename = "fileInfo_", skip_serializing_if = "Option::is_none")]
4920 file_info: Option<RcvFileInfo>,
4921
4922 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
4923 undocumented: JsonObject,
4924 },
4925 #[serde(untagged)]
4926 Undocumented(JsonObject),
4927}
4928
4929impl RcvFileStatus {
4930 pub fn new() -> Self {
4931 Self::New
4932 }
4933
4934 pub fn accepted(file_info: RcvFileInfo) -> Self {
4935 Self::Accepted {
4936 file_info,
4937 undocumented: Default::default(),
4938 }
4939 }
4940
4941 pub fn connected(file_info: RcvFileInfo) -> Self {
4942 Self::Connected {
4943 file_info,
4944 undocumented: Default::default(),
4945 }
4946 }
4947
4948 pub fn complete(file_info: RcvFileInfo) -> Self {
4949 Self::Complete {
4950 file_info,
4951 undocumented: Default::default(),
4952 }
4953 }
4954
4955 pub fn cancelled(file_info: Option<RcvFileInfo>) -> Self {
4956 Self::Cancelled {
4957 file_info,
4958 undocumented: Default::default(),
4959 }
4960 }
4961}
4962
4963#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4964#[cfg_attr(feature = "bon", derive(::bon::Builder))]
4965#[cfg_attr(feature = "bon", builder(on(String, into)))]
4966pub struct RcvFileTransfer {
4967 #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
4968 pub file_id: i64,
4969
4970 #[serde(rename = "xftpRcvFile", skip_serializing_if = "Option::is_none")]
4971 pub xftp_rcv_file: Option<XFTPRcvFile>,
4972
4973 #[serde(rename = "fileInvitation")]
4974 pub file_invitation: FileInvitation,
4975
4976 #[serde(rename = "fileStatus")]
4977 pub file_status: RcvFileStatus,
4978
4979 #[serde(rename = "rcvFileInline", skip_serializing_if = "Option::is_none")]
4980 pub rcv_file_inline: Option<InlineFileMode>,
4981
4982 #[serde(rename = "senderDisplayName")]
4983 pub sender_display_name: String,
4984
4985 #[serde(
4986 rename = "chunkSize",
4987 deserialize_with = "deserialize_number_from_string"
4988 )]
4989 pub chunk_size: i64,
4990
4991 #[serde(rename = "cancelled")]
4992 pub cancelled: bool,
4993
4994 #[serde(
4995 rename = "grpMemberId",
4996 skip_serializing_if = "Option::is_none",
4997 deserialize_with = "deserialize_option_number_from_string",
4998 default
4999 )]
5000 pub grp_member_id: Option<i64>,
5001
5002 #[serde(rename = "cryptoArgs", skip_serializing_if = "Option::is_none")]
5003 pub crypto_args: Option<CryptoFileArgs>,
5004
5005 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5006 #[cfg_attr(feature = "bon", builder(default))]
5007 pub undocumented: JsonObject,
5008}
5009
5010#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5011#[serde(tag = "type")]
5012#[non_exhaustive]
5013pub enum RcvGroupEvent {
5014 #[serde(rename = "memberAdded")]
5015 MemberAdded {
5016 #[serde(
5017 rename = "groupMemberId",
5018 deserialize_with = "deserialize_number_from_string"
5019 )]
5020 group_member_id: i64,
5021
5022 #[serde(rename = "profile")]
5023 profile: Profile,
5024
5025 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5026 undocumented: JsonObject,
5027 },
5028 #[serde(rename = "memberConnected")]
5029 MemberConnected,
5030 #[serde(rename = "memberAccepted")]
5031 MemberAccepted {
5032 #[serde(
5033 rename = "groupMemberId",
5034 deserialize_with = "deserialize_number_from_string"
5035 )]
5036 group_member_id: i64,
5037
5038 #[serde(rename = "profile")]
5039 profile: Profile,
5040
5041 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5042 undocumented: JsonObject,
5043 },
5044 #[serde(rename = "userAccepted")]
5045 UserAccepted,
5046 #[serde(rename = "memberLeft")]
5047 MemberLeft,
5048 #[serde(rename = "memberRole")]
5049 MemberRole {
5050 #[serde(
5051 rename = "groupMemberId",
5052 deserialize_with = "deserialize_number_from_string"
5053 )]
5054 group_member_id: i64,
5055
5056 #[serde(rename = "profile")]
5057 profile: Profile,
5058
5059 #[serde(rename = "role")]
5060 role: GroupMemberRole,
5061
5062 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5063 undocumented: JsonObject,
5064 },
5065 #[serde(rename = "memberBlocked")]
5066 MemberBlocked {
5067 #[serde(
5068 rename = "groupMemberId",
5069 deserialize_with = "deserialize_number_from_string"
5070 )]
5071 group_member_id: i64,
5072
5073 #[serde(rename = "profile")]
5074 profile: Profile,
5075
5076 #[serde(rename = "blocked")]
5077 blocked: bool,
5078
5079 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5080 undocumented: JsonObject,
5081 },
5082 #[serde(rename = "userRole")]
5083 UserRole {
5084 #[serde(rename = "role")]
5085 role: GroupMemberRole,
5086
5087 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5088 undocumented: JsonObject,
5089 },
5090 #[serde(rename = "memberDeleted")]
5091 MemberDeleted {
5092 #[serde(
5093 rename = "groupMemberId",
5094 deserialize_with = "deserialize_number_from_string"
5095 )]
5096 group_member_id: i64,
5097
5098 #[serde(rename = "profile")]
5099 profile: Profile,
5100
5101 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5102 undocumented: JsonObject,
5103 },
5104 #[serde(rename = "userDeleted")]
5105 UserDeleted,
5106 #[serde(rename = "groupDeleted")]
5107 GroupDeleted,
5108 #[serde(rename = "groupUpdated")]
5109 GroupUpdated {
5110 #[serde(rename = "groupProfile")]
5111 group_profile: GroupProfile,
5112
5113 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5114 undocumented: JsonObject,
5115 },
5116 #[serde(rename = "invitedViaGroupLink")]
5117 InvitedViaGroupLink,
5118 #[serde(rename = "memberCreatedContact")]
5119 MemberCreatedContact,
5120 #[serde(rename = "memberProfileUpdated")]
5121 MemberProfileUpdated {
5122 #[serde(rename = "fromProfile")]
5123 from_profile: Profile,
5124
5125 #[serde(rename = "toProfile")]
5126 to_profile: Profile,
5127
5128 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5129 undocumented: JsonObject,
5130 },
5131 #[serde(rename = "newMemberPendingReview")]
5132 NewMemberPendingReview,
5133 #[serde(untagged)]
5134 Undocumented(JsonObject),
5135}
5136
5137impl RcvGroupEvent {
5138 pub fn member_added(group_member_id: i64, profile: Profile) -> Self {
5139 Self::MemberAdded {
5140 group_member_id,
5141 profile,
5142 undocumented: Default::default(),
5143 }
5144 }
5145
5146 pub fn member_connected() -> Self {
5147 Self::MemberConnected
5148 }
5149
5150 pub fn member_accepted(group_member_id: i64, profile: Profile) -> Self {
5151 Self::MemberAccepted {
5152 group_member_id,
5153 profile,
5154 undocumented: Default::default(),
5155 }
5156 }
5157
5158 pub fn user_accepted() -> Self {
5159 Self::UserAccepted
5160 }
5161
5162 pub fn member_left() -> Self {
5163 Self::MemberLeft
5164 }
5165
5166 pub fn member_role(group_member_id: i64, profile: Profile, role: GroupMemberRole) -> Self {
5167 Self::MemberRole {
5168 group_member_id,
5169 profile,
5170 role,
5171 undocumented: Default::default(),
5172 }
5173 }
5174
5175 pub fn member_blocked(group_member_id: i64, profile: Profile, blocked: bool) -> Self {
5176 Self::MemberBlocked {
5177 group_member_id,
5178 profile,
5179 blocked,
5180 undocumented: Default::default(),
5181 }
5182 }
5183
5184 pub fn user_role(role: GroupMemberRole) -> Self {
5185 Self::UserRole {
5186 role,
5187 undocumented: Default::default(),
5188 }
5189 }
5190
5191 pub fn member_deleted(group_member_id: i64, profile: Profile) -> Self {
5192 Self::MemberDeleted {
5193 group_member_id,
5194 profile,
5195 undocumented: Default::default(),
5196 }
5197 }
5198
5199 pub fn user_deleted() -> Self {
5200 Self::UserDeleted
5201 }
5202
5203 pub fn group_deleted() -> Self {
5204 Self::GroupDeleted
5205 }
5206
5207 pub fn group_updated(group_profile: GroupProfile) -> Self {
5208 Self::GroupUpdated {
5209 group_profile,
5210 undocumented: Default::default(),
5211 }
5212 }
5213
5214 pub fn invited_via_group_link() -> Self {
5215 Self::InvitedViaGroupLink
5216 }
5217
5218 pub fn member_created_contact() -> Self {
5219 Self::MemberCreatedContact
5220 }
5221
5222 pub fn member_profile_updated(from_profile: Profile, to_profile: Profile) -> Self {
5223 Self::MemberProfileUpdated {
5224 from_profile,
5225 to_profile,
5226 undocumented: Default::default(),
5227 }
5228 }
5229
5230 pub fn new_member_pending_review() -> Self {
5231 Self::NewMemberPendingReview
5232 }
5233}
5234
5235#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5236#[non_exhaustive]
5237pub enum ReportReason {
5238 #[default]
5239 #[serde(rename = "spam")]
5240 Spam,
5241 #[serde(rename = "content")]
5242 Content,
5243 #[serde(rename = "community")]
5244 Community,
5245 #[serde(rename = "profile")]
5246 Profile,
5247 #[serde(rename = "other")]
5248 Other,
5249}
5250
5251#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5252#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5253#[cfg_attr(feature = "bon", builder(on(String, into)))]
5254pub struct RoleGroupPreference {
5255 #[serde(rename = "enable")]
5256 pub enable: GroupFeatureEnabled,
5257
5258 #[serde(rename = "role", skip_serializing_if = "Option::is_none")]
5259 pub role: Option<GroupMemberRole>,
5260
5261 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5262 #[cfg_attr(feature = "bon", builder(default))]
5263 pub undocumented: JsonObject,
5264}
5265
5266#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5267#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5268#[cfg_attr(feature = "bon", builder(on(String, into)))]
5269pub struct SecurityCode {
5270 #[serde(rename = "securityCode")]
5271 pub security_code: String,
5272
5273 #[serde(rename = "verifiedAt")]
5274 pub verified_at: UtcTime,
5275
5276 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5277 #[cfg_attr(feature = "bon", builder(default))]
5278 pub undocumented: JsonObject,
5279}
5280
5281#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5282#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5283#[cfg_attr(feature = "bon", builder(on(String, into)))]
5284pub struct SimplePreference {
5285 #[serde(rename = "allow")]
5286 pub allow: FeatureAllowed,
5287
5288 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5289 #[cfg_attr(feature = "bon", builder(default))]
5290 pub undocumented: JsonObject,
5291}
5292
5293#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5294#[non_exhaustive]
5295pub enum SimplexLinkType {
5296 #[default]
5297 #[serde(rename = "contact")]
5298 Contact,
5299 #[serde(rename = "invitation")]
5300 Invitation,
5301 #[serde(rename = "group")]
5302 Group,
5303 #[serde(rename = "channel")]
5304 Channel,
5305 #[serde(rename = "relay")]
5306 Relay,
5307}
5308
5309#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5310#[non_exhaustive]
5311pub enum SndCIStatusProgress {
5312 #[default]
5313 #[serde(rename = "partial")]
5314 Partial,
5315 #[serde(rename = "complete")]
5316 Complete,
5317}
5318
5319#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5320#[serde(tag = "type")]
5321#[non_exhaustive]
5322pub enum SndConnEvent {
5323 #[serde(rename = "switchQueue")]
5324 SwitchQueue {
5325 #[serde(rename = "phase")]
5326 phase: SwitchPhase,
5327
5328 #[serde(rename = "member", skip_serializing_if = "Option::is_none")]
5329 member: Option<GroupMemberRef>,
5330
5331 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5332 undocumented: JsonObject,
5333 },
5334 #[serde(rename = "ratchetSync")]
5335 RatchetSync {
5336 #[serde(rename = "syncStatus")]
5337 sync_status: RatchetSyncState,
5338
5339 #[serde(rename = "member", skip_serializing_if = "Option::is_none")]
5340 member: Option<GroupMemberRef>,
5341
5342 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5343 undocumented: JsonObject,
5344 },
5345 #[serde(rename = "pqEnabled")]
5346 PqEnabled {
5347 #[serde(rename = "enabled")]
5348 enabled: bool,
5349
5350 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5351 undocumented: JsonObject,
5352 },
5353 #[serde(untagged)]
5354 Undocumented(JsonObject),
5355}
5356
5357impl SndConnEvent {
5358 pub fn switch_queue(phase: SwitchPhase, member: Option<GroupMemberRef>) -> Self {
5359 Self::SwitchQueue {
5360 phase,
5361 member,
5362 undocumented: Default::default(),
5363 }
5364 }
5365
5366 pub fn ratchet_sync(sync_status: RatchetSyncState, member: Option<GroupMemberRef>) -> Self {
5367 Self::RatchetSync {
5368 sync_status,
5369 member,
5370 undocumented: Default::default(),
5371 }
5372 }
5373
5374 pub fn pq_enabled(enabled: bool) -> Self {
5375 Self::PqEnabled {
5376 enabled,
5377 undocumented: Default::default(),
5378 }
5379 }
5380}
5381
5382#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5383#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5384#[cfg_attr(feature = "bon", builder(on(String, into)))]
5385pub struct SndFileTransfer {
5386 #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
5387 pub file_id: i64,
5388
5389 #[serde(rename = "fileName")]
5390 pub file_name: String,
5391
5392 #[serde(rename = "filePath")]
5393 pub file_path: String,
5394
5395 #[serde(
5396 rename = "fileSize",
5397 deserialize_with = "deserialize_number_from_string"
5398 )]
5399 pub file_size: i64,
5400
5401 #[serde(
5402 rename = "chunkSize",
5403 deserialize_with = "deserialize_number_from_string"
5404 )]
5405 pub chunk_size: i64,
5406
5407 #[serde(rename = "recipientDisplayName")]
5408 pub recipient_display_name: String,
5409
5410 #[serde(rename = "connId", deserialize_with = "deserialize_number_from_string")]
5411 pub conn_id: i64,
5412
5413 #[serde(rename = "agentConnId")]
5414 pub agent_conn_id: String,
5415
5416 #[serde(
5417 rename = "groupMemberId",
5418 skip_serializing_if = "Option::is_none",
5419 deserialize_with = "deserialize_option_number_from_string",
5420 default
5421 )]
5422 pub group_member_id: Option<i64>,
5423
5424 #[serde(rename = "fileStatus")]
5425 pub file_status: FileStatus,
5426
5427 #[serde(
5428 rename = "fileDescrId",
5429 skip_serializing_if = "Option::is_none",
5430 deserialize_with = "deserialize_option_number_from_string",
5431 default
5432 )]
5433 pub file_descr_id: Option<i64>,
5434
5435 #[serde(rename = "fileInline", skip_serializing_if = "Option::is_none")]
5436 pub file_inline: Option<InlineFileMode>,
5437
5438 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5439 #[cfg_attr(feature = "bon", builder(default))]
5440 pub undocumented: JsonObject,
5441}
5442
5443#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5444#[serde(tag = "type")]
5445#[non_exhaustive]
5446pub enum SndGroupEvent {
5447 #[serde(rename = "memberRole")]
5448 MemberRole {
5449 #[serde(
5450 rename = "groupMemberId",
5451 deserialize_with = "deserialize_number_from_string"
5452 )]
5453 group_member_id: i64,
5454
5455 #[serde(rename = "profile")]
5456 profile: Profile,
5457
5458 #[serde(rename = "role")]
5459 role: GroupMemberRole,
5460
5461 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5462 undocumented: JsonObject,
5463 },
5464 #[serde(rename = "memberBlocked")]
5465 MemberBlocked {
5466 #[serde(
5467 rename = "groupMemberId",
5468 deserialize_with = "deserialize_number_from_string"
5469 )]
5470 group_member_id: i64,
5471
5472 #[serde(rename = "profile")]
5473 profile: Profile,
5474
5475 #[serde(rename = "blocked")]
5476 blocked: bool,
5477
5478 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5479 undocumented: JsonObject,
5480 },
5481 #[serde(rename = "userRole")]
5482 UserRole {
5483 #[serde(rename = "role")]
5484 role: GroupMemberRole,
5485
5486 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5487 undocumented: JsonObject,
5488 },
5489 #[serde(rename = "memberDeleted")]
5490 MemberDeleted {
5491 #[serde(
5492 rename = "groupMemberId",
5493 deserialize_with = "deserialize_number_from_string"
5494 )]
5495 group_member_id: i64,
5496
5497 #[serde(rename = "profile")]
5498 profile: Profile,
5499
5500 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5501 undocumented: JsonObject,
5502 },
5503 #[serde(rename = "userLeft")]
5504 UserLeft,
5505 #[serde(rename = "groupUpdated")]
5506 GroupUpdated {
5507 #[serde(rename = "groupProfile")]
5508 group_profile: GroupProfile,
5509
5510 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5511 undocumented: JsonObject,
5512 },
5513 #[serde(rename = "memberAccepted")]
5514 MemberAccepted {
5515 #[serde(
5516 rename = "groupMemberId",
5517 deserialize_with = "deserialize_number_from_string"
5518 )]
5519 group_member_id: i64,
5520
5521 #[serde(rename = "profile")]
5522 profile: Profile,
5523
5524 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5525 undocumented: JsonObject,
5526 },
5527 #[serde(rename = "userPendingReview")]
5528 UserPendingReview,
5529 #[serde(untagged)]
5530 Undocumented(JsonObject),
5531}
5532
5533impl SndGroupEvent {
5534 pub fn member_role(group_member_id: i64, profile: Profile, role: GroupMemberRole) -> Self {
5535 Self::MemberRole {
5536 group_member_id,
5537 profile,
5538 role,
5539 undocumented: Default::default(),
5540 }
5541 }
5542
5543 pub fn member_blocked(group_member_id: i64, profile: Profile, blocked: bool) -> Self {
5544 Self::MemberBlocked {
5545 group_member_id,
5546 profile,
5547 blocked,
5548 undocumented: Default::default(),
5549 }
5550 }
5551
5552 pub fn user_role(role: GroupMemberRole) -> Self {
5553 Self::UserRole {
5554 role,
5555 undocumented: Default::default(),
5556 }
5557 }
5558
5559 pub fn member_deleted(group_member_id: i64, profile: Profile) -> Self {
5560 Self::MemberDeleted {
5561 group_member_id,
5562 profile,
5563 undocumented: Default::default(),
5564 }
5565 }
5566
5567 pub fn user_left() -> Self {
5568 Self::UserLeft
5569 }
5570
5571 pub fn group_updated(group_profile: GroupProfile) -> Self {
5572 Self::GroupUpdated {
5573 group_profile,
5574 undocumented: Default::default(),
5575 }
5576 }
5577
5578 pub fn member_accepted(group_member_id: i64, profile: Profile) -> Self {
5579 Self::MemberAccepted {
5580 group_member_id,
5581 profile,
5582 undocumented: Default::default(),
5583 }
5584 }
5585
5586 pub fn user_pending_review() -> Self {
5587 Self::UserPendingReview
5588 }
5589}
5590
5591#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5592#[non_exhaustive]
5593pub enum SwitchPhase {
5594 #[default]
5595 #[serde(rename = "started")]
5596 Started,
5597 #[serde(rename = "confirmed")]
5598 Confirmed,
5599 #[serde(rename = "secured")]
5600 Secured,
5601 #[serde(rename = "completed")]
5602 Completed,
5603}
5604
5605#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5606#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5607#[cfg_attr(feature = "bon", builder(on(String, into)))]
5608pub struct TimedMessagesGroupPreference {
5609 #[serde(rename = "enable")]
5610 pub enable: GroupFeatureEnabled,
5611
5612 #[serde(
5613 rename = "ttl",
5614 skip_serializing_if = "Option::is_none",
5615 deserialize_with = "deserialize_option_number_from_string",
5616 default
5617 )]
5618 pub ttl: Option<i32>,
5619
5620 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5621 #[cfg_attr(feature = "bon", builder(default))]
5622 pub undocumented: JsonObject,
5623}
5624
5625#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5626#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5627#[cfg_attr(feature = "bon", builder(on(String, into)))]
5628pub struct TimedMessagesPreference {
5629 #[serde(rename = "allow")]
5630 pub allow: FeatureAllowed,
5631
5632 #[serde(
5633 rename = "ttl",
5634 skip_serializing_if = "Option::is_none",
5635 deserialize_with = "deserialize_option_number_from_string",
5636 default
5637 )]
5638 pub ttl: Option<i32>,
5639
5640 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5641 #[cfg_attr(feature = "bon", builder(default))]
5642 pub undocumented: JsonObject,
5643}
5644
5645#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5646#[non_exhaustive]
5647pub enum UIColorMode {
5648 #[default]
5649 #[serde(rename = "light")]
5650 Light,
5651 #[serde(rename = "dark")]
5652 Dark,
5653}
5654
5655#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5656#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5657#[cfg_attr(feature = "bon", builder(on(String, into)))]
5658pub struct UIColors {
5659 #[serde(rename = "accent", skip_serializing_if = "Option::is_none")]
5660 pub accent: Option<String>,
5661
5662 #[serde(rename = "accentVariant", skip_serializing_if = "Option::is_none")]
5663 pub accent_variant: Option<String>,
5664
5665 #[serde(rename = "secondary", skip_serializing_if = "Option::is_none")]
5666 pub secondary: Option<String>,
5667
5668 #[serde(rename = "secondaryVariant", skip_serializing_if = "Option::is_none")]
5669 pub secondary_variant: Option<String>,
5670
5671 #[serde(rename = "background", skip_serializing_if = "Option::is_none")]
5672 pub background: Option<String>,
5673
5674 #[serde(rename = "menus", skip_serializing_if = "Option::is_none")]
5675 pub menus: Option<String>,
5676
5677 #[serde(rename = "title", skip_serializing_if = "Option::is_none")]
5678 pub title: Option<String>,
5679
5680 #[serde(rename = "accentVariant2", skip_serializing_if = "Option::is_none")]
5681 pub accent_variant_2: Option<String>,
5682
5683 #[serde(rename = "sentMessage", skip_serializing_if = "Option::is_none")]
5684 pub sent_message: Option<String>,
5685
5686 #[serde(rename = "sentReply", skip_serializing_if = "Option::is_none")]
5687 pub sent_reply: Option<String>,
5688
5689 #[serde(rename = "receivedMessage", skip_serializing_if = "Option::is_none")]
5690 pub received_message: Option<String>,
5691
5692 #[serde(rename = "receivedReply", skip_serializing_if = "Option::is_none")]
5693 pub received_reply: Option<String>,
5694
5695 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5696 #[cfg_attr(feature = "bon", builder(default))]
5697 pub undocumented: JsonObject,
5698}
5699
5700#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5701#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5702#[cfg_attr(feature = "bon", builder(on(String, into)))]
5703pub struct UIThemeEntityOverride {
5704 #[serde(rename = "mode")]
5705 pub mode: UIColorMode,
5706
5707 #[serde(rename = "wallpaper", skip_serializing_if = "Option::is_none")]
5708 pub wallpaper: Option<ChatWallpaper>,
5709
5710 #[serde(rename = "colors")]
5711 pub colors: UIColors,
5712
5713 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5714 #[cfg_attr(feature = "bon", builder(default))]
5715 pub undocumented: JsonObject,
5716}
5717
5718#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5719#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5720#[cfg_attr(feature = "bon", builder(on(String, into)))]
5721pub struct UIThemeEntityOverrides {
5722 #[serde(rename = "light", skip_serializing_if = "Option::is_none")]
5723 pub light: Option<UIThemeEntityOverride>,
5724
5725 #[serde(rename = "dark", skip_serializing_if = "Option::is_none")]
5726 pub dark: Option<UIThemeEntityOverride>,
5727
5728 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5729 #[cfg_attr(feature = "bon", builder(default))]
5730 pub undocumented: JsonObject,
5731}
5732
5733#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5734#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5735#[cfg_attr(feature = "bon", builder(on(String, into)))]
5736pub struct UpdatedMessage {
5737 #[serde(rename = "msgContent")]
5738 pub msg_content: MsgContent,
5739
5740 #[serde(rename = "mentions")]
5741 pub mentions: BTreeMap<String, i64>,
5742
5743 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5744 #[cfg_attr(feature = "bon", builder(default))]
5745 pub undocumented: JsonObject,
5746}
5747
5748#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5749#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5750#[cfg_attr(feature = "bon", builder(on(String, into)))]
5751pub struct User {
5752 #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
5753 pub user_id: i64,
5754
5755 #[serde(
5756 rename = "agentUserId",
5757 deserialize_with = "deserialize_number_from_string"
5758 )]
5759 pub agent_user_id: i64,
5760
5761 #[serde(
5762 rename = "userContactId",
5763 deserialize_with = "deserialize_number_from_string"
5764 )]
5765 pub user_contact_id: i64,
5766
5767 #[serde(rename = "localDisplayName")]
5768 pub local_display_name: String,
5769
5770 #[serde(rename = "profile")]
5771 pub profile: LocalProfile,
5772
5773 #[serde(rename = "fullPreferences")]
5774 pub full_preferences: FullPreferences,
5775
5776 #[serde(rename = "activeUser")]
5777 pub active_user: bool,
5778
5779 #[serde(
5780 rename = "activeOrder",
5781 deserialize_with = "deserialize_number_from_string"
5782 )]
5783 pub active_order: i64,
5784
5785 #[serde(rename = "viewPwdHash", skip_serializing_if = "Option::is_none")]
5786 pub view_pwd_hash: Option<UserPwdHash>,
5787
5788 #[serde(rename = "showNtfs")]
5789 pub show_ntfs: bool,
5790
5791 #[serde(rename = "sendRcptsContacts")]
5792 pub send_rcpts_contacts: bool,
5793
5794 #[serde(rename = "sendRcptsSmallGroups")]
5795 pub send_rcpts_small_groups: bool,
5796
5797 #[serde(rename = "autoAcceptMemberContacts")]
5798 pub auto_accept_member_contacts: bool,
5799
5800 #[serde(
5801 rename = "userMemberProfileUpdatedAt",
5802 skip_serializing_if = "Option::is_none"
5803 )]
5804 pub user_member_profile_updated_at: Option<UtcTime>,
5805
5806 #[serde(rename = "uiThemes", skip_serializing_if = "Option::is_none")]
5807 pub ui_themes: Option<UIThemeEntityOverrides>,
5808
5809 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5810 #[cfg_attr(feature = "bon", builder(default))]
5811 pub undocumented: JsonObject,
5812}
5813
5814#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5815#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5816#[cfg_attr(feature = "bon", builder(on(String, into)))]
5817pub struct UserContact {
5818 #[serde(
5819 rename = "userContactLinkId",
5820 deserialize_with = "deserialize_number_from_string"
5821 )]
5822 pub user_contact_link_id: i64,
5823
5824 #[serde(rename = "connReqContact")]
5825 pub conn_req_contact: String,
5826
5827 #[serde(
5828 rename = "groupId",
5829 skip_serializing_if = "Option::is_none",
5830 deserialize_with = "deserialize_option_number_from_string",
5831 default
5832 )]
5833 pub group_id: Option<i64>,
5834
5835 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5836 #[cfg_attr(feature = "bon", builder(default))]
5837 pub undocumented: JsonObject,
5838}
5839
5840#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5841#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5842#[cfg_attr(feature = "bon", builder(on(String, into)))]
5843pub struct UserContactLink {
5844 #[serde(
5845 rename = "userContactLinkId",
5846 deserialize_with = "deserialize_number_from_string"
5847 )]
5848 pub user_contact_link_id: i64,
5849
5850 #[serde(rename = "connLinkContact")]
5851 pub conn_link_contact: CreatedConnLink,
5852
5853 #[serde(rename = "shortLinkDataSet")]
5854 pub short_link_data_set: bool,
5855
5856 #[serde(rename = "shortLinkLargeDataSet")]
5857 pub short_link_large_data_set: bool,
5858
5859 #[serde(rename = "addressSettings")]
5860 pub address_settings: AddressSettings,
5861
5862 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5863 #[cfg_attr(feature = "bon", builder(default))]
5864 pub undocumented: JsonObject,
5865}
5866
5867#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5868#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5869#[cfg_attr(feature = "bon", builder(on(String, into)))]
5870pub struct UserContactRequest {
5871 #[serde(
5872 rename = "contactRequestId",
5873 deserialize_with = "deserialize_number_from_string"
5874 )]
5875 pub contact_request_id: i64,
5876
5877 #[serde(rename = "agentInvitationId")]
5878 pub agent_invitation_id: String,
5879
5880 #[serde(
5881 rename = "contactId_",
5882 skip_serializing_if = "Option::is_none",
5883 deserialize_with = "deserialize_option_number_from_string",
5884 default
5885 )]
5886 pub contact_id: Option<i64>,
5887
5888 #[serde(
5889 rename = "businessGroupId_",
5890 skip_serializing_if = "Option::is_none",
5891 deserialize_with = "deserialize_option_number_from_string",
5892 default
5893 )]
5894 pub business_group_id: Option<i64>,
5895
5896 #[serde(
5897 rename = "userContactLinkId_",
5898 skip_serializing_if = "Option::is_none",
5899 deserialize_with = "deserialize_option_number_from_string",
5900 default
5901 )]
5902 pub user_contact_link_id: Option<i64>,
5903
5904 #[serde(rename = "cReqChatVRange")]
5905 pub c_req_chat_v_range: VersionRange,
5906
5907 #[serde(rename = "localDisplayName")]
5908 pub local_display_name: String,
5909
5910 #[serde(
5911 rename = "profileId",
5912 deserialize_with = "deserialize_number_from_string"
5913 )]
5914 pub profile_id: i64,
5915
5916 #[serde(rename = "profile")]
5917 pub profile: Profile,
5918
5919 #[serde(rename = "createdAt")]
5920 pub created_at: UtcTime,
5921
5922 #[serde(rename = "updatedAt")]
5923 pub updated_at: UtcTime,
5924
5925 #[serde(rename = "xContactId", skip_serializing_if = "Option::is_none")]
5926 pub x_contact_id: Option<String>,
5927
5928 #[serde(rename = "pqSupport")]
5929 pub pq_support: bool,
5930
5931 #[serde(rename = "welcomeSharedMsgId", skip_serializing_if = "Option::is_none")]
5932 pub welcome_shared_msg_id: Option<String>,
5933
5934 #[serde(rename = "requestSharedMsgId", skip_serializing_if = "Option::is_none")]
5935 pub request_shared_msg_id: Option<String>,
5936
5937 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5938 #[cfg_attr(feature = "bon", builder(default))]
5939 pub undocumented: JsonObject,
5940}
5941
5942#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5943#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5944#[cfg_attr(feature = "bon", builder(on(String, into)))]
5945pub struct UserInfo {
5946 #[serde(rename = "user")]
5947 pub user: User,
5948
5949 #[serde(
5950 rename = "unreadCount",
5951 deserialize_with = "deserialize_number_from_string"
5952 )]
5953 pub unread_count: i32,
5954
5955 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5956 #[cfg_attr(feature = "bon", builder(default))]
5957 pub undocumented: JsonObject,
5958}
5959
5960#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5961#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5962#[cfg_attr(feature = "bon", builder(on(String, into)))]
5963pub struct UserProfileUpdateSummary {
5964 #[serde(
5965 rename = "updateSuccesses",
5966 deserialize_with = "deserialize_number_from_string"
5967 )]
5968 pub update_successes: i32,
5969
5970 #[serde(
5971 rename = "updateFailures",
5972 deserialize_with = "deserialize_number_from_string"
5973 )]
5974 pub update_failures: i32,
5975
5976 #[serde(rename = "changedContacts")]
5977 pub changed_contacts: Vec<Contact>,
5978
5979 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5980 #[cfg_attr(feature = "bon", builder(default))]
5981 pub undocumented: JsonObject,
5982}
5983
5984#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5985#[cfg_attr(feature = "bon", derive(::bon::Builder))]
5986#[cfg_attr(feature = "bon", builder(on(String, into)))]
5987pub struct UserPwdHash {
5988 #[serde(rename = "hash")]
5989 pub hash: String,
5990
5991 #[serde(rename = "salt")]
5992 pub salt: String,
5993
5994 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
5995 #[cfg_attr(feature = "bon", builder(default))]
5996 pub undocumented: JsonObject,
5997}
5998
5999#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6000#[cfg_attr(feature = "bon", derive(::bon::Builder))]
6001#[cfg_attr(feature = "bon", builder(on(String, into)))]
6002pub struct VersionRange {
6003 #[serde(
6004 rename = "minVersion",
6005 deserialize_with = "deserialize_number_from_string"
6006 )]
6007 pub min_version: i32,
6008
6009 #[serde(
6010 rename = "maxVersion",
6011 deserialize_with = "deserialize_number_from_string"
6012 )]
6013 pub max_version: i32,
6014
6015 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
6016 #[cfg_attr(feature = "bon", builder(default))]
6017 pub undocumented: JsonObject,
6018}
6019
6020#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6021#[cfg_attr(feature = "bon", derive(::bon::Builder))]
6022#[cfg_attr(feature = "bon", builder(on(String, into)))]
6023pub struct XFTPRcvFile {
6024 #[serde(rename = "rcvFileDescription")]
6025 pub rcv_file_description: RcvFileDescr,
6026
6027 #[serde(rename = "agentRcvFileId", skip_serializing_if = "Option::is_none")]
6028 pub agent_rcv_file_id: Option<String>,
6029
6030 #[serde(rename = "agentRcvFileDeleted")]
6031 pub agent_rcv_file_deleted: bool,
6032
6033 #[serde(rename = "userApprovedRelays")]
6034 pub user_approved_relays: bool,
6035
6036 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
6037 #[cfg_attr(feature = "bon", builder(default))]
6038 pub undocumented: JsonObject,
6039}
6040
6041#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6042#[cfg_attr(feature = "bon", derive(::bon::Builder))]
6043#[cfg_attr(feature = "bon", builder(on(String, into)))]
6044pub struct XFTPSndFile {
6045 #[serde(rename = "agentSndFileId")]
6046 pub agent_snd_file_id: String,
6047
6048 #[serde(
6049 rename = "privateSndFileDescr",
6050 skip_serializing_if = "Option::is_none"
6051 )]
6052 pub private_snd_file_descr: Option<String>,
6053
6054 #[serde(rename = "agentSndFileDeleted")]
6055 pub agent_snd_file_deleted: bool,
6056
6057 #[serde(rename = "cryptoArgs", skip_serializing_if = "Option::is_none")]
6058 pub crypto_args: Option<CryptoFileArgs>,
6059
6060 #[serde(flatten, skip_serializing_if = "JsonObject::is_null")]
6061 #[cfg_attr(feature = "bon", builder(default))]
6062 pub undocumented: JsonObject,
6063}