use std::ffi::CStr;
use ort2_sys as ffi;
pub(crate) fn get_api_base() -> &'static ffi::OrtApiBase {
unsafe {
ffi::OrtGetApiBase()
.as_ref()
.expect("failed to get api base")
}
}
pub(crate) fn get_api() -> &'static ffi::OrtApi {
unsafe {
let api = get_api_base().GetApi.expect("failed to get api fn")(ffi::ORT_API_VERSION);
api.as_ref().expect("failed to get api")
}
}
pub fn get_api_version() -> String {
let ver = unsafe {
let ver = get_api_base()
.GetVersionString
.expect("failed to GetVersionString")();
CStr::from_ptr(ver)
.to_str()
.expect("failed to get version string")
};
ver.into()
}
macro_rules! api {
($ff: ident) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))();
rc
}
};
($ff: ident, $a1: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))($a1);
rc
}
};
($ff: ident, $a1: expr, $a2: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))($a1, $a2);
rc
}
};
($ff: ident, $a1: expr, $a2: expr, $a3: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))($a1, $a2, $a3);
rc
}
};
($ff: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))($a1, $a2, $a3, $a4);
rc
}
};
($ff: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr) => {
unsafe {
let rc =
crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))($a1, $a2, $a3, $a4, $a5);
rc
}
};
($ff: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr, $a6: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))(
$a1, $a2, $a3, $a4, $a5, $a6
);
rc
}
};
($ff: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr, $a6: expr, $a7: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))(
$a1, $a2, $a3, $a4, $a5, $a6, $a7
);
rc
}
};
($ff: ident, $a1: expr, $a2: expr, $a3: expr, $a4: expr, $a5: expr, $a6: expr, $a7: expr, $a8: expr) => {
unsafe {
let rc = crate::api::get_api()
.$ff
.expect(&format!("no {}", stringify!($ff)))(
$a1, $a2, $a3, $a4, $a5, $a6, $a7, $a8
);
rc
}
};
}
macro_rules! ok {
($ff: ident $(, $more:expr)*) => {
{
let rc = crate::api::api!($ff $(, $more)*);
crate::error::get_error(rc)
}
};
}
pub(crate) use api;
pub(crate) use ok;
#[cfg(test)]
#[test]
fn test_get_api_version() {
use tracing::*;
std::env::set_var("RUST_LOG", "trace");
let _ = tracing_subscriber::fmt::try_init();
let ver = get_api_version();
info!(ver, "api version=");
}