simploxide_api_types/
errors.rs

1use super::*;
2
3#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
4#[serde(tag = "type")]
5#[non_exhaustive]
6pub enum AgentCryptoError {
7    #[serde(rename = "DECRYPT_AES")]
8    DecryptAes,
9    #[serde(rename = "DECRYPT_CB")]
10    DecryptCb,
11    #[serde(rename = "RATCHET_HEADER")]
12    RatchetHeader,
13    #[serde(rename = "RATCHET_SYNC")]
14    RatchetSync,
15    #[serde(untagged)]
16    Undocumented(BTreeMap<String, JsonObject>),
17}
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
20#[serde(tag = "type")]
21#[non_exhaustive]
22pub enum AgentErrorType {
23    #[serde(rename = "CMD")]
24    Cmd {
25        #[serde(rename = "cmdErr")]
26        cmd_err: CommandErrorType,
27
28        #[serde(rename = "errContext")]
29        err_context: String,
30
31        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
32        undocumented: BTreeMap<String, JsonObject>,
33    },
34    #[serde(rename = "CONN")]
35    Conn {
36        #[serde(rename = "connErr")]
37        conn_err: ConnectionErrorType,
38
39        #[serde(rename = "errContext")]
40        err_context: String,
41
42        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
43        undocumented: BTreeMap<String, JsonObject>,
44    },
45    #[serde(rename = "NO_USER")]
46    NoUser,
47    #[serde(rename = "SMP")]
48    Smp {
49        #[serde(rename = "serverAddress")]
50        server_address: String,
51
52        #[serde(rename = "smpErr")]
53        smp_err: ErrorType,
54
55        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
56        undocumented: BTreeMap<String, JsonObject>,
57    },
58    #[serde(rename = "NTF")]
59    Ntf {
60        #[serde(rename = "serverAddress")]
61        server_address: String,
62
63        #[serde(rename = "ntfErr")]
64        ntf_err: ErrorType,
65
66        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
67        undocumented: BTreeMap<String, JsonObject>,
68    },
69    #[serde(rename = "XFTP")]
70    Xftp {
71        #[serde(rename = "serverAddress")]
72        server_address: String,
73
74        #[serde(rename = "xftpErr")]
75        xftp_err: XFTPErrorType,
76
77        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
78        undocumented: BTreeMap<String, JsonObject>,
79    },
80    #[serde(rename = "FILE")]
81    File {
82        #[serde(rename = "fileErr")]
83        file_err: FileErrorType,
84
85        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
86        undocumented: BTreeMap<String, JsonObject>,
87    },
88    #[serde(rename = "PROXY")]
89    Proxy {
90        #[serde(rename = "proxyServer")]
91        proxy_server: String,
92
93        #[serde(rename = "relayServer")]
94        relay_server: String,
95
96        #[serde(rename = "proxyErr")]
97        proxy_err: ProxyClientError,
98
99        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
100        undocumented: BTreeMap<String, JsonObject>,
101    },
102    #[serde(rename = "RCP")]
103    Rcp {
104        #[serde(rename = "rcpErr")]
105        rcp_err: RCErrorType,
106
107        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
108        undocumented: BTreeMap<String, JsonObject>,
109    },
110    #[serde(rename = "BROKER")]
111    Broker {
112        #[serde(rename = "brokerAddress")]
113        broker_address: String,
114
115        #[serde(rename = "brokerErr")]
116        broker_err: BrokerErrorType,
117
118        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
119        undocumented: BTreeMap<String, JsonObject>,
120    },
121    #[serde(rename = "AGENT")]
122    Agent {
123        #[serde(rename = "agentErr")]
124        agent_err: SMPAgentError,
125
126        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
127        undocumented: BTreeMap<String, JsonObject>,
128    },
129    #[serde(rename = "INTERNAL")]
130    Internal {
131        #[serde(rename = "internalErr")]
132        internal_err: String,
133
134        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
135        undocumented: BTreeMap<String, JsonObject>,
136    },
137    #[serde(rename = "CRITICAL")]
138    Critical {
139        #[serde(rename = "offerRestart")]
140        offer_restart: bool,
141
142        #[serde(rename = "criticalErr")]
143        critical_err: String,
144
145        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
146        undocumented: BTreeMap<String, JsonObject>,
147    },
148    #[serde(rename = "INACTIVE")]
149    Inactive,
150    #[serde(untagged)]
151    Undocumented(BTreeMap<String, JsonObject>),
152}
153
154#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
155#[serde(tag = "type")]
156#[non_exhaustive]
157pub enum BrokerErrorType {
158    #[serde(rename = "RESPONSE")]
159    Response {
160        #[serde(rename = "respErr")]
161        resp_err: String,
162
163        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
164        undocumented: BTreeMap<String, JsonObject>,
165    },
166    #[serde(rename = "UNEXPECTED")]
167    Unexpected {
168        #[serde(rename = "respErr")]
169        resp_err: String,
170
171        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
172        undocumented: BTreeMap<String, JsonObject>,
173    },
174    #[serde(rename = "NETWORK")]
175    Network {
176        #[serde(rename = "networkError")]
177        network_error: NetworkError,
178
179        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
180        undocumented: BTreeMap<String, JsonObject>,
181    },
182    #[serde(rename = "HOST")]
183    Host,
184    #[serde(rename = "NO_SERVICE")]
185    NoService,
186    #[serde(rename = "TRANSPORT")]
187    Transport {
188        #[serde(rename = "transportErr")]
189        transport_err: TransportError,
190
191        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
192        undocumented: BTreeMap<String, JsonObject>,
193    },
194    #[serde(rename = "TIMEOUT")]
195    Timeout,
196    #[serde(untagged)]
197    Undocumented(BTreeMap<String, JsonObject>),
198}
199
200#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
201#[serde(tag = "type")]
202#[non_exhaustive]
203pub enum ChatError {
204    #[serde(rename = "error")]
205    Error {
206        #[serde(rename = "errorType")]
207        error_type: ChatErrorType,
208
209        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
210        undocumented: BTreeMap<String, JsonObject>,
211    },
212    #[serde(rename = "errorAgent")]
213    ErrorAgent {
214        #[serde(rename = "agentError")]
215        agent_error: AgentErrorType,
216
217        #[serde(rename = "connectionEntity_", skip_serializing_if = "Option::is_none")]
218        connection_entity: Option<ConnectionEntity>,
219
220        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
221        undocumented: BTreeMap<String, JsonObject>,
222    },
223    #[serde(rename = "errorStore")]
224    ErrorStore {
225        #[serde(rename = "storeError")]
226        store_error: StoreError,
227
228        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
229        undocumented: BTreeMap<String, JsonObject>,
230    },
231    #[serde(untagged)]
232    Undocumented(BTreeMap<String, JsonObject>),
233}
234
235#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
236#[serde(tag = "type")]
237#[non_exhaustive]
238pub enum ChatErrorType {
239    #[serde(rename = "noActiveUser")]
240    NoActiveUser,
241    #[serde(rename = "noConnectionUser")]
242    NoConnectionUser {
243        #[serde(rename = "agentConnId")]
244        agent_conn_id: String,
245
246        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
247        undocumented: BTreeMap<String, JsonObject>,
248    },
249    #[serde(rename = "noSndFileUser")]
250    NoSndFileUser {
251        #[serde(rename = "agentSndFileId")]
252        agent_snd_file_id: String,
253
254        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
255        undocumented: BTreeMap<String, JsonObject>,
256    },
257    #[serde(rename = "noRcvFileUser")]
258    NoRcvFileUser {
259        #[serde(rename = "agentRcvFileId")]
260        agent_rcv_file_id: String,
261
262        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
263        undocumented: BTreeMap<String, JsonObject>,
264    },
265    #[serde(rename = "userUnknown")]
266    UserUnknown,
267    #[serde(rename = "activeUserExists")]
268    ActiveUserExists,
269    #[serde(rename = "userExists")]
270    UserExists {
271        #[serde(rename = "contactName")]
272        contact_name: String,
273
274        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
275        undocumented: BTreeMap<String, JsonObject>,
276    },
277    #[serde(rename = "differentActiveUser")]
278    DifferentActiveUser {
279        #[serde(
280            rename = "commandUserId",
281            deserialize_with = "deserialize_number_from_string"
282        )]
283        command_user_id: i64,
284
285        #[serde(
286            rename = "activeUserId",
287            deserialize_with = "deserialize_number_from_string"
288        )]
289        active_user_id: i64,
290
291        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
292        undocumented: BTreeMap<String, JsonObject>,
293    },
294    #[serde(rename = "cantDeleteActiveUser")]
295    CantDeleteActiveUser {
296        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
297        user_id: i64,
298
299        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
300        undocumented: BTreeMap<String, JsonObject>,
301    },
302    #[serde(rename = "cantDeleteLastUser")]
303    CantDeleteLastUser {
304        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
305        user_id: i64,
306
307        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
308        undocumented: BTreeMap<String, JsonObject>,
309    },
310    #[serde(rename = "cantHideLastUser")]
311    CantHideLastUser {
312        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
313        user_id: i64,
314
315        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
316        undocumented: BTreeMap<String, JsonObject>,
317    },
318    #[serde(rename = "hiddenUserAlwaysMuted")]
319    HiddenUserAlwaysMuted {
320        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
321        user_id: i64,
322
323        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
324        undocumented: BTreeMap<String, JsonObject>,
325    },
326    #[serde(rename = "emptyUserPassword")]
327    EmptyUserPassword {
328        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
329        user_id: i64,
330
331        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
332        undocumented: BTreeMap<String, JsonObject>,
333    },
334    #[serde(rename = "userAlreadyHidden")]
335    UserAlreadyHidden {
336        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
337        user_id: i64,
338
339        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
340        undocumented: BTreeMap<String, JsonObject>,
341    },
342    #[serde(rename = "userNotHidden")]
343    UserNotHidden {
344        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
345        user_id: i64,
346
347        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
348        undocumented: BTreeMap<String, JsonObject>,
349    },
350    #[serde(rename = "invalidDisplayName")]
351    InvalidDisplayName {
352        #[serde(rename = "displayName")]
353        display_name: String,
354
355        #[serde(rename = "validName")]
356        valid_name: String,
357
358        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
359        undocumented: BTreeMap<String, JsonObject>,
360    },
361    #[serde(rename = "chatNotStarted")]
362    ChatNotStarted,
363    #[serde(rename = "chatNotStopped")]
364    ChatNotStopped,
365    #[serde(rename = "chatStoreChanged")]
366    ChatStoreChanged,
367    #[serde(rename = "invalidConnReq")]
368    InvalidConnReq,
369    #[serde(rename = "unsupportedConnReq")]
370    UnsupportedConnReq,
371    #[serde(rename = "connReqMessageProhibited")]
372    ConnReqMessageProhibited,
373    #[serde(rename = "contactNotReady")]
374    ContactNotReady {
375        #[serde(rename = "contact")]
376        contact: Contact,
377
378        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
379        undocumented: BTreeMap<String, JsonObject>,
380    },
381    #[serde(rename = "contactNotActive")]
382    ContactNotActive {
383        #[serde(rename = "contact")]
384        contact: Contact,
385
386        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
387        undocumented: BTreeMap<String, JsonObject>,
388    },
389    #[serde(rename = "contactDisabled")]
390    ContactDisabled {
391        #[serde(rename = "contact")]
392        contact: Contact,
393
394        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
395        undocumented: BTreeMap<String, JsonObject>,
396    },
397    #[serde(rename = "connectionDisabled")]
398    ConnectionDisabled {
399        #[serde(rename = "connection")]
400        connection: Connection,
401
402        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
403        undocumented: BTreeMap<String, JsonObject>,
404    },
405    #[serde(rename = "groupUserRole")]
406    GroupUserRole {
407        #[serde(rename = "groupInfo")]
408        group_info: GroupInfo,
409
410        #[serde(rename = "requiredRole")]
411        required_role: GroupMemberRole,
412
413        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
414        undocumented: BTreeMap<String, JsonObject>,
415    },
416    #[serde(rename = "groupMemberInitialRole")]
417    GroupMemberInitialRole {
418        #[serde(rename = "groupInfo")]
419        group_info: GroupInfo,
420
421        #[serde(rename = "initialRole")]
422        initial_role: GroupMemberRole,
423
424        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
425        undocumented: BTreeMap<String, JsonObject>,
426    },
427    #[serde(rename = "contactIncognitoCantInvite")]
428    ContactIncognitoCantInvite,
429    #[serde(rename = "groupIncognitoCantInvite")]
430    GroupIncognitoCantInvite,
431    #[serde(rename = "groupContactRole")]
432    GroupContactRole {
433        #[serde(rename = "contactName")]
434        contact_name: String,
435
436        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
437        undocumented: BTreeMap<String, JsonObject>,
438    },
439    #[serde(rename = "groupDuplicateMember")]
440    GroupDuplicateMember {
441        #[serde(rename = "contactName")]
442        contact_name: String,
443
444        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
445        undocumented: BTreeMap<String, JsonObject>,
446    },
447    #[serde(rename = "groupDuplicateMemberId")]
448    GroupDuplicateMemberId,
449    #[serde(rename = "groupNotJoined")]
450    GroupNotJoined {
451        #[serde(rename = "groupInfo")]
452        group_info: GroupInfo,
453
454        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
455        undocumented: BTreeMap<String, JsonObject>,
456    },
457    #[serde(rename = "groupMemberNotActive")]
458    GroupMemberNotActive,
459    #[serde(rename = "cantBlockMemberForSelf")]
460    CantBlockMemberForSelf {
461        #[serde(rename = "groupInfo")]
462        group_info: GroupInfo,
463
464        #[serde(rename = "member")]
465        member: GroupMember,
466
467        #[serde(rename = "setShowMessages")]
468        set_show_messages: bool,
469
470        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
471        undocumented: BTreeMap<String, JsonObject>,
472    },
473    #[serde(rename = "groupMemberUserRemoved")]
474    GroupMemberUserRemoved,
475    #[serde(rename = "groupMemberNotFound")]
476    GroupMemberNotFound,
477    #[serde(rename = "groupCantResendInvitation")]
478    GroupCantResendInvitation {
479        #[serde(rename = "groupInfo")]
480        group_info: GroupInfo,
481
482        #[serde(rename = "contactName")]
483        contact_name: String,
484
485        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
486        undocumented: BTreeMap<String, JsonObject>,
487    },
488    #[serde(rename = "groupInternal")]
489    GroupInternal {
490        #[serde(rename = "message")]
491        message: String,
492
493        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
494        undocumented: BTreeMap<String, JsonObject>,
495    },
496    #[serde(rename = "fileNotFound")]
497    FileNotFound {
498        #[serde(rename = "message")]
499        message: String,
500
501        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
502        undocumented: BTreeMap<String, JsonObject>,
503    },
504    #[serde(rename = "fileSize")]
505    FileSize {
506        #[serde(rename = "filePath")]
507        file_path: String,
508
509        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
510        undocumented: BTreeMap<String, JsonObject>,
511    },
512    #[serde(rename = "fileAlreadyReceiving")]
513    FileAlreadyReceiving {
514        #[serde(rename = "message")]
515        message: String,
516
517        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
518        undocumented: BTreeMap<String, JsonObject>,
519    },
520    #[serde(rename = "fileCancelled")]
521    FileCancelled {
522        #[serde(rename = "message")]
523        message: String,
524
525        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
526        undocumented: BTreeMap<String, JsonObject>,
527    },
528    #[serde(rename = "fileCancel")]
529    FileCancel {
530        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
531        file_id: i64,
532
533        #[serde(rename = "message")]
534        message: String,
535
536        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
537        undocumented: BTreeMap<String, JsonObject>,
538    },
539    #[serde(rename = "fileAlreadyExists")]
540    FileAlreadyExists {
541        #[serde(rename = "filePath")]
542        file_path: String,
543
544        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
545        undocumented: BTreeMap<String, JsonObject>,
546    },
547    #[serde(rename = "fileRead")]
548    FileRead {
549        #[serde(rename = "filePath")]
550        file_path: String,
551
552        #[serde(rename = "message")]
553        message: String,
554
555        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
556        undocumented: BTreeMap<String, JsonObject>,
557    },
558    #[serde(rename = "fileWrite")]
559    FileWrite {
560        #[serde(rename = "filePath")]
561        file_path: String,
562
563        #[serde(rename = "message")]
564        message: String,
565
566        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
567        undocumented: BTreeMap<String, JsonObject>,
568    },
569    #[serde(rename = "fileSend")]
570    FileSend {
571        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
572        file_id: i64,
573
574        #[serde(rename = "agentError")]
575        agent_error: AgentErrorType,
576
577        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
578        undocumented: BTreeMap<String, JsonObject>,
579    },
580    #[serde(rename = "fileRcvChunk")]
581    FileRcvChunk {
582        #[serde(rename = "message")]
583        message: String,
584
585        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
586        undocumented: BTreeMap<String, JsonObject>,
587    },
588    #[serde(rename = "fileInternal")]
589    FileInternal {
590        #[serde(rename = "message")]
591        message: String,
592
593        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
594        undocumented: BTreeMap<String, JsonObject>,
595    },
596    #[serde(rename = "fileImageType")]
597    FileImageType {
598        #[serde(rename = "filePath")]
599        file_path: String,
600
601        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
602        undocumented: BTreeMap<String, JsonObject>,
603    },
604    #[serde(rename = "fileImageSize")]
605    FileImageSize {
606        #[serde(rename = "filePath")]
607        file_path: String,
608
609        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
610        undocumented: BTreeMap<String, JsonObject>,
611    },
612    #[serde(rename = "fileNotReceived")]
613    FileNotReceived {
614        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
615        file_id: i64,
616
617        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
618        undocumented: BTreeMap<String, JsonObject>,
619    },
620    #[serde(rename = "fileNotApproved")]
621    FileNotApproved {
622        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
623        file_id: i64,
624
625        #[serde(rename = "unknownServers")]
626        unknown_servers: Vec<String>,
627
628        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
629        undocumented: BTreeMap<String, JsonObject>,
630    },
631    #[serde(rename = "fallbackToSMPProhibited")]
632    FallbackToSmpProhibited {
633        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
634        file_id: i64,
635
636        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
637        undocumented: BTreeMap<String, JsonObject>,
638    },
639    #[serde(rename = "inlineFileProhibited")]
640    InlineFileProhibited {
641        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
642        file_id: i64,
643
644        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
645        undocumented: BTreeMap<String, JsonObject>,
646    },
647    #[serde(rename = "invalidForward")]
648    InvalidForward,
649    #[serde(rename = "invalidChatItemUpdate")]
650    InvalidChatItemUpdate,
651    #[serde(rename = "invalidChatItemDelete")]
652    InvalidChatItemDelete,
653    #[serde(rename = "hasCurrentCall")]
654    HasCurrentCall,
655    #[serde(rename = "noCurrentCall")]
656    NoCurrentCall,
657    #[serde(rename = "callContact")]
658    CallContact {
659        #[serde(
660            rename = "contactId",
661            deserialize_with = "deserialize_number_from_string"
662        )]
663        contact_id: i64,
664
665        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
666        undocumented: BTreeMap<String, JsonObject>,
667    },
668    #[serde(rename = "directMessagesProhibited")]
669    DirectMessagesProhibited {
670        #[serde(rename = "direction")]
671        direction: MsgDirection,
672
673        #[serde(rename = "contact")]
674        contact: Contact,
675
676        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
677        undocumented: BTreeMap<String, JsonObject>,
678    },
679    #[serde(rename = "agentVersion")]
680    AgentVersion,
681    #[serde(rename = "agentNoSubResult")]
682    AgentNoSubResult {
683        #[serde(rename = "agentConnId")]
684        agent_conn_id: String,
685
686        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
687        undocumented: BTreeMap<String, JsonObject>,
688    },
689    #[serde(rename = "commandError")]
690    CommandError {
691        #[serde(rename = "message")]
692        message: String,
693
694        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
695        undocumented: BTreeMap<String, JsonObject>,
696    },
697    #[serde(rename = "agentCommandError")]
698    AgentCommandError {
699        #[serde(rename = "message")]
700        message: String,
701
702        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
703        undocumented: BTreeMap<String, JsonObject>,
704    },
705    #[serde(rename = "invalidFileDescription")]
706    InvalidFileDescription {
707        #[serde(rename = "message")]
708        message: String,
709
710        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
711        undocumented: BTreeMap<String, JsonObject>,
712    },
713    #[serde(rename = "connectionIncognitoChangeProhibited")]
714    ConnectionIncognitoChangeProhibited,
715    #[serde(rename = "connectionUserChangeProhibited")]
716    ConnectionUserChangeProhibited,
717    #[serde(rename = "peerChatVRangeIncompatible")]
718    PeerChatVRangeIncompatible,
719    #[serde(rename = "internalError")]
720    InternalError {
721        #[serde(rename = "message")]
722        message: String,
723
724        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
725        undocumented: BTreeMap<String, JsonObject>,
726    },
727    #[serde(rename = "exception")]
728    Exception {
729        #[serde(rename = "message")]
730        message: String,
731
732        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
733        undocumented: BTreeMap<String, JsonObject>,
734    },
735    #[serde(untagged)]
736    Undocumented(BTreeMap<String, JsonObject>),
737}
738
739#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
740#[serde(tag = "type")]
741#[non_exhaustive]
742pub enum CommandError {
743    #[serde(rename = "UNKNOWN")]
744    Unknown,
745    #[serde(rename = "SYNTAX")]
746    Syntax,
747    #[serde(rename = "PROHIBITED")]
748    Prohibited,
749    #[serde(rename = "NO_AUTH")]
750    NoAuth,
751    #[serde(rename = "HAS_AUTH")]
752    HasAuth,
753    #[serde(rename = "NO_ENTITY")]
754    NoEntity,
755    #[serde(untagged)]
756    Undocumented(BTreeMap<String, JsonObject>),
757}
758
759#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
760#[serde(tag = "type")]
761#[non_exhaustive]
762pub enum CommandErrorType {
763    #[serde(rename = "PROHIBITED")]
764    Prohibited,
765    #[serde(rename = "SYNTAX")]
766    Syntax,
767    #[serde(rename = "NO_CONN")]
768    NoConn,
769    #[serde(rename = "SIZE")]
770    Size,
771    #[serde(rename = "LARGE")]
772    Large,
773    #[serde(untagged)]
774    Undocumented(BTreeMap<String, JsonObject>),
775}
776
777#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
778#[serde(tag = "type")]
779#[non_exhaustive]
780pub enum ConnectionErrorType {
781    #[serde(rename = "NOT_FOUND")]
782    NotFound,
783    #[serde(rename = "DUPLICATE")]
784    Duplicate,
785    #[serde(rename = "SIMPLEX")]
786    Simplex,
787    #[serde(rename = "NOT_ACCEPTED")]
788    NotAccepted,
789    #[serde(rename = "NOT_AVAILABLE")]
790    NotAvailable,
791    #[serde(untagged)]
792    Undocumented(BTreeMap<String, JsonObject>),
793}
794
795#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
796#[serde(tag = "type")]
797#[non_exhaustive]
798pub enum ErrorType {
799    #[serde(rename = "BLOCK")]
800    Block,
801    #[serde(rename = "SESSION")]
802    Session,
803    #[serde(rename = "CMD")]
804    Cmd {
805        #[serde(rename = "cmdErr")]
806        cmd_err: CommandError,
807
808        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
809        undocumented: BTreeMap<String, JsonObject>,
810    },
811    #[serde(rename = "PROXY")]
812    Proxy {
813        #[serde(rename = "proxyErr")]
814        proxy_err: Arc<ProxyError>,
815
816        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
817        undocumented: BTreeMap<String, JsonObject>,
818    },
819    #[serde(rename = "AUTH")]
820    Auth,
821    #[serde(rename = "BLOCKED")]
822    Blocked {
823        #[serde(rename = "blockInfo")]
824        block_info: BlockingInfo,
825
826        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
827        undocumented: BTreeMap<String, JsonObject>,
828    },
829    #[serde(rename = "SERVICE")]
830    Service,
831    #[serde(rename = "CRYPTO")]
832    Crypto,
833    #[serde(rename = "QUOTA")]
834    Quota,
835    #[serde(rename = "STORE")]
836    Store {
837        #[serde(rename = "storeErr")]
838        store_err: String,
839
840        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
841        undocumented: BTreeMap<String, JsonObject>,
842    },
843    #[serde(rename = "NO_MSG")]
844    NoMsg,
845    #[serde(rename = "LARGE_MSG")]
846    LargeMsg,
847    #[serde(rename = "EXPIRED")]
848    Expired,
849    #[serde(rename = "INTERNAL")]
850    Internal,
851    #[serde(rename = "DUPLICATE_")]
852    Duplicate,
853    #[serde(untagged)]
854    Undocumented(BTreeMap<String, JsonObject>),
855}
856
857#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
858#[serde(tag = "type")]
859#[non_exhaustive]
860pub enum FileError {
861    #[serde(rename = "auth")]
862    Auth,
863    #[serde(rename = "blocked")]
864    Blocked {
865        #[serde(rename = "server")]
866        server: String,
867
868        #[serde(rename = "blockInfo")]
869        block_info: BlockingInfo,
870
871        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
872        undocumented: BTreeMap<String, JsonObject>,
873    },
874    #[serde(rename = "noFile")]
875    NoFile,
876    #[serde(rename = "relay")]
877    Relay {
878        #[serde(rename = "srvError")]
879        srv_error: SrvError,
880
881        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
882        undocumented: BTreeMap<String, JsonObject>,
883    },
884    #[serde(rename = "other")]
885    Other {
886        #[serde(rename = "fileError")]
887        file_error: String,
888
889        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
890        undocumented: BTreeMap<String, JsonObject>,
891    },
892    #[serde(untagged)]
893    Undocumented(BTreeMap<String, JsonObject>),
894}
895
896#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
897#[serde(tag = "type")]
898#[non_exhaustive]
899pub enum FileErrorType {
900    #[serde(rename = "NOT_APPROVED")]
901    NotApproved,
902    #[serde(rename = "SIZE")]
903    Size,
904    #[serde(rename = "REDIRECT")]
905    Redirect {
906        #[serde(rename = "redirectError")]
907        redirect_error: String,
908
909        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
910        undocumented: BTreeMap<String, JsonObject>,
911    },
912    #[serde(rename = "FILE_IO")]
913    FileIo {
914        #[serde(rename = "fileIOError")]
915        file_io_error: String,
916
917        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
918        undocumented: BTreeMap<String, JsonObject>,
919    },
920    #[serde(rename = "NO_FILE")]
921    NoFile,
922    #[serde(untagged)]
923    Undocumented(BTreeMap<String, JsonObject>),
924}
925
926#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
927#[non_exhaustive]
928pub enum HandshakeError {
929    #[default]
930    #[serde(rename = "PARSE")]
931    Parse,
932    #[serde(rename = "IDENTITY")]
933    Identity,
934    #[serde(rename = "BAD_AUTH")]
935    BadAuth,
936    #[serde(rename = "BAD_SERVICE")]
937    BadService,
938}
939
940#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
941#[non_exhaustive]
942pub enum MsgDecryptError {
943    #[default]
944    #[serde(rename = "ratchetHeader")]
945    RatchetHeader,
946    #[serde(rename = "tooManySkipped")]
947    TooManySkipped,
948    #[serde(rename = "ratchetEarlier")]
949    RatchetEarlier,
950    #[serde(rename = "other")]
951    Other,
952    #[serde(rename = "ratchetSync")]
953    RatchetSync,
954}
955
956#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
957#[serde(tag = "type")]
958#[non_exhaustive]
959pub enum MsgErrorType {
960    #[serde(rename = "msgSkipped")]
961    MsgSkipped {
962        #[serde(
963            rename = "fromMsgId",
964            deserialize_with = "deserialize_number_from_string"
965        )]
966        from_msg_id: i64,
967
968        #[serde(
969            rename = "toMsgId",
970            deserialize_with = "deserialize_number_from_string"
971        )]
972        to_msg_id: i64,
973
974        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
975        undocumented: BTreeMap<String, JsonObject>,
976    },
977    #[serde(rename = "msgBadId")]
978    MsgBadId {
979        #[serde(rename = "msgId", deserialize_with = "deserialize_number_from_string")]
980        msg_id: i64,
981
982        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
983        undocumented: BTreeMap<String, JsonObject>,
984    },
985    #[serde(rename = "msgBadHash")]
986    MsgBadHash,
987    #[serde(rename = "msgDuplicate")]
988    MsgDuplicate,
989    #[serde(untagged)]
990    Undocumented(BTreeMap<String, JsonObject>),
991}
992
993#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
994#[serde(tag = "type")]
995#[non_exhaustive]
996pub enum NetworkError {
997    #[serde(rename = "connectError")]
998    ConnectError {
999        #[serde(rename = "connectError")]
1000        connect_error: String,
1001
1002        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1003        undocumented: BTreeMap<String, JsonObject>,
1004    },
1005    #[serde(rename = "tLSError")]
1006    TLsError {
1007        #[serde(rename = "tlsError")]
1008        tls_error: String,
1009
1010        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1011        undocumented: BTreeMap<String, JsonObject>,
1012    },
1013    #[serde(rename = "unknownCAError")]
1014    UnknownCaError,
1015    #[serde(rename = "failedError")]
1016    FailedError,
1017    #[serde(rename = "timeoutError")]
1018    TimeoutError,
1019    #[serde(rename = "subscribeError")]
1020    SubscribeError {
1021        #[serde(rename = "subscribeError")]
1022        subscribe_error: String,
1023
1024        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1025        undocumented: BTreeMap<String, JsonObject>,
1026    },
1027    #[serde(untagged)]
1028    Undocumented(BTreeMap<String, JsonObject>),
1029}
1030
1031#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1032#[serde(tag = "type")]
1033#[non_exhaustive]
1034pub enum ProxyClientError {
1035    #[serde(rename = "protocolError")]
1036    ProtocolError {
1037        #[serde(rename = "protocolErr")]
1038        protocol_err: ErrorType,
1039
1040        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1041        undocumented: BTreeMap<String, JsonObject>,
1042    },
1043    #[serde(rename = "unexpectedResponse")]
1044    UnexpectedResponse {
1045        #[serde(rename = "responseStr")]
1046        response_str: String,
1047
1048        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1049        undocumented: BTreeMap<String, JsonObject>,
1050    },
1051    #[serde(rename = "responseError")]
1052    ResponseError {
1053        #[serde(rename = "responseErr")]
1054        response_err: ErrorType,
1055
1056        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1057        undocumented: BTreeMap<String, JsonObject>,
1058    },
1059    #[serde(untagged)]
1060    Undocumented(BTreeMap<String, JsonObject>),
1061}
1062
1063#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1064#[serde(tag = "type")]
1065#[non_exhaustive]
1066pub enum ProxyError {
1067    #[serde(rename = "PROTOCOL")]
1068    Protocol {
1069        #[serde(rename = "protocolErr")]
1070        protocol_err: ErrorType,
1071
1072        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1073        undocumented: BTreeMap<String, JsonObject>,
1074    },
1075    #[serde(rename = "BROKER")]
1076    Broker {
1077        #[serde(rename = "brokerErr")]
1078        broker_err: BrokerErrorType,
1079
1080        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1081        undocumented: BTreeMap<String, JsonObject>,
1082    },
1083    #[serde(rename = "BASIC_AUTH")]
1084    BasicAuth,
1085    #[serde(rename = "NO_SESSION")]
1086    NoSession,
1087    #[serde(untagged)]
1088    Undocumented(BTreeMap<String, JsonObject>),
1089}
1090
1091#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1092#[serde(tag = "type")]
1093#[non_exhaustive]
1094pub enum RCErrorType {
1095    #[serde(rename = "internal")]
1096    Internal {
1097        #[serde(rename = "internalErr")]
1098        internal_err: String,
1099
1100        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1101        undocumented: BTreeMap<String, JsonObject>,
1102    },
1103    #[serde(rename = "identity")]
1104    Identity,
1105    #[serde(rename = "noLocalAddress")]
1106    NoLocalAddress,
1107    #[serde(rename = "newController")]
1108    NewController,
1109    #[serde(rename = "notDiscovered")]
1110    NotDiscovered,
1111    #[serde(rename = "tLSStartFailed")]
1112    TLsStartFailed,
1113    #[serde(rename = "exception")]
1114    Exception {
1115        #[serde(rename = "exception")]
1116        exception: String,
1117
1118        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1119        undocumented: BTreeMap<String, JsonObject>,
1120    },
1121    #[serde(rename = "ctrlAuth")]
1122    CtrlAuth,
1123    #[serde(rename = "ctrlNotFound")]
1124    CtrlNotFound,
1125    #[serde(rename = "ctrlError")]
1126    CtrlError {
1127        #[serde(rename = "ctrlErr")]
1128        ctrl_err: String,
1129
1130        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1131        undocumented: BTreeMap<String, JsonObject>,
1132    },
1133    #[serde(rename = "invitation")]
1134    Invitation,
1135    #[serde(rename = "version")]
1136    Version,
1137    #[serde(rename = "encrypt")]
1138    Encrypt,
1139    #[serde(rename = "decrypt")]
1140    Decrypt,
1141    #[serde(rename = "blockSize")]
1142    BlockSize,
1143    #[serde(rename = "syntax")]
1144    Syntax {
1145        #[serde(rename = "syntaxErr")]
1146        syntax_err: String,
1147
1148        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1149        undocumented: BTreeMap<String, JsonObject>,
1150    },
1151    #[serde(untagged)]
1152    Undocumented(BTreeMap<String, JsonObject>),
1153}
1154
1155#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1156#[serde(tag = "type")]
1157#[non_exhaustive]
1158pub enum SMPAgentError {
1159    #[serde(rename = "A_MESSAGE")]
1160    AMessage,
1161    #[serde(rename = "A_PROHIBITED")]
1162    AProhibited {
1163        #[serde(rename = "prohibitedErr")]
1164        prohibited_err: String,
1165
1166        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1167        undocumented: BTreeMap<String, JsonObject>,
1168    },
1169    #[serde(rename = "A_VERSION")]
1170    AVersion,
1171    #[serde(rename = "A_LINK")]
1172    ALink {
1173        #[serde(rename = "linkErr")]
1174        link_err: String,
1175
1176        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1177        undocumented: BTreeMap<String, JsonObject>,
1178    },
1179    #[serde(rename = "A_CRYPTO")]
1180    ACrypto {
1181        #[serde(rename = "cryptoErr")]
1182        crypto_err: AgentCryptoError,
1183
1184        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1185        undocumented: BTreeMap<String, JsonObject>,
1186    },
1187    #[serde(rename = "A_DUPLICATE")]
1188    ADuplicate,
1189    #[serde(rename = "A_QUEUE")]
1190    AQueue {
1191        #[serde(rename = "queueErr")]
1192        queue_err: String,
1193
1194        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1195        undocumented: BTreeMap<String, JsonObject>,
1196    },
1197    #[serde(untagged)]
1198    Undocumented(BTreeMap<String, JsonObject>),
1199}
1200
1201#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1202#[serde(tag = "type")]
1203#[non_exhaustive]
1204pub enum SndError {
1205    #[serde(rename = "auth")]
1206    Auth,
1207    #[serde(rename = "quota")]
1208    Quota,
1209    #[serde(rename = "expired")]
1210    Expired,
1211    #[serde(rename = "relay")]
1212    Relay {
1213        #[serde(rename = "srvError")]
1214        srv_error: SrvError,
1215
1216        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1217        undocumented: BTreeMap<String, JsonObject>,
1218    },
1219    #[serde(rename = "proxy")]
1220    Proxy {
1221        #[serde(rename = "proxyServer")]
1222        proxy_server: String,
1223
1224        #[serde(rename = "srvError")]
1225        srv_error: SrvError,
1226
1227        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1228        undocumented: BTreeMap<String, JsonObject>,
1229    },
1230    #[serde(rename = "proxyRelay")]
1231    ProxyRelay {
1232        #[serde(rename = "proxyServer")]
1233        proxy_server: String,
1234
1235        #[serde(rename = "srvError")]
1236        srv_error: SrvError,
1237
1238        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1239        undocumented: BTreeMap<String, JsonObject>,
1240    },
1241    #[serde(rename = "other")]
1242    Other {
1243        #[serde(rename = "sndError")]
1244        snd_error: String,
1245
1246        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1247        undocumented: BTreeMap<String, JsonObject>,
1248    },
1249    #[serde(untagged)]
1250    Undocumented(BTreeMap<String, JsonObject>),
1251}
1252
1253#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1254#[serde(tag = "type")]
1255#[non_exhaustive]
1256pub enum SrvError {
1257    #[serde(rename = "host")]
1258    Host,
1259    #[serde(rename = "version")]
1260    Version,
1261    #[serde(rename = "other")]
1262    Other {
1263        #[serde(rename = "srvError")]
1264        srv_error: String,
1265
1266        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1267        undocumented: BTreeMap<String, JsonObject>,
1268    },
1269    #[serde(untagged)]
1270    Undocumented(BTreeMap<String, JsonObject>),
1271}
1272
1273#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1274#[serde(tag = "type")]
1275#[non_exhaustive]
1276pub enum StoreError {
1277    #[serde(rename = "duplicateName")]
1278    DuplicateName,
1279    #[serde(rename = "userNotFound")]
1280    UserNotFound {
1281        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
1282        user_id: i64,
1283
1284        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1285        undocumented: BTreeMap<String, JsonObject>,
1286    },
1287    #[serde(rename = "userNotFoundByName")]
1288    UserNotFoundByName {
1289        #[serde(rename = "contactName")]
1290        contact_name: String,
1291
1292        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1293        undocumented: BTreeMap<String, JsonObject>,
1294    },
1295    #[serde(rename = "userNotFoundByContactId")]
1296    UserNotFoundByContactId {
1297        #[serde(
1298            rename = "contactId",
1299            deserialize_with = "deserialize_number_from_string"
1300        )]
1301        contact_id: i64,
1302
1303        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1304        undocumented: BTreeMap<String, JsonObject>,
1305    },
1306    #[serde(rename = "userNotFoundByGroupId")]
1307    UserNotFoundByGroupId {
1308        #[serde(
1309            rename = "groupId",
1310            deserialize_with = "deserialize_number_from_string"
1311        )]
1312        group_id: i64,
1313
1314        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1315        undocumented: BTreeMap<String, JsonObject>,
1316    },
1317    #[serde(rename = "userNotFoundByFileId")]
1318    UserNotFoundByFileId {
1319        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1320        file_id: i64,
1321
1322        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1323        undocumented: BTreeMap<String, JsonObject>,
1324    },
1325    #[serde(rename = "userNotFoundByContactRequestId")]
1326    UserNotFoundByContactRequestId {
1327        #[serde(
1328            rename = "contactRequestId",
1329            deserialize_with = "deserialize_number_from_string"
1330        )]
1331        contact_request_id: i64,
1332
1333        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1334        undocumented: BTreeMap<String, JsonObject>,
1335    },
1336    #[serde(rename = "contactNotFound")]
1337    ContactNotFound {
1338        #[serde(
1339            rename = "contactId",
1340            deserialize_with = "deserialize_number_from_string"
1341        )]
1342        contact_id: i64,
1343
1344        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1345        undocumented: BTreeMap<String, JsonObject>,
1346    },
1347    #[serde(rename = "contactNotFoundByName")]
1348    ContactNotFoundByName {
1349        #[serde(rename = "contactName")]
1350        contact_name: String,
1351
1352        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1353        undocumented: BTreeMap<String, JsonObject>,
1354    },
1355    #[serde(rename = "contactNotFoundByMemberId")]
1356    ContactNotFoundByMemberId {
1357        #[serde(
1358            rename = "groupMemberId",
1359            deserialize_with = "deserialize_number_from_string"
1360        )]
1361        group_member_id: i64,
1362
1363        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1364        undocumented: BTreeMap<String, JsonObject>,
1365    },
1366    #[serde(rename = "contactNotReady")]
1367    ContactNotReady {
1368        #[serde(rename = "contactName")]
1369        contact_name: String,
1370
1371        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1372        undocumented: BTreeMap<String, JsonObject>,
1373    },
1374    #[serde(rename = "duplicateContactLink")]
1375    DuplicateContactLink,
1376    #[serde(rename = "userContactLinkNotFound")]
1377    UserContactLinkNotFound,
1378    #[serde(rename = "contactRequestNotFound")]
1379    ContactRequestNotFound {
1380        #[serde(
1381            rename = "contactRequestId",
1382            deserialize_with = "deserialize_number_from_string"
1383        )]
1384        contact_request_id: i64,
1385
1386        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1387        undocumented: BTreeMap<String, JsonObject>,
1388    },
1389    #[serde(rename = "contactRequestNotFoundByName")]
1390    ContactRequestNotFoundByName {
1391        #[serde(rename = "contactName")]
1392        contact_name: String,
1393
1394        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1395        undocumented: BTreeMap<String, JsonObject>,
1396    },
1397    #[serde(rename = "invalidContactRequestEntity")]
1398    InvalidContactRequestEntity {
1399        #[serde(
1400            rename = "contactRequestId",
1401            deserialize_with = "deserialize_number_from_string"
1402        )]
1403        contact_request_id: i64,
1404
1405        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1406        undocumented: BTreeMap<String, JsonObject>,
1407    },
1408    #[serde(rename = "invalidBusinessChatContactRequest")]
1409    InvalidBusinessChatContactRequest,
1410    #[serde(rename = "groupNotFound")]
1411    GroupNotFound {
1412        #[serde(
1413            rename = "groupId",
1414            deserialize_with = "deserialize_number_from_string"
1415        )]
1416        group_id: i64,
1417
1418        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1419        undocumented: BTreeMap<String, JsonObject>,
1420    },
1421    #[serde(rename = "groupNotFoundByName")]
1422    GroupNotFoundByName {
1423        #[serde(rename = "groupName")]
1424        group_name: String,
1425
1426        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1427        undocumented: BTreeMap<String, JsonObject>,
1428    },
1429    #[serde(rename = "groupMemberNameNotFound")]
1430    GroupMemberNameNotFound {
1431        #[serde(
1432            rename = "groupId",
1433            deserialize_with = "deserialize_number_from_string"
1434        )]
1435        group_id: i64,
1436
1437        #[serde(rename = "groupMemberName")]
1438        group_member_name: String,
1439
1440        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1441        undocumented: BTreeMap<String, JsonObject>,
1442    },
1443    #[serde(rename = "groupMemberNotFound")]
1444    GroupMemberNotFound {
1445        #[serde(
1446            rename = "groupMemberId",
1447            deserialize_with = "deserialize_number_from_string"
1448        )]
1449        group_member_id: i64,
1450
1451        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1452        undocumented: BTreeMap<String, JsonObject>,
1453    },
1454    #[serde(rename = "groupHostMemberNotFound")]
1455    GroupHostMemberNotFound {
1456        #[serde(
1457            rename = "groupId",
1458            deserialize_with = "deserialize_number_from_string"
1459        )]
1460        group_id: i64,
1461
1462        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1463        undocumented: BTreeMap<String, JsonObject>,
1464    },
1465    #[serde(rename = "groupMemberNotFoundByMemberId")]
1466    GroupMemberNotFoundByMemberId {
1467        #[serde(rename = "memberId")]
1468        member_id: String,
1469
1470        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1471        undocumented: BTreeMap<String, JsonObject>,
1472    },
1473    #[serde(rename = "memberContactGroupMemberNotFound")]
1474    MemberContactGroupMemberNotFound {
1475        #[serde(
1476            rename = "contactId",
1477            deserialize_with = "deserialize_number_from_string"
1478        )]
1479        contact_id: i64,
1480
1481        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1482        undocumented: BTreeMap<String, JsonObject>,
1483    },
1484    #[serde(rename = "groupWithoutUser")]
1485    GroupWithoutUser,
1486    #[serde(rename = "duplicateGroupMember")]
1487    DuplicateGroupMember,
1488    #[serde(rename = "groupAlreadyJoined")]
1489    GroupAlreadyJoined,
1490    #[serde(rename = "groupInvitationNotFound")]
1491    GroupInvitationNotFound,
1492    #[serde(rename = "noteFolderAlreadyExists")]
1493    NoteFolderAlreadyExists {
1494        #[serde(
1495            rename = "noteFolderId",
1496            deserialize_with = "deserialize_number_from_string"
1497        )]
1498        note_folder_id: i64,
1499
1500        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1501        undocumented: BTreeMap<String, JsonObject>,
1502    },
1503    #[serde(rename = "noteFolderNotFound")]
1504    NoteFolderNotFound {
1505        #[serde(
1506            rename = "noteFolderId",
1507            deserialize_with = "deserialize_number_from_string"
1508        )]
1509        note_folder_id: i64,
1510
1511        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1512        undocumented: BTreeMap<String, JsonObject>,
1513    },
1514    #[serde(rename = "userNoteFolderNotFound")]
1515    UserNoteFolderNotFound,
1516    #[serde(rename = "sndFileNotFound")]
1517    SndFileNotFound {
1518        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1519        file_id: i64,
1520
1521        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1522        undocumented: BTreeMap<String, JsonObject>,
1523    },
1524    #[serde(rename = "sndFileInvalid")]
1525    SndFileInvalid {
1526        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1527        file_id: i64,
1528
1529        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1530        undocumented: BTreeMap<String, JsonObject>,
1531    },
1532    #[serde(rename = "rcvFileNotFound")]
1533    RcvFileNotFound {
1534        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1535        file_id: i64,
1536
1537        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1538        undocumented: BTreeMap<String, JsonObject>,
1539    },
1540    #[serde(rename = "rcvFileDescrNotFound")]
1541    RcvFileDescrNotFound {
1542        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1543        file_id: i64,
1544
1545        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1546        undocumented: BTreeMap<String, JsonObject>,
1547    },
1548    #[serde(rename = "fileNotFound")]
1549    FileNotFound {
1550        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1551        file_id: i64,
1552
1553        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1554        undocumented: BTreeMap<String, JsonObject>,
1555    },
1556    #[serde(rename = "rcvFileInvalid")]
1557    RcvFileInvalid {
1558        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1559        file_id: i64,
1560
1561        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1562        undocumented: BTreeMap<String, JsonObject>,
1563    },
1564    #[serde(rename = "rcvFileInvalidDescrPart")]
1565    RcvFileInvalidDescrPart,
1566    #[serde(rename = "localFileNoTransfer")]
1567    LocalFileNoTransfer {
1568        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1569        file_id: i64,
1570
1571        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1572        undocumented: BTreeMap<String, JsonObject>,
1573    },
1574    #[serde(rename = "sharedMsgIdNotFoundByFileId")]
1575    SharedMsgIdNotFoundByFileId {
1576        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1577        file_id: i64,
1578
1579        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1580        undocumented: BTreeMap<String, JsonObject>,
1581    },
1582    #[serde(rename = "fileIdNotFoundBySharedMsgId")]
1583    FileIdNotFoundBySharedMsgId {
1584        #[serde(rename = "sharedMsgId")]
1585        shared_msg_id: String,
1586
1587        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1588        undocumented: BTreeMap<String, JsonObject>,
1589    },
1590    #[serde(rename = "sndFileNotFoundXFTP")]
1591    SndFileNotFoundXftp {
1592        #[serde(rename = "agentSndFileId")]
1593        agent_snd_file_id: String,
1594
1595        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1596        undocumented: BTreeMap<String, JsonObject>,
1597    },
1598    #[serde(rename = "rcvFileNotFoundXFTP")]
1599    RcvFileNotFoundXftp {
1600        #[serde(rename = "agentRcvFileId")]
1601        agent_rcv_file_id: String,
1602
1603        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1604        undocumented: BTreeMap<String, JsonObject>,
1605    },
1606    #[serde(rename = "connectionNotFound")]
1607    ConnectionNotFound {
1608        #[serde(rename = "agentConnId")]
1609        agent_conn_id: String,
1610
1611        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1612        undocumented: BTreeMap<String, JsonObject>,
1613    },
1614    #[serde(rename = "connectionNotFoundById")]
1615    ConnectionNotFoundById {
1616        #[serde(rename = "connId", deserialize_with = "deserialize_number_from_string")]
1617        conn_id: i64,
1618
1619        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1620        undocumented: BTreeMap<String, JsonObject>,
1621    },
1622    #[serde(rename = "connectionNotFoundByMemberId")]
1623    ConnectionNotFoundByMemberId {
1624        #[serde(
1625            rename = "groupMemberId",
1626            deserialize_with = "deserialize_number_from_string"
1627        )]
1628        group_member_id: i64,
1629
1630        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1631        undocumented: BTreeMap<String, JsonObject>,
1632    },
1633    #[serde(rename = "pendingConnectionNotFound")]
1634    PendingConnectionNotFound {
1635        #[serde(rename = "connId", deserialize_with = "deserialize_number_from_string")]
1636        conn_id: i64,
1637
1638        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1639        undocumented: BTreeMap<String, JsonObject>,
1640    },
1641    #[serde(rename = "introNotFound")]
1642    IntroNotFound,
1643    #[serde(rename = "uniqueID")]
1644    UniqueId,
1645    #[serde(rename = "largeMsg")]
1646    LargeMsg,
1647    #[serde(rename = "internalError")]
1648    InternalError {
1649        #[serde(rename = "message")]
1650        message: String,
1651
1652        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1653        undocumented: BTreeMap<String, JsonObject>,
1654    },
1655    #[serde(rename = "dBException")]
1656    DBException {
1657        #[serde(rename = "message")]
1658        message: String,
1659
1660        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1661        undocumented: BTreeMap<String, JsonObject>,
1662    },
1663    #[serde(rename = "dBBusyError")]
1664    DBBusyError {
1665        #[serde(rename = "message")]
1666        message: String,
1667
1668        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1669        undocumented: BTreeMap<String, JsonObject>,
1670    },
1671    #[serde(rename = "badChatItem")]
1672    BadChatItem {
1673        #[serde(rename = "itemId", deserialize_with = "deserialize_number_from_string")]
1674        item_id: i64,
1675
1676        #[serde(rename = "itemTs", skip_serializing_if = "Option::is_none")]
1677        item_ts: Option<UtcTime>,
1678
1679        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1680        undocumented: BTreeMap<String, JsonObject>,
1681    },
1682    #[serde(rename = "chatItemNotFound")]
1683    ChatItemNotFound {
1684        #[serde(rename = "itemId", deserialize_with = "deserialize_number_from_string")]
1685        item_id: i64,
1686
1687        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1688        undocumented: BTreeMap<String, JsonObject>,
1689    },
1690    #[serde(rename = "chatItemNotFoundByText")]
1691    ChatItemNotFoundByText {
1692        #[serde(rename = "text")]
1693        text: String,
1694
1695        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1696        undocumented: BTreeMap<String, JsonObject>,
1697    },
1698    #[serde(rename = "chatItemSharedMsgIdNotFound")]
1699    ChatItemSharedMsgIdNotFound {
1700        #[serde(rename = "sharedMsgId")]
1701        shared_msg_id: String,
1702
1703        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1704        undocumented: BTreeMap<String, JsonObject>,
1705    },
1706    #[serde(rename = "chatItemNotFoundByFileId")]
1707    ChatItemNotFoundByFileId {
1708        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1709        file_id: i64,
1710
1711        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1712        undocumented: BTreeMap<String, JsonObject>,
1713    },
1714    #[serde(rename = "chatItemNotFoundByContactId")]
1715    ChatItemNotFoundByContactId {
1716        #[serde(
1717            rename = "contactId",
1718            deserialize_with = "deserialize_number_from_string"
1719        )]
1720        contact_id: i64,
1721
1722        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1723        undocumented: BTreeMap<String, JsonObject>,
1724    },
1725    #[serde(rename = "chatItemNotFoundByGroupId")]
1726    ChatItemNotFoundByGroupId {
1727        #[serde(
1728            rename = "groupId",
1729            deserialize_with = "deserialize_number_from_string"
1730        )]
1731        group_id: i64,
1732
1733        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1734        undocumented: BTreeMap<String, JsonObject>,
1735    },
1736    #[serde(rename = "profileNotFound")]
1737    ProfileNotFound {
1738        #[serde(
1739            rename = "profileId",
1740            deserialize_with = "deserialize_number_from_string"
1741        )]
1742        profile_id: i64,
1743
1744        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1745        undocumented: BTreeMap<String, JsonObject>,
1746    },
1747    #[serde(rename = "duplicateGroupLink")]
1748    DuplicateGroupLink {
1749        #[serde(rename = "groupInfo")]
1750        group_info: GroupInfo,
1751
1752        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1753        undocumented: BTreeMap<String, JsonObject>,
1754    },
1755    #[serde(rename = "groupLinkNotFound")]
1756    GroupLinkNotFound {
1757        #[serde(rename = "groupInfo")]
1758        group_info: GroupInfo,
1759
1760        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1761        undocumented: BTreeMap<String, JsonObject>,
1762    },
1763    #[serde(rename = "hostMemberIdNotFound")]
1764    HostMemberIdNotFound {
1765        #[serde(
1766            rename = "groupId",
1767            deserialize_with = "deserialize_number_from_string"
1768        )]
1769        group_id: i64,
1770
1771        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1772        undocumented: BTreeMap<String, JsonObject>,
1773    },
1774    #[serde(rename = "contactNotFoundByFileId")]
1775    ContactNotFoundByFileId {
1776        #[serde(rename = "fileId", deserialize_with = "deserialize_number_from_string")]
1777        file_id: i64,
1778
1779        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1780        undocumented: BTreeMap<String, JsonObject>,
1781    },
1782    #[serde(rename = "noGroupSndStatus")]
1783    NoGroupSndStatus {
1784        #[serde(rename = "itemId", deserialize_with = "deserialize_number_from_string")]
1785        item_id: i64,
1786
1787        #[serde(
1788            rename = "groupMemberId",
1789            deserialize_with = "deserialize_number_from_string"
1790        )]
1791        group_member_id: i64,
1792
1793        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1794        undocumented: BTreeMap<String, JsonObject>,
1795    },
1796    #[serde(rename = "duplicateGroupMessage")]
1797    DuplicateGroupMessage {
1798        #[serde(
1799            rename = "groupId",
1800            deserialize_with = "deserialize_number_from_string"
1801        )]
1802        group_id: i64,
1803
1804        #[serde(rename = "sharedMsgId")]
1805        shared_msg_id: String,
1806
1807        #[serde(
1808            rename = "authorGroupMemberId",
1809            skip_serializing_if = "Option::is_none",
1810            deserialize_with = "deserialize_option_number_from_string",
1811            default
1812        )]
1813        author_group_member_id: Option<i64>,
1814
1815        #[serde(
1816            rename = "forwardedByGroupMemberId",
1817            skip_serializing_if = "Option::is_none",
1818            deserialize_with = "deserialize_option_number_from_string",
1819            default
1820        )]
1821        forwarded_by_group_member_id: Option<i64>,
1822
1823        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1824        undocumented: BTreeMap<String, JsonObject>,
1825    },
1826    #[serde(rename = "remoteHostNotFound")]
1827    RemoteHostNotFound {
1828        #[serde(
1829            rename = "remoteHostId",
1830            deserialize_with = "deserialize_number_from_string"
1831        )]
1832        remote_host_id: i64,
1833
1834        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1835        undocumented: BTreeMap<String, JsonObject>,
1836    },
1837    #[serde(rename = "remoteHostUnknown")]
1838    RemoteHostUnknown,
1839    #[serde(rename = "remoteHostDuplicateCA")]
1840    RemoteHostDuplicateCa,
1841    #[serde(rename = "remoteCtrlNotFound")]
1842    RemoteCtrlNotFound {
1843        #[serde(
1844            rename = "remoteCtrlId",
1845            deserialize_with = "deserialize_number_from_string"
1846        )]
1847        remote_ctrl_id: i64,
1848
1849        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1850        undocumented: BTreeMap<String, JsonObject>,
1851    },
1852    #[serde(rename = "remoteCtrlDuplicateCA")]
1853    RemoteCtrlDuplicateCa,
1854    #[serde(rename = "prohibitedDeleteUser")]
1855    ProhibitedDeleteUser {
1856        #[serde(rename = "userId", deserialize_with = "deserialize_number_from_string")]
1857        user_id: i64,
1858
1859        #[serde(
1860            rename = "contactId",
1861            deserialize_with = "deserialize_number_from_string"
1862        )]
1863        contact_id: i64,
1864
1865        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1866        undocumented: BTreeMap<String, JsonObject>,
1867    },
1868    #[serde(rename = "operatorNotFound")]
1869    OperatorNotFound {
1870        #[serde(
1871            rename = "serverOperatorId",
1872            deserialize_with = "deserialize_number_from_string"
1873        )]
1874        server_operator_id: i64,
1875
1876        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1877        undocumented: BTreeMap<String, JsonObject>,
1878    },
1879    #[serde(rename = "usageConditionsNotFound")]
1880    UsageConditionsNotFound,
1881    #[serde(rename = "invalidQuote")]
1882    InvalidQuote,
1883    #[serde(rename = "invalidMention")]
1884    InvalidMention,
1885    #[serde(untagged)]
1886    Undocumented(BTreeMap<String, JsonObject>),
1887}
1888
1889#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1890#[serde(tag = "type")]
1891#[non_exhaustive]
1892pub enum TransportError {
1893    #[serde(rename = "badBlock")]
1894    BadBlock,
1895    #[serde(rename = "version")]
1896    Version,
1897    #[serde(rename = "largeMsg")]
1898    LargeMsg,
1899    #[serde(rename = "badSession")]
1900    BadSession,
1901    #[serde(rename = "noServerAuth")]
1902    NoServerAuth,
1903    #[serde(rename = "handshake")]
1904    Handshake {
1905        #[serde(rename = "handshakeErr")]
1906        handshake_err: HandshakeError,
1907
1908        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1909        undocumented: BTreeMap<String, JsonObject>,
1910    },
1911    #[serde(untagged)]
1912    Undocumented(BTreeMap<String, JsonObject>),
1913}
1914
1915#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
1916#[serde(tag = "type")]
1917#[non_exhaustive]
1918pub enum XFTPErrorType {
1919    #[serde(rename = "BLOCK")]
1920    Block,
1921    #[serde(rename = "SESSION")]
1922    Session,
1923    #[serde(rename = "HANDSHAKE")]
1924    Handshake,
1925    #[serde(rename = "CMD")]
1926    Cmd {
1927        #[serde(rename = "cmdErr")]
1928        cmd_err: CommandError,
1929
1930        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1931        undocumented: BTreeMap<String, JsonObject>,
1932    },
1933    #[serde(rename = "AUTH")]
1934    Auth,
1935    #[serde(rename = "BLOCKED")]
1936    Blocked {
1937        #[serde(rename = "blockInfo")]
1938        block_info: BlockingInfo,
1939
1940        #[serde(flatten, skip_serializing_if = "BTreeMap::is_empty")]
1941        undocumented: BTreeMap<String, JsonObject>,
1942    },
1943    #[serde(rename = "SIZE")]
1944    Size,
1945    #[serde(rename = "QUOTA")]
1946    Quota,
1947    #[serde(rename = "DIGEST")]
1948    Digest,
1949    #[serde(rename = "CRYPTO")]
1950    Crypto,
1951    #[serde(rename = "NO_FILE")]
1952    NoFile,
1953    #[serde(rename = "HAS_FILE")]
1954    HasFile,
1955    #[serde(rename = "FILE_IO")]
1956    FileIo,
1957    #[serde(rename = "TIMEOUT")]
1958    Timeout,
1959    #[serde(rename = "INTERNAL")]
1960    Internal,
1961    #[serde(rename = "DUPLICATE_")]
1962    Duplicate,
1963    #[serde(untagged)]
1964    Undocumented(BTreeMap<String, JsonObject>),
1965}
1966
1967macro_rules! impl_error {
1968    ($($t:ty),+ $(,)?) => (
1969        $(
1970        impl std::fmt::Display for $t {
1971            fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1972                write!(f, "{:#?}", self)
1973            }
1974        }
1975
1976        impl std::error::Error for $t {}
1977        )+
1978    );
1979}
1980
1981impl_error!(
1982    AgentCryptoError,
1983    AgentErrorType,
1984    BrokerErrorType,
1985    ChatError,
1986    ChatErrorType,
1987    CommandError,
1988    CommandErrorType,
1989    ConnectionErrorType,
1990    ErrorType,
1991    FileError,
1992    FileErrorType,
1993    HandshakeError,
1994    MsgDecryptError,
1995    MsgErrorType,
1996    NetworkError,
1997    ProxyClientError,
1998    ProxyError,
1999    RCErrorType,
2000    SMPAgentError,
2001    SndError,
2002    SrvError,
2003    StoreError,
2004    TransportError,
2005    XFTPErrorType
2006);