nvml_wrapper/struct_wrappers/
unit.rs1use crate::enum_wrappers::unit::FanState;
2use crate::error::NvmlError;
3use crate::ffi::bindings::*;
4#[cfg(feature = "serde")]
5use serde_derive::{Deserialize, Serialize};
6use std::{convert::TryFrom, ffi::CStr};
7
8#[derive(Debug, Clone, Eq, PartialEq, Hash)]
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12pub struct FansInfo {
13 pub count: u32,
15 pub fans: Vec<FanInfo>,
17}
18
19impl TryFrom<nvmlUnitFanSpeeds_t> for FansInfo {
20 type Error = NvmlError;
21
22 fn try_from(value: nvmlUnitFanSpeeds_t) -> Result<Self, Self::Error> {
30 let fans = value
31 .fans
32 .iter()
33 .map(|f| FanInfo::try_from(*f))
34 .collect::<Result<_, NvmlError>>()?;
35
36 Ok(FansInfo {
37 count: value.count,
38 fans,
39 })
40 }
41}
42
43#[derive(Debug, Clone, Eq, PartialEq, Hash)]
46#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
47pub struct FanInfo {
48 pub speed: u32,
50 pub state: FanState,
52}
53
54impl TryFrom<nvmlUnitFanInfo_t> for FanInfo {
55 type Error = NvmlError;
56
57 fn try_from(value: nvmlUnitFanInfo_t) -> Result<Self, Self::Error> {
65 Ok(FanInfo {
66 speed: value.speed,
67 state: FanState::try_from(value.state)?,
68 })
69 }
70}
71
72#[derive(Debug, Clone, Eq, PartialEq, Hash)]
91#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
92pub struct PsuInfo {
93 pub current: u32,
95 pub power_draw: u32,
97 pub state: String,
99 pub voltage: u32,
101}
102
103impl TryFrom<nvmlPSUInfo_t> for PsuInfo {
104 type Error = NvmlError;
105
106 fn try_from(value: nvmlPSUInfo_t) -> Result<Self, Self::Error> {
114 unsafe {
115 let state_raw = CStr::from_ptr(value.state.as_ptr());
116 Ok(PsuInfo {
117 current: value.current,
118 power_draw: value.power,
119 state: state_raw.to_str()?.into(),
120 voltage: value.voltage,
121 })
122 }
123 }
124}
125
126#[derive(Debug, Clone, Eq, PartialEq, Hash)]
129#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
130pub struct UnitInfo {
131 pub firmware_version: String,
132 pub id: String,
134 pub name: String,
135 pub serial: String,
137}
138
139impl TryFrom<nvmlUnitInfo_t> for UnitInfo {
140 type Error = NvmlError;
141
142 fn try_from(value: nvmlUnitInfo_t) -> Result<Self, Self::Error> {
150 unsafe {
151 let version_raw = CStr::from_ptr(value.firmwareVersion.as_ptr());
152 let id_raw = CStr::from_ptr(value.id.as_ptr());
153 let name_raw = CStr::from_ptr(value.name.as_ptr());
154 let serial_raw = CStr::from_ptr(value.serial.as_ptr());
155
156 Ok(UnitInfo {
157 firmware_version: version_raw.to_str()?.into(),
158 id: id_raw.to_str()?.into(),
159 name: name_raw.to_str()?.into(),
160 serial: serial_raw.to_str()?.into(),
161 })
162 }
163 }
164}
165
166#[derive(Debug, Clone, Eq, PartialEq, Hash)]
169#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
170pub struct HwbcEntry {
171 pub id: u32,
172 pub firmware_version: String,
173}
174
175impl TryFrom<nvmlHwbcEntry_t> for HwbcEntry {
176 type Error = NvmlError;
177
178 fn try_from(value: nvmlHwbcEntry_t) -> Result<Self, Self::Error> {
186 unsafe {
187 let version_raw = CStr::from_ptr(value.firmwareVersion.as_ptr());
188 Ok(HwbcEntry {
189 id: value.hwbcId,
190 firmware_version: version_raw.to_str()?.into(),
191 })
192 }
193 }
194}