rsolace 0.3.9

Solace bindings for the Rust
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
use enum_primitive::*;

#[cfg(target_os = "windows")]
enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(i32)]
    pub enum SolClientLogLevel {
        Emergency = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_EMERGENCY,
        Alert = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_ALERT,
        Critical = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_CRITICAL,
        Error = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_ERROR,
        Warning = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_WARNING,
        Notice = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_NOTICE,
        Info = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_INFO,
        Debug = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_DEBUG,
    }
}

#[cfg(not(target_os = "windows"))]
enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(u32)]
    pub enum SolClientLogLevel {
        Emergency = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_EMERGENCY,
        Alert = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_ALERT,
        Critical = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_CRITICAL,
        Error = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_ERROR,
        Warning = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_WARNING,
        Notice = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_NOTICE,
        Info = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_INFO,
        Debug = rsolace_sys::solClient_log_level_SOLCLIENT_LOG_DEBUG,
    }
}

enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(i32)]
    pub enum SolClientReturnCode {
        Ok = rsolace_sys::solClient_returnCode_SOLCLIENT_OK,
        WouldBlock = rsolace_sys::solClient_returnCode_SOLCLIENT_WOULD_BLOCK,
        InProgress = rsolace_sys::solClient_returnCode_SOLCLIENT_IN_PROGRESS,
        NotReady = rsolace_sys::solClient_returnCode_SOLCLIENT_NOT_READY,
        Eos = rsolace_sys::solClient_returnCode_SOLCLIENT_EOS,
        NotFound = rsolace_sys::solClient_returnCode_SOLCLIENT_NOT_FOUND,
        NoEvent = rsolace_sys::solClient_returnCode_SOLCLIENT_NOEVENT,
        InComplete = rsolace_sys::solClient_returnCode_SOLCLIENT_INCOMPLETE,
        Rollback = rsolace_sys::solClient_returnCode_SOLCLIENT_ROLLBACK,
        Fail = rsolace_sys::solClient_returnCode_SOLCLIENT_FAIL,
    }
}

impl std::fmt::Display for SolClientReturnCode {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            SolClientReturnCode::Ok => write!(f, "OK"),
            SolClientReturnCode::WouldBlock => write!(f, "WOULD_BLOCK"),
            SolClientReturnCode::InProgress => write!(f, "IN_PROGRESS"),
            SolClientReturnCode::NotReady => write!(f, "NOT_READY"),
            SolClientReturnCode::Eos => write!(f, "EOS"),
            SolClientReturnCode::NotFound => write!(f, "NOT_FOUND"),
            SolClientReturnCode::NoEvent => write!(f, "NO_EVENT"),
            SolClientReturnCode::InComplete => write!(f, "INCOMPLETE"),
            SolClientReturnCode::Rollback => write!(f, "ROLLBACK"),
            SolClientReturnCode::Fail => write!(f, "FAIL"),
        }
    }
}

#[cfg(target_os = "windows")]
enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(i32)]
    pub enum SolClientSessionEvent {
        UpNotice = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_UP_NOTICE,
        DownError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_DOWN_ERROR,
        ConnectFailedError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_CONNECT_FAILED_ERROR,
        RejectedMsgError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR,
        SubscriptionError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_ERROR,
        RxMsgTooBigError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_RX_MSG_TOO_BIG_ERROR,
        Acknowledgement = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT,
        AssuredPublishingUp = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_PUBLISHING_UP,
        AssuredConnectFailed = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_CONNECT_FAILED,
        // AssuredDeliveryDown = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_DELIVERY_DOWN,
        TeUnsubscribeError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_ERROR,
        // DteUnsubscribeError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_DTE_UNSUBSCRIBE_ERROR,
        TeUnsubscribeOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_OK,
        // DteUnsubscribeOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_DTE_UNSUBSCRIBE_OK,
        CanSend = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_CAN_SEND,
        ReconnectingNotice = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_RECONNECTING_NOTICE,
        ReconnectedNotice = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_RECONNECTED_NOTICE,
        ProvisionError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_PROVISION_ERROR,
        ProvisionOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_PROVISION_OK,
        SubscriptionOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_OK,
        VirtualRouterNameChanged = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED,
        ModifyPropOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_MODIFYPROP_OK,
        ModifyPropFail = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_MODIFYPROP_FAIL,
        RepublishUnackedMessages = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_REPUBLISH_UNACKED_MESSAGES,
    }
}

