use crate::objects::enums::Status;
use thiserror::Error;
pub trait ToLibraryError {
fn to_error(self) -> OpenCLAPIError;
}
#[derive(Error, Debug, PartialEq)]
pub enum OpenCLAPIError {
#[error("status error {code:?}, code {int_code} at `{func}`, reason: {reason}")]
StatusCodeError {
code: Status,
int_code: i32,
func: &'static str,
reason: String,
},
#[error("object validation error: `{0}`")]
ObjectError(ValidationError),
#[error("runtime error: `{0}`")]
RuntimeError(RuntimeError),
}
#[derive(Error, Debug, PartialEq)]
pub enum ValidationError {
#[error("unsupported bitfield configuration applied at api function `{0}`")]
InvalidBitfield(&'static str),
#[error("invalid property configuration found at api function `{0}`")]
InvalidProperty(&'static str),
}
impl ToLibraryError for ValidationError {
fn to_error(self) -> OpenCLAPIError {
OpenCLAPIError::ObjectError(self)
}
}
#[derive(Error, Debug, PartialEq)]
pub enum RuntimeError {
#[error("string conversion error, invalid bytearray returned from opencl native api")]
CorruptedByteArray,
#[error("null pointer has been returned to rust! this exception occured at function `{0}`")]
NullPointer(&'static str),
}
impl ToLibraryError for RuntimeError {
fn to_error(self) -> OpenCLAPIError {
OpenCLAPIError::RuntimeError(self)
}
}