dpdu-wrapper 0.2.0

High-level Rust wrapper for D-PDU implementations.
use crate::api::{ApiResult, PduApi};
use crate::types::PduModuleHandle;
use crate::types::pdu_event::PduEventTarget;
use crate::types::pdu_status::PduStatusTarget;
use dpdu_api_types::PduStatus;
use dpdu_api_types::bitflags::PduErrorFlag;

impl PduApi {
    pub(crate) fn vt_module_destructor(&self, h_mod: PduModuleHandle) -> ApiResult<()> {
        self.modify_suppress_log_options(|options| {
            options.get_status = PduErrorFlag::INVALID_HANDLE;
        });

        let target = PduStatusTarget::Module(h_mod);
        let data = self.pdu_get_status(&target)?;

        match data.status_code {
            PduStatus::ModstReady | PduStatus::ModstNotReady => {
                let _ = self.pdu_module_disconnect(Some(h_mod));
            }
            _ => {}
        }

        self.modify_suppress_log_options(|options| {
            options.register_event_callback = PduErrorFlag::MODULE_NOT_CONNECTED;
        });

        let _ = self.pdu_register_event_callback(&PduEventTarget::Module(h_mod), None)?;

        Ok(())
    }
}