cudarc/cusparse/
result.rs1use std::mem::MaybeUninit;
2
3use super::sys;
4
5#[derive(Clone, Copy, PartialEq, Eq, Debug)]
8pub struct CusparseError(pub sys::cusparseStatus_t);
9
10impl sys::cusparseStatus_t {
11 #[inline]
12 pub fn result(self) -> Result<(), CusparseError> {
13 match self {
14 sys::cusparseStatus_t::CUSPARSE_STATUS_SUCCESS => Ok(()),
15 _ => Err(CusparseError(self)),
16 }
17 }
18}
19
20pub fn create() -> Result<sys::cusparseHandle_t, CusparseError> {
22 let mut handle = MaybeUninit::uninit();
23 unsafe {
24 sys::cusparseCreate(handle.as_mut_ptr()).result()?;
25 Ok(handle.assume_init())
26 }
27}
28
29pub unsafe fn destroy(handle: sys::cusparseHandle_t) -> Result<(), CusparseError> {
33 sys::cusparseDestroy(handle).result()
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn test_create_and_destroy() -> Result<(), CusparseError> {
42 let handle = create()?;
43 unsafe { destroy(handle) }?;
44 Ok(())
45 }
46}