use std::{mem::MaybeUninit, os::raw::c_void, ptr};
use super::{bindings as napi, raw::Env};
pub unsafe fn set_instance_data<T: Send + 'static>(env: Env, data: T) -> *mut T {
let data = Box::into_raw(Box::new(data));
napi::set_instance_data(env, data.cast(), Some(drop_box::<T>), ptr::null_mut()).unwrap();
data
}
pub unsafe fn get_instance_data<T: Send + 'static>(env: Env) -> *mut T {
let mut data = MaybeUninit::uninit();
napi::get_instance_data(env, data.as_mut_ptr()).unwrap();
data.assume_init().cast()
}
unsafe extern "C" fn drop_box<T>(_env: Env, data: *mut c_void, _hint: *mut c_void) {
drop(Box::<T>::from_raw(data.cast()));
}