2467b7139b
* napi procedural macro for basic rust/JavaScript types * introduce the `compat-mode` for `napi` and `napi-derive` crates for backward compatible * remove #[inline] and let compiler to decide the inline behavior * cli now can produce the `.d.ts` file for native binding * many tests and example for the new procedural macro Co-authored-by: LongYinan <lynweklm@gmail.com>
28 lines
733 B
Rust
28 lines
733 B
Rust
use std::mem;
|
|
|
|
use crate::{sys, Status};
|
|
|
|
/// Notice
|
|
/// The hook will be removed if `AsyncCleanupHook` was `dropped`.
|
|
/// If you want keep the hook until node process exited, call the `AsyncCleanupHook::forget`.
|
|
#[repr(transparent)]
|
|
pub struct AsyncCleanupHook(pub(crate) sys::napi_async_cleanup_hook_handle);
|
|
|
|
impl AsyncCleanupHook {
|
|
/// Safe to forget it.
|
|
/// Things will be cleanup before process exited.
|
|
pub fn forget(self) {
|
|
mem::forget(self);
|
|
}
|
|
}
|
|
|
|
impl Drop for AsyncCleanupHook {
|
|
fn drop(&mut self) {
|
|
let status = unsafe { sys::napi_remove_async_cleanup_hook(self.0) };
|
|
assert!(
|
|
status == sys::Status::napi_ok,
|
|
"Delete async cleanup hook failed: {}",
|
|
Status::from(status)
|
|
);
|
|
}
|
|
}
|