tfledge 0.0.0

Chalkydri TFLite and libedgetpu bindings
Documentation
use crate::ffi::*;

#[derive(Debug)]
pub enum Error {
    Cancelled,
    Error,
    DelegateError,
    UnresolvedOps,
    ApplicationError,
    DelegateDataNotFound,
    DelegateDataReadError,
    DelegateDataWriteError,
    FailedToCreateInterpreter,
    FailedToLoadModel,
}
impl Error {
    pub(crate) fn from(ffi: TfLiteStatus) -> Result<(), Self> {
        match ffi {
            TfLiteStatus::kTfLiteOk => Ok(()),
            TfLiteStatus::kTfLiteCancelled => Err(Self::Cancelled),
            TfLiteStatus::kTfLiteError => Err(Self::Error),
            TfLiteStatus::kTfLiteDelegateError => Err(Self::DelegateError),
            TfLiteStatus::kTfLiteUnresolvedOps => Err(Self::UnresolvedOps),
            TfLiteStatus::kTfLiteApplicationError => Err(Self::ApplicationError),
            TfLiteStatus::kTfLiteDelegateDataNotFound => Err(Self::DelegateDataNotFound),
            TfLiteStatus::kTfLiteDelegateDataReadError => Err(Self::DelegateDataReadError),
            TfLiteStatus::kTfLiteDelegateDataWriteError => Err(Self::DelegateDataWriteError),
        }
    }
}

pub(crate) extern "C" fn error_reporter(
    _data: *mut core::ffi::c_void,
    format: *const core::ffi::c_char,
    args: *mut __va_list_tag,
) {
    unsafe {
        let mut buf = [0i8; 512];

        vsnprintf(buf.as_mut_ptr(), 512, format, args);

        let s = core::str::from_utf8_unchecked(core::ffi::CStr::from_ptr(buf.as_ptr()).to_bytes());

        error!(target: "tfledge::tflitec", "{s}");
    }
}