solace_rs/session/
event.rs

1use core::fmt;
2use enum_primitive::*;
3use solace_rs_sys as ffi;
4use std::ffi::CStr;
5
6enum_from_primitive! {
7    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
8    #[repr(u32)]
9    pub enum SessionEvent {
10        UpNotice=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_UP_NOTICE,
11        DownError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_DOWN_ERROR,
12        ConnectFailedError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_CONNECT_FAILED_ERROR,
13        RejectedMsgError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_REJECTED_MSG_ERROR,
14        SubscriptionError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_ERROR,
15        RxMsgTooBigError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_RX_MSG_TOO_BIG_ERROR,
16        Acknowledgement=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_ACKNOWLEDGEMENT,
17        AssuredPublishingUp=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_PUBLISHING_UP,
18        AssuredDeliveryDown=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_ASSURED_DELIVERY_DOWN,
19        TeUnsubscribeError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_ERROR,
20        TeUnsubscribeOk=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_TE_UNSUBSCRIBE_OK,
21        CanSend=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_CAN_SEND,
22        ReconnectingNotice=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_RECONNECTING_NOTICE,
23        ReconnectedNotice=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_RECONNECTED_NOTICE,
24        ProvisionError=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_PROVISION_ERROR,
25        ProvisionOk=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_PROVISION_OK,
26        SubscriptionOk=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_SUBSCRIPTION_OK,
27        VirtualRouterNameChanged=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_VIRTUAL_ROUTER_NAME_CHANGED,
28        ModifypropOk=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_MODIFYPROP_OK,
29        ModifypropFail=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_MODIFYPROP_FAIL,
30        RepublishUnackedMessages=ffi::solClient_session_event_SOLCLIENT_SESSION_EVENT_REPUBLISH_UNACKED_MESSAGES,
31
32    }
33}
34
35impl fmt::Display for SessionEvent {
36    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
37        let raw_event = *self as u32 as std::os::raw::c_uint;
38        let raw_c_ptr = unsafe { ffi::solClient_session_eventToString(raw_event) };
39        let c_str = unsafe { CStr::from_ptr(raw_c_ptr) };
40        let message = c_str.to_str().unwrap_or("Unknown Event");
41        write!(f, "{}", message)
42    }
43}