use core::ptr::null;
use core::ptr::null_mut;
use crate::error::error_reporter;
use crate::ffi::*;
use crate::Error;
use alloc::string::String;
pub struct Model {
pub(crate) ptr: *mut TfLiteModel,
}
impl Model {
pub fn from_bytes(bytes: &[u8]) -> Result<Self, Error> {
unsafe {
let ptr = TfLiteModelCreateWithErrorReporter(
bytes.as_ptr() as *const _,
bytes.len(),
Some(error_reporter),
null_mut(),
);
if ptr.is_null() {
return Err(Error::FailedToLoadModel);
}
Ok(Self { ptr })
}
}
pub fn from_file(path: impl Into<String>) -> Result<Self, Error> {
unsafe {
let path = path.into();
let cpath = [path.as_bytes(), b"\0"].concat();
let ptr = TfLiteModelCreateFromFileWithErrorReporter(
cpath.as_ptr() as *const _,
Some(error_reporter),
null_mut(),
);
if ptr.is_null() {
return Err(Error::FailedToLoadModel);
}
Ok(Self { ptr })
}
}
}
impl Drop for Model {
fn drop(&mut self) {
unsafe {
TfLiteModelDelete(self.ptr);
}
}
}