#[cfg(not(target_os = "windows"))]
enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(u32)]
    pub enum SolClientSessionEvent {
        UpNotice = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_UP_NOTICE,
        DownError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_DOWN_ERROR,
        ConnectFailedError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_CONNECT_FAILED_ERROR,
        RejectedMsgError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR,
        SubscriptionError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_ERROR,
        RxMsgTooBigError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_RX_MSG_TOO_BIG_ERROR,
        Acknowledgement = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT,
        AssuredPublishingUp = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_PUBLISHING_UP,
        AssuredConnectFailed = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_CONNECT_FAILED,
        // AssuredDeliveryDown = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_DELIVERY_DOWN,
        TeUnsubscribeError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_ERROR,
        // DteUnsubscribeError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_DTE_UNSUBSCRIBE_ERROR,
        TeUnsubscribeOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_OK,
        // DteUnsubscribeOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_DTE_UNSUBSCRIBE_OK,
        CanSend = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_CAN_SEND,
        ReconnectingNotice = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_RECONNECTING_NOTICE,
        ReconnectedNotice = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_RECONNECTED_NOTICE,
        ProvisionError = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_PROVISION_ERROR,
        ProvisionOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_PROVISION_OK,
        SubscriptionOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_OK,
        VirtualRouterNameChanged = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED,
        ModifyPropOk = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_MODIFYPROP_OK,
        ModifyPropFail = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_MODIFYPROP_FAIL,
        RepublishUnackedMessages = rsolace_sys::solClient_session_event_SOLCLIENT_SESSION_EVENT_REPUBLISH_UNACKED_MESSAGES,
    }
}

impl From<u32> for SolClientSessionEvent {
    fn from(value: u32) -> Self {
        SolClientSessionEvent::from_u32(value).unwrap()
    }
}

impl From<i32> for SolClientSessionEvent {
    fn from(value: i32) -> Self {
        SolClientSessionEvent::from_u32(value as u32).unwrap()
    }
}

enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(u32)]
    pub enum SolClientSubscribeFlags {
        WaitForConfirm = rsolace_sys::SOLCLIENT_SUBSCRIBE_FLAGS_WAITFORCONFIRM,
        LocalDispatchOnly = rsolace_sys::SOLCLIENT_SUBSCRIBE_FLAGS_LOCAL_DISPATCH_ONLY,
        RequestConfirm = rsolace_sys::SOLCLIENT_SUBSCRIBE_FLAGS_REQUEST_CONFIRM,
    }
}

enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(u32)]
    pub enum SolClientCacheRequestFlags {
        LiveDataFlowThru = rsolace_sys::SOLCLIENT_CACHEREQUEST_FLAGS_LIVEDATA_FLOWTHRU,
        LiveDataFulfill = rsolace_sys::SOLCLIENT_CACHEREQUEST_FLAGS_LIVEDATA_FULFILL,
        LiveDataQueue = rsolace_sys::SOLCLIENT_CACHEREQUEST_FLAGS_LIVEDATA_QUEUE,
        NoSubscribe = rsolace_sys::SOLCLIENT_CACHEREQUEST_FLAGS_NO_SUBSCRIBE,
        NowaitReply = rsolace_sys::SOLCLIENT_CACHEREQUEST_FLAGS_NOWAIT_REPLY,
    }
}

enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(i32)]
    pub enum SolClientCacheStatus {
        Invalid = rsolace_sys::solClient_cacheStatus_SOLCLIENT_CACHE_INVALID_MESSAGE,
        Live = rsolace_sys::solClient_cacheStatus_SOLCLIENT_CACHE_LIVE_MESSAGE,
        Cache = rsolace_sys::solClient_cacheStatus_SOLCLIENT_CACHE_MESSAGE,
        Suspect = rsolace_sys::solClient_cacheStatus_SOLCLIENT_CACHE_SUSPECT_MESSAGE,
    }
}

enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(u32)]
    pub enum SolClientDeliveryMode {
        Direct = rsolace_sys::SOLCLIENT_DELIVERY_MODE_DIRECT,
        Persistent = rsolace_sys::SOLCLIENT_DELIVERY_MODE_PERSISTENT,
        NonPersistent = rsolace_sys::SOLCLIENT_DELIVERY_MODE_NONPERSISTENT,
    }
}

enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(i32)]
    pub enum SolClientDestType {
        Null = rsolace_sys::solClient_destinationType_SOLCLIENT_NULL_DESTINATION,
        Topic = rsolace_sys::solClient_destinationType_SOLCLIENT_TOPIC_DESTINATION,
        Queue = rsolace_sys::solClient_destinationType_SOLCLIENT_QUEUE_DESTINATION,
        TopicTemp = rsolace_sys::solClient_destinationType_SOLCLIENT_TOPIC_TEMP_DESTINATION,
        QueueTemp = rsolace_sys::solClient_destinationType_SOLCLIENT_QUEUE_TEMP_DESTINATION,
    }
}

#[cfg(target_os = "windows")]
enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(i32)]
    pub enum SolClientSubCode {
        Ok = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OK,
        ParamOutOfRange = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PARAM_OUT_OF_RANGE,
        ParamNullPtr = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PARAM_NULL_PTR,
        ParamConflict = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PARAM_CONFLICT,
        InsufficientSpace = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INSUFFICIENT_SPACE,
        OutOfResources = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OUT_OF_RESOURCES,
        InternalError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INTERNAL_ERROR,
        OutOfMemory = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OUT_OF_MEMORY,
        ProtocolError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PROTOCOL_ERROR,
        InitNotCalled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INIT_NOT_CALLED,
        Timeout = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TIMEOUT,
        KeepAliveFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_KEEP_ALIVE_FAILURE,
        SessionNotEstablished = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SESSION_NOT_ESTABLISHED,
        OsError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OS_ERROR,
        CommunicationError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMMUNICATION_ERROR,
        UserDataTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_USER_DATA_TOO_LARGE,
        TopicTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOPIC_TOO_LARGE,
        InvalidTopicSyntax = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TOPIC_SYNTAX,
        XmlParseError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_XML_PARSE_ERROR,
        LoginFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LOGIN_FAILURE,
        InvalidVirtualAddress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_VIRTUAL_ADDRESS,
        ClientDeleteInProgress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_DELETE_IN_PROGRESS,
        TooManyClients = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOO_MANY_CLIENTS,
        SubscriptionAlreadyPresent = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_ALREADY_PRESENT,
        SubscriptionNotFound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_NOT_FOUND,
        SubscriptionInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_INVALID,
        SubscriptionOther = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_OTHER,
        ControlOther = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CONTROL_OTHER,
        DataOther = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DATA_OTHER,
        LogFileError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LOG_FILE_ERROR,
        MessageTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_TOO_LARGE,
        SubscriptionTooMany = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_TOO_MANY,
        InvalidSessionOperation = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_SESSION_OPERATION,
        TopicMissing = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOPIC_MISSING,
        AssuredMessagingNotEstablished = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ASSURED_MESSAGING_NOT_ESTABLISHED,
        AssuredMessagingStateError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ASSURED_MESSAGING_STATE_ERROR,
        QueueNameTopicConflict = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUENAME_TOPIC_CONFLICT,
        QueueNameTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUENAME_TOO_LARGE,
        QueueNameInvalidMode = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUENAME_INVALID_MODE,
        MaxTotalMsgSizeExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_TOTAL_MSGSIZE_EXCEEDED,
        DBlockAlreadyExists = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DBLOCK_ALREADY_EXISTS,
        NoStructuredData = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_STRUCTURED_DATA,
        ContainerBusy = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CONTAINER_BUSY,
        InvalidDataConversion = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_DATA_CONVERSION,
        CannotModifyWhileNotIdle = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CANNOT_MODIFY_WHILE_NOT_IDLE,
        MsgVpnNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MSG_VPN_NOT_ALLOWED,
        ClientNameInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID,
        MsgVpnUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MSG_VPN_UNAVAILABLE,
        ClientUsernameIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_USERNAME_IS_SHUTDOWN,
        DynamicClientsNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DYNAMIC_CLIENTS_NOT_ALLOWED,
        ClientNameAlreadyInUse = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_NAME_ALREADY_IN_USE,
        CacheNoData = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_NO_DATA,
        CacheSuspectData = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_SUSPECT_DATA,
        CacheErrorResponse = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_ERROR_RESPONSE,
        CacheInvalidSession = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_INVALID_SESSION,
        CacheTimeout = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_TIMEOUT,
        CacheLiveDataFulfill = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_LIVEDATA_FULFILL,
        CacheAlreadyInProgress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_ALREADY_IN_PROGRESS,
        MissingReplyTo = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MISSING_REPLY_TO,
        CannotBindToQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CANNOT_BIND_TO_QUEUE,
        InvalidTopicNameForTe = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TOPIC_NAME_FOR_TE,
        UnknownQueueName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_QUEUE_NAME,
        UnknownTeName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME,
        MaxClientsForQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_QUEUE,
        MaxClientsForTe = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_TE,
        UnexpectedUnbind = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNEXPECTED_UNBIND,
        QueueNotFound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUE_NOT_FOUND,
        ClientAclDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_ACL_DENIED,
        SubscriptionAclDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_ACL_DENIED,
        PublishAclDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PUBLISH_ACL_DENIED,
        DeliverToOneInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DELIVER_TO_ONE_INVALID,
        SpoolOverQuota = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SPOOL_OVER_QUOTA,
        QueueShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUE_SHUTDOWN,
        TeShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TE_SHUTDOWN,
        NoMoreNonDurableQueueOrTe = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_MORE_NON_DURABLE_QUEUE_OR_TE,
        EndpointAlreadyExists = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ENDPOINT_ALREADY_EXISTS,
        PermissionNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PERMISSION_NOT_ALLOWED,
        InvalidSelector = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_SELECTOR,
        MaxMessageUsageExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_MESSAGE_USAGE_EXCEEDED,
        EndpointPropertyMismatch = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ENDPOINT_PROPERTY_MISMATCH,
        SubscriptionManagerDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_MANAGER_DENIED,
        UnknownClientName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_CLIENT_NAME,
        QuotaOutOfRange = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUOTA_OUT_OF_RANGE,
        SubscriptionAttributesConflict = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_ATTRIBUTES_CONFLICT,
        InvalidSmfMessage = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_SMF_MESSAGE,
        NoLocalNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED,
        UnsubscribeNotAllowedClientsBound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNSUBSCRIBE_NOT_ALLOWED_CLIENTS_BOUND,
        CannotBlockInContext = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CANNOT_BLOCK_IN_CONTEXT,
        FlowActiveFlowIndicationUnsupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED,
        UnresolvedHost = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNRESOLVED_HOST,
        CutThroughUnsupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CUT_THROUGH_UNSUPPORTED,
        CutThroughAlreadyBound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CUT_THROUGH_ALREADY_BOUND,
        CutThroughIncompatibleWithSession = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CUT_THROUGH_INCOMPATIBLE_WITH_SESSION,
        InvalidFlowOperation = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_FLOW_OPERATION,
        UnknownFlowName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_FLOW_NAME,
        ReplicationIsStandby = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLICATION_IS_STANDBY,
        LowPriorityMsgCongestion = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LOW_PRIORITY_MSG_CONGESTION,
        LibraryNotLoaded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LIBRARY_NOT_LOADED,
        FailedLoadingTruststore = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FAILED_LOADING_TRUSTSTORE,
        UntrustedCertificate = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNTRUSTED_CERTIFICATE,
        UntrustedCommonname = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNTRUSTED_COMMONNAME,
        CertificateDateInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CERTIFICATE_DATE_INVALID,
        FailedLoadingCertificateAndKey = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FAILED_LOADING_CERTIFICATE_AND_KEY,
        BasicAuthenticationIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_BASIC_AUTHENTICATION_IS_SHUTDOWN,
        ClientCertificateAuthenticationIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_CERTIFICATE_AUTHENTICATION_IS_SHUTDOWN,
        UntrustedClientCertificate = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNTRUSTED_CLIENT_CERTIFICATE,
        ClientCertificateDateInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_CERTIFICATE_DATE_INVALID,
        CacheRequestCancelled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_REQUEST_CANCELLED,
        DeliveryModeUnsupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DELIVERY_MODE_UNSUPPORTED,
        PublisherNotCreated = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PUBLISHER_NOT_CREATED,
        FlowUnbound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FLOW_UNBOUND,
        InvalidTransactedSessionId = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TRANSACTED_SESSION_ID,
        InvalidTransactionId = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TRANSACTION_ID,
        MaxTransactedSessionsExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_TRANSACTED_SESSIONS_EXCEEDED,
        TransactedSessionNameInUse = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TRANSACTED_SESSION_NAME_IN_USE,
        ServiceUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SERVICE_UNAVAILABLE,
        NoTransactionStarted = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_TRANSACTION_STARTED,
        PublisherNotEstablished = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PUBLISHER_NOT_ESTABLISHED,
        MessagePublishFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_PUBLISH_FAILURE,
        TransactionFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TRANSACTION_FAILURE,
        MessageConsumeFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_CONSUME_FAILURE,
        EndpointModified = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ENDPOINT_MODIFIED,
        InvalidConnectionOwner = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_CONNECTION_OWNER,
        KerberosAuthenticationIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_KERBEROS_AUTHENTICATION_IS_SHUTDOWN,
        CommitOrRollbackInProgress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMMIT_OR_ROLLBACK_IN_PROGRESS,
        UnbindResponseLost = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNBIND_RESPONSE_LOST,
        MaxTransactionsExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_TRANSACTIONS_EXCEEDED,
        CommitStatusUnknown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMMIT_STATUS_UNKNOWN,
        ProxyAuthRequired = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PROXY_AUTH_REQUIRED,
        ProxyAuthFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PROXY_AUTH_FAILURE,
        NoSubscriptionMatch = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_SUBSCRIPTION_MATCH,
        SubscriptionMatchError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_MATCH_ERROR,
        SelectorMatchError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SELECTOR_MATCH_ERROR,
        ReplayNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_NOT_SUPPORTED,
        ReplayDisabled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_DISABLED,
        ClientInitiatedReplayNonExclusiveNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_INITIATED_REPLAY_NON_EXCLUSIVE_NOT_ALLOWED,
        ClientInitiatedReplayInactiveFlowNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_INITIATED_REPLAY_INACTIVE_FLOW_NOT_ALLOWED,
        ClientInitiatedReplayBrowserFlowNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_INITIATED_REPLAY_BROWSER_FLOW_NOT_ALLOWED,
        ReplayTemporaryNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_TEMPORARY_NOT_SUPPORTED,
        UnknownStartLocationType = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_START_LOCATION_TYPE,
        ReplayMessageUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_MESSAGE_UNAVAILABLE,
        ReplayStarted = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_STARTED,
        ReplayCancelled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_CANCELLED,
        ReplayStartTimeNotAvailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_START_TIME_NOT_AVAILABLE,
        ReplayMessageRejected = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_MESSAGE_REJECTED,
        ReplayLogModified = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_LOG_MODIFIED,
        MismatchedEndpointErrorId = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MISMATCHED_ENDPOINT_ERROR_ID,
        OutOfReplayResources = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OUT_OF_REPLAY_RESOURCES,
        TopicOrSelectorModifiedOnDurableTopicEndpoint = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOPIC_OR_SELECTOR_MODIFIED_ON_DURABLE_TOPIC_ENDPOINT,
        ReplayFailed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_FAILED,
        CompressedSslNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMPRESSED_SSL_NOT_SUPPORTED,
        SharedSubscriptionsNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_NOT_SUPPORTED,
        SharedSubscriptionsNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_NOT_ALLOWED,
        SharedSubscriptionsEndpointNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_ENDPOINT_NOT_ALLOWED,
        ObjectDestroyed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OBJECT_DESTROYED,
        DeliveryCountNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DELIVERY_COUNT_NOT_SUPPORTED,
        ReplayStartMessageUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_START_MESSAGE_UNAVAILABLE,
        MessageIdNotComparable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_ID_NOT_COMPARABLE,
        ReplayAnonymousNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_ANONYMOUS_NOT_SUPPORTED,
        BrowsingNotSupportedOnPartitionedQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_BROWSING_NOT_SUPPORTED_ON_PARTITIONED_QUEUE,
        SelectorsNotSupportedOnPartitionedQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SELECTORS_NOT_SUPPORTED_ON_PARTITIONED_QUEUE,
    }
}

