Skip to content

Commit 0281788

Browse files
authored
feat(error): implement From<NvmlError> for nvmlReturn_t conversion (#117)
- Add conversion implementation from custom NvmlError to nvmlReturn_t enum - Handle all NvmlError variants with corresponding nvmlReturn_t values - Use #[allow(deprecated)] attribute for compatibility Signed-off-by: jinlong <jinlong@tencent.com>
1 parent 30c6647 commit 0281788

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

nvml-wrapper/src/error.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,50 @@ pub fn nvml_try(code: nvmlReturn_t) -> Result<(), NvmlError> {
199199
}
200200
}
201201

202+
#[allow(deprecated)]
203+
impl From<NvmlError> for nvmlReturn_t {
204+
fn from(error: NvmlError) -> Self {
205+
use NvmlError::*;
206+
207+
match error {
208+
Uninitialized => nvmlReturn_enum_NVML_ERROR_UNINITIALIZED,
209+
InvalidArg => nvmlReturn_enum_NVML_ERROR_INVALID_ARGUMENT,
210+
NotSupported => nvmlReturn_enum_NVML_ERROR_NOT_SUPPORTED,
211+
NoPermission => nvmlReturn_enum_NVML_ERROR_NO_PERMISSION,
212+
AlreadyInitialized => nvmlReturn_enum_NVML_ERROR_ALREADY_INITIALIZED,
213+
NotFound => nvmlReturn_enum_NVML_ERROR_NOT_FOUND,
214+
InsufficientSize(_) => nvmlReturn_enum_NVML_ERROR_INSUFFICIENT_SIZE,
215+
InsufficientPower => nvmlReturn_enum_NVML_ERROR_INSUFFICIENT_POWER,
216+
DriverNotLoaded => nvmlReturn_enum_NVML_ERROR_DRIVER_NOT_LOADED,
217+
Timeout => nvmlReturn_enum_NVML_ERROR_TIMEOUT,
218+
IrqIssue => nvmlReturn_enum_NVML_ERROR_IRQ_ISSUE,
219+
LibraryNotFound => nvmlReturn_enum_NVML_ERROR_LIBRARY_NOT_FOUND,
220+
FunctionNotFound => nvmlReturn_enum_NVML_ERROR_FUNCTION_NOT_FOUND,
221+
CorruptedInfoROM => nvmlReturn_enum_NVML_ERROR_CORRUPTED_INFOROM,
222+
GpuLost => nvmlReturn_enum_NVML_ERROR_GPU_IS_LOST,
223+
ResetRequired => nvmlReturn_enum_NVML_ERROR_RESET_REQUIRED,
224+
OperatingSystem => nvmlReturn_enum_NVML_ERROR_OPERATING_SYSTEM,
225+
LibRmVersionMismatch => nvmlReturn_enum_NVML_ERROR_LIB_RM_VERSION_MISMATCH,
226+
InUse => nvmlReturn_enum_NVML_ERROR_IN_USE,
227+
InsufficientMemory => nvmlReturn_enum_NVML_ERROR_MEMORY,
228+
NoData => nvmlReturn_enum_NVML_ERROR_NO_DATA,
229+
VgpuEccNotSupported => nvmlReturn_enum_NVML_ERROR_VGPU_ECC_NOT_SUPPORTED,
230+
Unknown => nvmlReturn_enum_NVML_ERROR_UNKNOWN,
231+
UnexpectedVariant(code) => code,
232+
// For non-NVML errors, return UNKNOWN
233+
Utf8Error(_)
234+
| NulError(_)
235+
| LibloadingError(_)
236+
| FailedToLoadSymbol(_)
237+
| StringTooLong { .. }
238+
| IncorrectBits(_)
239+
| SetReleaseFailed
240+
| GetPciInfoFailed
241+
| PciInfoToCFailed => nvmlReturn_enum_NVML_ERROR_UNKNOWN,
242+
}
243+
}
244+
}
245+
202246
/// Helper to map a `&libloading::Error` into an `NvmlError`
203247
pub fn nvml_sym<'a, T>(sym: Result<&'a T, &libloading::Error>) -> Result<&'a T, NvmlError> {
204248
sym.map_err(|e| NvmlError::FailedToLoadSymbol(e.to_string()))

0 commit comments

Comments
 (0)