era_cudart 0.152.2

CUDA bindings for ZKsync
use std::mem::MaybeUninit;

use era_cudart_sys::CudaError;

pub type CudaResult<T> = Result<T, CudaError>;

pub trait CudaResultWrap {
    fn wrap(self) -> CudaResult<()>;
    fn wrap_value<T>(self, value: T) -> CudaResult<T>;
    fn wrap_maybe_uninit<T>(self, value: MaybeUninit<T>) -> CudaResult<T>;
}

impl CudaResultWrap for CudaError {
    fn wrap(self) -> CudaResult<()> {
        self.wrap_value(())
    }

    fn wrap_value<T>(self, value: T) -> CudaResult<T> {
        if self == CudaError::Success {
            Ok(value)
        } else {
            Err(self)
        }
    }

    fn wrap_maybe_uninit<T>(self, value: MaybeUninit<T>) -> CudaResult<T> {
        self.wrap_value(value).map(|x| unsafe { x.assume_init() })
    }
}