use std::{ptr, sync::Arc};
use napi::{
Either, Status, ValueType,
bindgen_prelude::{FromNapiValue, TypeName, ValidateNapiValue},
sys,
threadsafe_function::ThreadsafeFunction,
};
pub struct InvalidReturnValue {
pub value_type: ValueType,
}
impl TypeName for InvalidReturnValue {
fn type_name() -> &'static str {
"InvalidReturnValue"
}
fn value_type() -> ValueType {
ValueType::Unknown
}
}
impl ValidateNapiValue for InvalidReturnValue {
unsafe fn validate(
_env: sys::napi_env,
_napi_val: sys::napi_value,
) -> napi::Result<sys::napi_value> {
Ok(ptr::null_mut())
}
}
impl FromNapiValue for InvalidReturnValue {
unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> napi::Result<Self> {
let value_type = napi::type_of!(env, napi_val)?;
Ok(InvalidReturnValue { value_type })
}
}
pub type JsCallback<Args = (), Ret = ()> =
Arc<ThreadsafeFunction<Args, Either<Ret, InvalidReturnValue>, Args, Status, false, true>>;