use std::ffi::CStr;
use ort2_sys as ffi;
use crate::api::api;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("code={}, message={}", .code, .message)]
Ort { code: i32, message: String },
#[error("{0}")]
Utf8(#[from] std::str::Utf8Error),
#[error("{0}")]
NulError(#[from] std::ffi::NulError),
}
pub type Result<T> = std::result::Result<T, Error>;
pub(crate) fn get_error(status: *const ffi::OrtStatus) -> Result<()> {
match status.is_null() {
true => Ok(()),
false => {
let code = api!(GetErrorCode, status) as i32;
let message = api!(GetErrorMessage, status);
let message = unsafe { CStr::from_ptr(message) }.to_str()?.to_owned();
api!(ReleaseStatus, status as *mut _);
Err(Error::Ort { code, message })
}
}
}