#[cfg(not(target_os = "windows"))]
enum_from_primitive! {
    #[derive(Debug, Copy, Clone, PartialEq, PartialOrd)]
    #[repr(u32)]
    pub enum SolClientSubCode {
        Ok = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OK,
        ParamOutOfRange = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PARAM_OUT_OF_RANGE,
        ParamNullPtr = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PARAM_NULL_PTR,
        ParamConflict = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PARAM_CONFLICT,
        InsufficientSpace = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INSUFFICIENT_SPACE,
        OutOfResources = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OUT_OF_RESOURCES,
        InternalError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INTERNAL_ERROR,
        OutOfMemory = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OUT_OF_MEMORY,
        ProtocolError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PROTOCOL_ERROR,
        InitNotCalled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INIT_NOT_CALLED,
        Timeout = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TIMEOUT,
        KeepAliveFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_KEEP_ALIVE_FAILURE,
        SessionNotEstablished = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SESSION_NOT_ESTABLISHED,
        OsError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OS_ERROR,
        CommunicationError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMMUNICATION_ERROR,
        UserDataTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_USER_DATA_TOO_LARGE,
        TopicTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOPIC_TOO_LARGE,
        InvalidTopicSyntax = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TOPIC_SYNTAX,
        XmlParseError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_XML_PARSE_ERROR,
        LoginFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LOGIN_FAILURE,
        InvalidVirtualAddress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_VIRTUAL_ADDRESS,
        ClientDeleteInProgress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_DELETE_IN_PROGRESS,
        TooManyClients = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOO_MANY_CLIENTS,
        SubscriptionAlreadyPresent = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_ALREADY_PRESENT,
        SubscriptionNotFound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_NOT_FOUND,
        SubscriptionInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_INVALID,
        SubscriptionOther = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_OTHER,
        ControlOther = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CONTROL_OTHER,
        DataOther = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DATA_OTHER,
        LogFileError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LOG_FILE_ERROR,
        MessageTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_TOO_LARGE,
        SubscriptionTooMany = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_TOO_MANY,
        InvalidSessionOperation = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_SESSION_OPERATION,
        TopicMissing = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOPIC_MISSING,
        AssuredMessagingNotEstablished = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ASSURED_MESSAGING_NOT_ESTABLISHED,
        AssuredMessagingStateError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ASSURED_MESSAGING_STATE_ERROR,
        QueueNameTopicConflict = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUENAME_TOPIC_CONFLICT,
        QueueNameTooLarge = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUENAME_TOO_LARGE,
        QueueNameInvalidMode = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUENAME_INVALID_MODE,
        MaxTotalMsgSizeExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_TOTAL_MSGSIZE_EXCEEDED,
        DBlockAlreadyExists = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DBLOCK_ALREADY_EXISTS,
        NoStructuredData = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_STRUCTURED_DATA,
        ContainerBusy = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CONTAINER_BUSY,
        InvalidDataConversion = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_DATA_CONVERSION,
        CannotModifyWhileNotIdle = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CANNOT_MODIFY_WHILE_NOT_IDLE,
        MsgVpnNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MSG_VPN_NOT_ALLOWED,
        ClientNameInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_NAME_INVALID,
        MsgVpnUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MSG_VPN_UNAVAILABLE,
        ClientUsernameIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_USERNAME_IS_SHUTDOWN,
        DynamicClientsNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DYNAMIC_CLIENTS_NOT_ALLOWED,
        ClientNameAlreadyInUse = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_NAME_ALREADY_IN_USE,
        CacheNoData = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_NO_DATA,
        CacheSuspectData = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_SUSPECT_DATA,
        CacheErrorResponse = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_ERROR_RESPONSE,
        CacheInvalidSession = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_INVALID_SESSION,
        CacheTimeout = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_TIMEOUT,
        CacheLiveDataFulfill = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_LIVEDATA_FULFILL,
        CacheAlreadyInProgress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_ALREADY_IN_PROGRESS,
        MissingReplyTo = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MISSING_REPLY_TO,
        CannotBindToQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CANNOT_BIND_TO_QUEUE,
        InvalidTopicNameForTe = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TOPIC_NAME_FOR_TE,
        UnknownQueueName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_QUEUE_NAME,
        UnknownTeName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_TE_NAME,
        MaxClientsForQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_QUEUE,
        MaxClientsForTe = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_CLIENTS_FOR_TE,
        UnexpectedUnbind = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNEXPECTED_UNBIND,
        QueueNotFound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUE_NOT_FOUND,
        ClientAclDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_ACL_DENIED,
        SubscriptionAclDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_ACL_DENIED,
        PublishAclDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PUBLISH_ACL_DENIED,
        DeliverToOneInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DELIVER_TO_ONE_INVALID,
        SpoolOverQuota = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SPOOL_OVER_QUOTA,
        QueueShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUEUE_SHUTDOWN,
        TeShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TE_SHUTDOWN,
        NoMoreNonDurableQueueOrTe = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_MORE_NON_DURABLE_QUEUE_OR_TE,
        EndpointAlreadyExists = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ENDPOINT_ALREADY_EXISTS,
        PermissionNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PERMISSION_NOT_ALLOWED,
        InvalidSelector = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_SELECTOR,
        MaxMessageUsageExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_MESSAGE_USAGE_EXCEEDED,
        EndpointPropertyMismatch = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ENDPOINT_PROPERTY_MISMATCH,
        SubscriptionManagerDenied = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_MANAGER_DENIED,
        UnknownClientName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_CLIENT_NAME,
        QuotaOutOfRange = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_QUOTA_OUT_OF_RANGE,
        SubscriptionAttributesConflict = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_ATTRIBUTES_CONFLICT,
        InvalidSmfMessage = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_SMF_MESSAGE,
        NoLocalNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_LOCAL_NOT_SUPPORTED,
        UnsubscribeNotAllowedClientsBound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNSUBSCRIBE_NOT_ALLOWED_CLIENTS_BOUND,
        CannotBlockInContext = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CANNOT_BLOCK_IN_CONTEXT,
        FlowActiveFlowIndicationUnsupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FLOW_ACTIVE_FLOW_INDICATION_UNSUPPORTED,
        UnresolvedHost = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNRESOLVED_HOST,
        CutThroughUnsupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CUT_THROUGH_UNSUPPORTED,
        CutThroughAlreadyBound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CUT_THROUGH_ALREADY_BOUND,
        CutThroughIncompatibleWithSession = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CUT_THROUGH_INCOMPATIBLE_WITH_SESSION,
        InvalidFlowOperation = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_FLOW_OPERATION,
        UnknownFlowName = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_FLOW_NAME,
        ReplicationIsStandby = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLICATION_IS_STANDBY,
        LowPriorityMsgCongestion = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LOW_PRIORITY_MSG_CONGESTION,
        LibraryNotLoaded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_LIBRARY_NOT_LOADED,
        FailedLoadingTruststore = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FAILED_LOADING_TRUSTSTORE,
        UntrustedCertificate = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNTRUSTED_CERTIFICATE,
        UntrustedCommonname = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNTRUSTED_COMMONNAME,
        CertificateDateInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CERTIFICATE_DATE_INVALID,
        FailedLoadingCertificateAndKey = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FAILED_LOADING_CERTIFICATE_AND_KEY,
        BasicAuthenticationIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_BASIC_AUTHENTICATION_IS_SHUTDOWN,
        ClientCertificateAuthenticationIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_CERTIFICATE_AUTHENTICATION_IS_SHUTDOWN,
        UntrustedClientCertificate = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNTRUSTED_CLIENT_CERTIFICATE,
        ClientCertificateDateInvalid = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_CERTIFICATE_DATE_INVALID,
        CacheRequestCancelled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CACHE_REQUEST_CANCELLED,
        DeliveryModeUnsupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DELIVERY_MODE_UNSUPPORTED,
        PublisherNotCreated = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PUBLISHER_NOT_CREATED,
        FlowUnbound = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_FLOW_UNBOUND,
        InvalidTransactedSessionId = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TRANSACTED_SESSION_ID,
        InvalidTransactionId = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_TRANSACTION_ID,
        MaxTransactedSessionsExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_TRANSACTED_SESSIONS_EXCEEDED,
        TransactedSessionNameInUse = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TRANSACTED_SESSION_NAME_IN_USE,
        ServiceUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SERVICE_UNAVAILABLE,
        NoTransactionStarted = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_TRANSACTION_STARTED,
        PublisherNotEstablished = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PUBLISHER_NOT_ESTABLISHED,
        MessagePublishFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_PUBLISH_FAILURE,
        TransactionFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TRANSACTION_FAILURE,
        MessageConsumeFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_CONSUME_FAILURE,
        EndpointModified = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_ENDPOINT_MODIFIED,
        InvalidConnectionOwner = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_INVALID_CONNECTION_OWNER,
        KerberosAuthenticationIsShutdown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_KERBEROS_AUTHENTICATION_IS_SHUTDOWN,
        CommitOrRollbackInProgress = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMMIT_OR_ROLLBACK_IN_PROGRESS,
        UnbindResponseLost = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNBIND_RESPONSE_LOST,
        MaxTransactionsExceeded = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MAX_TRANSACTIONS_EXCEEDED,
        CommitStatusUnknown = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMMIT_STATUS_UNKNOWN,
        ProxyAuthRequired = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PROXY_AUTH_REQUIRED,
        ProxyAuthFailure = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_PROXY_AUTH_FAILURE,
        NoSubscriptionMatch = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_NO_SUBSCRIPTION_MATCH,
        SubscriptionMatchError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SUBSCRIPTION_MATCH_ERROR,
        SelectorMatchError = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SELECTOR_MATCH_ERROR,
        ReplayNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_NOT_SUPPORTED,
        ReplayDisabled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_DISABLED,
        ClientInitiatedReplayNonExclusiveNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_INITIATED_REPLAY_NON_EXCLUSIVE_NOT_ALLOWED,
        ClientInitiatedReplayInactiveFlowNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_INITIATED_REPLAY_INACTIVE_FLOW_NOT_ALLOWED,
        ClientInitiatedReplayBrowserFlowNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_CLIENT_INITIATED_REPLAY_BROWSER_FLOW_NOT_ALLOWED,
        ReplayTemporaryNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_TEMPORARY_NOT_SUPPORTED,
        UnknownStartLocationType = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_UNKNOWN_START_LOCATION_TYPE,
        ReplayMessageUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_MESSAGE_UNAVAILABLE,
        ReplayStarted = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_STARTED,
        ReplayCancelled = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_CANCELLED,
        ReplayStartTimeNotAvailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_START_TIME_NOT_AVAILABLE,
        ReplayMessageRejected = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_MESSAGE_REJECTED,
        ReplayLogModified = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_LOG_MODIFIED,
        MismatchedEndpointErrorId = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MISMATCHED_ENDPOINT_ERROR_ID,
        OutOfReplayResources = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OUT_OF_REPLAY_RESOURCES,
        TopicOrSelectorModifiedOnDurableTopicEndpoint = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_TOPIC_OR_SELECTOR_MODIFIED_ON_DURABLE_TOPIC_ENDPOINT,
        ReplayFailed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_FAILED,
        CompressedSslNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_COMPRESSED_SSL_NOT_SUPPORTED,
        SharedSubscriptionsNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_NOT_SUPPORTED,
        SharedSubscriptionsNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_NOT_ALLOWED,
        SharedSubscriptionsEndpointNotAllowed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SHARED_SUBSCRIPTIONS_ENDPOINT_NOT_ALLOWED,
        ObjectDestroyed = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_OBJECT_DESTROYED,
        DeliveryCountNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_DELIVERY_COUNT_NOT_SUPPORTED,
        ReplayStartMessageUnavailable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_START_MESSAGE_UNAVAILABLE,
        MessageIdNotComparable = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_MESSAGE_ID_NOT_COMPARABLE,
        ReplayAnonymousNotSupported = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_REPLAY_ANONYMOUS_NOT_SUPPORTED,
        BrowsingNotSupportedOnPartitionedQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_BROWSING_NOT_SUPPORTED_ON_PARTITIONED_QUEUE,
        SelectorsNotSupportedOnPartitionedQueue = rsolace_sys::solClient_subCode_SOLCLIENT_SUBCODE_SELECTORS_NOT_SUPPORTED_ON_PARTITIONED_QUEUE,
    }
}

