#![allow(unused)]
#![allow(non_upper_case_globals)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
pub mod api;
pub mod api_impl;
#[macro_use]
mod mac;
bitflags::bitflags! {
#[repr(C)]
pub struct NapiPropertyAttributes: u32 {
const Default = api::napi_property_attributes_napi_default;
const Writable = api::napi_property_attributes_napi_writable;
const Enumerable = api::napi_property_attributes_napi_enumerable;
const Configurable = api::napi_property_attributes_napi_configurable;
const Static = api::napi_property_attributes_napi_static;
const DefaultMethod = api::napi_property_attributes_napi_default_method;
const DefaultJsproperty = api::napi_property_attributes_napi_default_jsproperty;
}
}
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NapiValuetype {
Undefined = api::napi_valuetype_napi_undefined,
Null = api::napi_valuetype_napi_null,
Boolean = api::napi_valuetype_napi_boolean,
Number = api::napi_valuetype_napi_number,
String = api::napi_valuetype_napi_string,
Symbol = api::napi_valuetype_napi_symbol,
Object = api::napi_valuetype_napi_object,
Function = api::napi_valuetype_napi_function,
External = api::napi_valuetype_napi_external,
Bigint = api::napi_valuetype_napi_bigint,
}
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NapiTypedarrayType {
Int8Array = api::napi_typedarray_type_napi_int8_array,
Uint8Array = api::napi_typedarray_type_napi_uint8_array,
Uint8ClampedArray = api::napi_typedarray_type_napi_uint8_clamped_array,
Int16Array = api::napi_typedarray_type_napi_int16_array,
Uint16Array = api::napi_typedarray_type_napi_uint16_array,
Int32Array = api::napi_typedarray_type_napi_int32_array,
Uint32Array = api::napi_typedarray_type_napi_uint32_array,
Float32Array = api::napi_typedarray_type_napi_float32_array,
Float64Array = api::napi_typedarray_type_napi_float64_array,
Bigint64Array = api::napi_typedarray_type_napi_bigint64_array,
Biguint64Array = api::napi_typedarray_type_napi_biguint64_array,
}
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NapiKeyCollectionMode {
KeyIncludePrototypes = api::napi_key_collection_mode_napi_key_include_prototypes,
KeyOwnOnly = api::napi_key_collection_mode_napi_key_own_only,
}
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NapiKeyFilter {
KeyAllProperties = api::napi_key_filter_napi_key_all_properties,
Writable = api::napi_key_filter_napi_key_writable,
Enumerable = api::napi_key_filter_napi_key_enumerable,
Configurable = api::napi_key_filter_napi_key_configurable,
SkipStrings = api::napi_key_filter_napi_key_skip_strings,
SkipSymbols = api::napi_key_filter_napi_key_skip_symbols,
}
#[repr(u32)]
pub enum NapiKeyConversion {
KeepNumbers = api::napi_key_conversion_napi_key_keep_numbers,
NumbersToStrings = api::napi_key_conversion_napi_key_numbers_to_strings,
}
#[cfg(feature = "v4")]
#[doc = "napi_threadsafe_function_release_mode"]
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NapiThreadsafeFunctionReleaseMode {
Release = api::napi_threadsafe_function_release_mode_napi_tsfn_release,
Abort = api::napi_threadsafe_function_release_mode_napi_tsfn_abort,
}
#[cfg(feature = "v4")]
#[doc = "napi_threadsafe_function_call_mode"]
#[repr(u32)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum NapiThreadsafeFunctionCallMode {
Nonblocking = api::napi_threadsafe_function_call_mode_napi_tsfn_nonblocking,
Blocking = api::napi_threadsafe_function_call_mode_napi_tsfn_blocking,
}
pub mod args;
pub mod callback;
pub mod context;
pub mod descriptor;
pub mod env;
mod error;
pub mod reference;
pub mod rt;
pub mod scope;
#[cfg(feature = "v4")]
pub mod tsfn;
pub mod value;
pub mod work;
pub use error::{NapiResult, NapiStatus};
pub mod prelude {
use super::*;
pub use super::NapiKeyCollectionMode;
pub use super::NapiKeyConversion;
pub use super::NapiKeyFilter;
pub use super::NapiPropertyAttributes;
#[cfg(feature = "v4")]
pub use super::NapiThreadsafeFunctionCallMode;
#[cfg(feature = "v4")]
pub type NapiTsfnMode = NapiThreadsafeFunctionCallMode;
#[cfg(feature = "v4")]
pub use super::NapiThreadsafeFunctionReleaseMode;
#[cfg(feature = "v4")]
pub type NapiTsfnReleaseMode = NapiThreadsafeFunctionReleaseMode;
pub use super::NapiTypedarrayType;
pub use super::NapiValuetype;
pub use env::NapiEnv;
pub use error::{NapiResult, NapiStatus};
pub use args::*;
pub use callback::CallbackInfo;
pub use context::NapiAsyncContext;
pub use descriptor::*;
pub use reference::NapiRef;
pub use scope::*;
#[cfg(feature = "v4")]
pub use tsfn::*;
pub use value::*;
pub use work::NapiAsyncWork;
#[cfg(feature = "v8")]
pub use api::napi_async_cleanup_hook_handle;
#[cfg(feature = "v4")]
pub use api::napi_threadsafe_function;
pub use api::{
napi_async_context, napi_async_work, napi_callback, napi_callback_info,
napi_callback_scope, napi_deferred, napi_env, napi_escapable_handle_scope, napi_finalize,
napi_handle_scope, napi_property_descriptor, napi_ref, napi_value, uv_loop_s,
NapiExtendedErrorInfo, NapiTypeTag,
};
pub type DataPointer = *mut std::ffi::c_void;
pub type CharPointer = *mut std::os::raw::c_char;
}
pub const fn napi_version_guard() -> u32 {
#[cfg(feature = "v8")]
return 8;
#[cfg(feature = "v7")]
return 7;
#[cfg(feature = "v6")]
return 6;
#[cfg(feature = "v5")]
return 5;
#[cfg(feature = "v4")]
return 4;
#[cfg(feature = "v3")]
return 3;
#[cfg(feature = "v2")]
return 2;
#[cfg(feature = "v1")]
return 1;
panic!("please select a napi version to use.")
}
#[inline]
pub fn fatal_error(msg: impl AsRef<str>, loc: Option<impl AsRef<str>>) {
let (loc, loc_len) = if let Some(loc) = loc {
(loc.as_ref().as_ptr() as *const _, loc.as_ref().len())
} else {
(std::ptr::null(), 0)
};
unsafe {
api::napi_fatal_error(
loc,
loc_len,
msg.as_ref().as_ptr() as *const _,
msg.as_ref().len(),
);
}
}
#[cfg(test)]
mod tests {
use super::*;
}