1#![allow(unused)]
2#![allow(non_upper_case_globals)]
3#![allow(non_camel_case_types)]
4#![allow(non_snake_case)]
5
6pub mod api;
8pub mod api_impl;
9#[macro_use]
10mod mac;
11
12bitflags::bitflags! {
13 #[repr(C)]
15 pub struct NapiPropertyAttributes: u32 {
16 const Default = api::napi_property_attributes_napi_default;
17 const Writable = api::napi_property_attributes_napi_writable;
18 const Enumerable = api::napi_property_attributes_napi_enumerable;
19 const Configurable = api::napi_property_attributes_napi_configurable;
20 const Static = api::napi_property_attributes_napi_static;
21 const DefaultMethod = api::napi_property_attributes_napi_default_method;
22 const DefaultJsproperty = api::napi_property_attributes_napi_default_jsproperty;
23 }
24}
25
26#[repr(u32)]
28#[derive(Copy, Clone, Debug, PartialEq, Eq)]
29pub enum NapiValuetype {
30 Undefined = api::napi_valuetype_napi_undefined,
31 Null = api::napi_valuetype_napi_null,
32 Boolean = api::napi_valuetype_napi_boolean,
33 Number = api::napi_valuetype_napi_number,
34 String = api::napi_valuetype_napi_string,
35 Symbol = api::napi_valuetype_napi_symbol,
36 Object = api::napi_valuetype_napi_object,
37 Function = api::napi_valuetype_napi_function,
38 External = api::napi_valuetype_napi_external,
39 Bigint = api::napi_valuetype_napi_bigint,
40}
41
42#[repr(u32)]
44#[derive(Copy, Clone, Debug, PartialEq, Eq)]
45pub enum NapiTypedarrayType {
46 Int8Array = api::napi_typedarray_type_napi_int8_array,
47 Uint8Array = api::napi_typedarray_type_napi_uint8_array,
48 Uint8ClampedArray = api::napi_typedarray_type_napi_uint8_clamped_array,
49 Int16Array = api::napi_typedarray_type_napi_int16_array,
50 Uint16Array = api::napi_typedarray_type_napi_uint16_array,
51 Int32Array = api::napi_typedarray_type_napi_int32_array,
52 Uint32Array = api::napi_typedarray_type_napi_uint32_array,
53 Float32Array = api::napi_typedarray_type_napi_float32_array,
54 Float64Array = api::napi_typedarray_type_napi_float64_array,
55 Bigint64Array = api::napi_typedarray_type_napi_bigint64_array,
56 Biguint64Array = api::napi_typedarray_type_napi_biguint64_array,
57}
58
59#[repr(u32)]
61#[derive(Copy, Clone, Debug, PartialEq, Eq)]
62pub enum NapiKeyCollectionMode {
63 KeyIncludePrototypes = api::napi_key_collection_mode_napi_key_include_prototypes,
64 KeyOwnOnly = api::napi_key_collection_mode_napi_key_own_only,
65}
66
67#[repr(u32)]
69#[derive(Copy, Clone, Debug, PartialEq, Eq)]
70pub enum NapiKeyFilter {
71 KeyAllProperties = api::napi_key_filter_napi_key_all_properties,
72 Writable = api::napi_key_filter_napi_key_writable,
73 Enumerable = api::napi_key_filter_napi_key_enumerable,
74 Configurable = api::napi_key_filter_napi_key_configurable,
75 SkipStrings = api::napi_key_filter_napi_key_skip_strings,
76 SkipSymbols = api::napi_key_filter_napi_key_skip_symbols,
77}
78
79#[repr(u32)]
81pub enum NapiKeyConversion {
82 KeepNumbers = api::napi_key_conversion_napi_key_keep_numbers,
83 NumbersToStrings = api::napi_key_conversion_napi_key_numbers_to_strings,
84}
85
86#[cfg(feature = "v4")]
87#[doc = "napi_threadsafe_function_release_mode"]
88#[repr(u32)]
89#[derive(Copy, Clone, Debug, PartialEq, Eq)]
90pub enum NapiThreadsafeFunctionReleaseMode {
91 Release = api::napi_threadsafe_function_release_mode_napi_tsfn_release,
92 Abort = api::napi_threadsafe_function_release_mode_napi_tsfn_abort,
93}
94
95#[cfg(feature = "v4")]
96#[doc = "napi_threadsafe_function_call_mode"]
97#[repr(u32)]
98#[derive(Copy, Clone, Debug, PartialEq, Eq)]
99pub enum NapiThreadsafeFunctionCallMode {
100 Nonblocking = api::napi_threadsafe_function_call_mode_napi_tsfn_nonblocking,
101 Blocking = api::napi_threadsafe_function_call_mode_napi_tsfn_blocking,
102}
103
104pub mod args;
105pub mod callback;
106pub mod context;
107pub mod descriptor;
108pub mod env;
109mod error;
110pub mod reference;
111pub mod rt;
112pub mod scope;
113#[cfg(feature = "v4")]
114pub mod tsfn;
115pub mod value;
116pub mod work;
117
118pub use error::{NapiResult, NapiStatus};
120
121pub mod prelude {
122 use super::*;
123
124 pub use super::NapiKeyCollectionMode;
125 pub use super::NapiKeyConversion;
126 pub use super::NapiKeyFilter;
127 pub use super::NapiPropertyAttributes;
128 #[cfg(feature = "v4")]
129 pub use super::NapiThreadsafeFunctionCallMode;
130 #[cfg(feature = "v4")]
131 pub type NapiTsfnMode = NapiThreadsafeFunctionCallMode;
132 #[cfg(feature = "v4")]
133 pub use super::NapiThreadsafeFunctionReleaseMode;
134 #[cfg(feature = "v4")]
135 pub type NapiTsfnReleaseMode = NapiThreadsafeFunctionReleaseMode;
136 pub use super::NapiTypedarrayType;
137 pub use super::NapiValuetype;
138
139 pub use env::NapiEnv;
140 pub use error::{NapiResult, NapiStatus};
141
142 pub use args::*;
143 pub use callback::CallbackInfo;
144 pub use context::NapiAsyncContext;
145 pub use descriptor::*;
146 pub use reference::NapiRef;
147 pub use scope::*;
148 #[cfg(feature = "v4")]
149 pub use tsfn::*;
150 pub use value::*;
151 pub use work::NapiAsyncWork;
152
153 #[cfg(feature = "v8")]
154 pub use api::napi_async_cleanup_hook_handle;
155 #[cfg(feature = "v4")]
156 pub use api::napi_threadsafe_function;
157 pub use api::{
158 napi_async_context, napi_async_work, napi_callback, napi_callback_info,
159 napi_callback_scope, napi_deferred, napi_env, napi_escapable_handle_scope, napi_finalize,
160 napi_handle_scope, napi_property_descriptor, napi_ref, napi_value, uv_loop_s,
161 NapiExtendedErrorInfo, NapiTypeTag,
162 };
163
164 pub type DataPointer = *mut std::ffi::c_void;
165 pub type CharPointer = *mut std::os::raw::c_char;
166}
167
168pub const fn napi_version_guard() -> u32 {
169 #[cfg(feature = "v8")]
170 return 8;
171 #[cfg(feature = "v7")]
172 return 7;
173 #[cfg(feature = "v6")]
174 return 6;
175 #[cfg(feature = "v5")]
176 return 5;
177 #[cfg(feature = "v4")]
178 return 4;
179 #[cfg(feature = "v3")]
180 return 3;
181 #[cfg(feature = "v2")]
182 return 2;
183 #[cfg(feature = "v1")]
184 return 1;
185 panic!("please select a napi version to use.")
186}
187
188#[inline]
191pub fn fatal_error(msg: impl AsRef<str>, loc: Option<impl AsRef<str>>) {
192 let (loc, loc_len) = if let Some(loc) = loc {
193 (loc.as_ref().as_ptr() as *const _, loc.as_ref().len())
194 } else {
195 (std::ptr::null(), 0)
196 };
197 unsafe {
198 api::napi_fatal_error(
199 loc,
200 loc_len,
201 msg.as_ref().as_ptr() as *const _,
202 msg.as_ref().len(),
203 );
204 }
205}
206
207#[cfg(test)]
208mod tests {
209 use super::*;
210}