nvml_wrapper/struct_wrappers/
nv_link.rs1use crate::bitmasks::nv_link::PacketTypes;
2use crate::enum_wrappers::nv_link::UtilizationCountUnit;
3use crate::error::NvmlError;
4use crate::ffi::bindings::*;
5#[cfg(feature = "serde")]
6use serde_derive::{Deserialize, Serialize};
7use std::convert::TryFrom;
8
9#[derive(Debug, Clone, Eq, PartialEq, Hash)]
12#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13pub struct UtilizationControl {
14 pub units: UtilizationCountUnit,
15 pub packet_filter: PacketTypes,
16}
17
18impl UtilizationControl {
19 pub fn as_c(&self) -> nvmlNvLinkUtilizationControl_t {
21 nvmlNvLinkUtilizationControl_t {
22 units: self.units.as_c(),
23 pktfilter: self.packet_filter.bits(),
24 }
25 }
26}
27
28impl TryFrom<nvmlNvLinkUtilizationControl_t> for UtilizationControl {
29 type Error = NvmlError;
30
31 fn try_from(value: nvmlNvLinkUtilizationControl_t) -> Result<Self, Self::Error> {
43 let bits = value.pktfilter;
44
45 Ok(UtilizationControl {
46 units: UtilizationCountUnit::try_from(value.units)?,
47 packet_filter: PacketTypes::from_bits_truncate(bits),
48 })
49 }
50}