ort2 0.1.2

onnxruntime wrapper c/c++ api
Documentation
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 })
        }
    }
}