#[derive(Debug, Clone, PartialEq)]
pub enum SolClientSubCodeOrRaw {
    SubCode(SolClientSubCode),
    Raw(rsolace_sys::solClient_subCode),
}

#[derive(Debug, Clone, PartialEq)]
pub struct ErrorInfo {
    pub sub_code: SolClientSubCodeOrRaw,
    pub error_str: String,
}

impl std::fmt::Display for ErrorInfo {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(
            f,
            "ErrorInfo {{ sub_code: {:?}, error_str: {} }}",
            self.sub_code, self.error_str
        )
    }
}

impl ErrorInfo {
    pub fn from_error_info_ptr(
        error_info_ptr: *const rsolace_sys::solClient_errorInfo,
    ) -> Option<Self> {
        if error_info_ptr.is_null() {
            None
        } else {
            unsafe {
                let error_info = &*error_info_ptr;
                Some(ErrorInfo {
                    sub_code: match SolClientSubCode::from_u32(
                        error_info.subCode.try_into().unwrap(),
                    ) {
                        Some(sub_code) => SolClientSubCodeOrRaw::SubCode(sub_code),
                        None => SolClientSubCodeOrRaw::Raw(error_info.subCode),
                    },
                    error_str: std::ffi::CStr::from_ptr(error_info.errorStr.as_ptr())
                        .to_string_lossy()
                        .into_owned(),
                })
            }
        }
    }
}