use crate::device::Device;
use crate::enums::event::XidError;
use crate::ffi::bindings::*;
use crate::{bitmasks::event::EventTypes, Nvml};
#[derive(Debug)]
pub struct EventData<'nvml> {
pub device: Device<'nvml>,
pub event_type: EventTypes,
pub event_data: Option<XidError>,
}
impl<'nvml> EventData<'nvml> {
#[allow(clippy::missing_safety_doc)]
pub unsafe fn new(event_data: nvmlEventData_t, nvml: &'nvml Nvml) -> Self {
let event_type = EventTypes::from_bits_truncate(event_data.eventType);
EventData {
device: Device::new(event_data.device, nvml),
event_type,
event_data: if event_type.contains(EventTypes::CRITICAL_XID_ERROR) {
Some(match event_data.eventData {
999 => XidError::Unknown,
v => XidError::Value(v),
})
} else {
None
},
}
}
}