nodex_api/
lib.rs

1#![allow(unused)]
2#![allow(non_upper_case_globals)]
3#![allow(non_camel_case_types)]
4#![allow(non_snake_case)]
5
6/// this mod is generated by cargo build -p nodex-api --features gen-api
7pub mod api;
8pub mod api_impl;
9#[macro_use]
10mod mac;
11
12bitflags::bitflags! {
13    /// napi_property_attributes
14    #[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/// napi_valuetype
27#[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/// napi_typedarray_type
43#[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/// napi_key_collection_mode
60#[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/// napi_key_filter
68#[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/// napi_key_conversion
80#[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
118// napi status and result type
119pub 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/// The function call does not return, the process will be terminated.
189/// This API can be called even if there is a pending JavaScript exception.
190#[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}