1#![allow(clippy::too_many_arguments)]
2
3mod napi1 {
4 use super::super::types::*;
5 use std::os::raw::{c_char, c_void};
6
7 generate!(
8 extern "C" {
9 fn napi_get_last_error_info(
10 env: napi_env,
11 result: *mut *const napi_extended_error_info,
12 ) -> napi_status;
13
14 fn napi_get_undefined(env: napi_env, result: *mut napi_value) -> napi_status;
15 fn napi_get_null(env: napi_env, result: *mut napi_value) -> napi_status;
16 fn napi_get_global(env: napi_env, result: *mut napi_value) -> napi_status;
17 fn napi_get_boolean(env: napi_env, value: bool, result: *mut napi_value) -> napi_status;
18 fn napi_create_object(env: napi_env, result: *mut napi_value) -> napi_status;
19 fn napi_create_array(env: napi_env, result: *mut napi_value) -> napi_status;
20 fn napi_create_array_with_length(
21 env: napi_env,
22 length: usize,
23 result: *mut napi_value,
24 ) -> napi_status;
25 fn napi_create_double(env: napi_env, value: f64, result: *mut napi_value) -> napi_status;
26 fn napi_create_int32(env: napi_env, value: i32, result: *mut napi_value) -> napi_status;
27 fn napi_create_uint32(env: napi_env, value: u32, result: *mut napi_value) -> napi_status;
28 fn napi_create_int64(env: napi_env, value: i64, result: *mut napi_value) -> napi_status;
29 fn napi_create_string_latin1(
30 env: napi_env,
31 str_: *const c_char,
32 length: isize,
33 result: *mut napi_value,
34 ) -> napi_status;
35 fn napi_create_string_utf8(
36 env: napi_env,
37 str_: *const c_char,
38 length: isize,
39 result: *mut napi_value,
40 ) -> napi_status;
41 fn napi_create_string_utf16(
42 env: napi_env,
43 str_: *const u16,
44 length: isize,
45 result: *mut napi_value,
46 ) -> napi_status;
47 #[cfg(not(target_env = "ohos"))]
49 fn napi_create_symbol(
50 env: napi_env,
51 description: napi_value,
52 result: *mut napi_value,
53 ) -> napi_status;
54 fn napi_create_function(
55 env: napi_env,
56 utf8name: *const c_char,
57 length: isize,
58 cb: napi_callback,
59 data: *mut c_void,
60 result: *mut napi_value,
61 ) -> napi_status;
62 fn napi_create_error(
63 env: napi_env,
64 code: napi_value,
65 msg: napi_value,
66 result: *mut napi_value,
67 ) -> napi_status;
68 fn napi_create_type_error(
69 env: napi_env,
70 code: napi_value,
71 msg: napi_value,
72 result: *mut napi_value,
73 ) -> napi_status;
74 fn napi_create_range_error(
75 env: napi_env,
76 code: napi_value,
77 msg: napi_value,
78 result: *mut napi_value,
79 ) -> napi_status;
80 fn napi_typeof(env: napi_env, value: napi_value, result: *mut napi_valuetype) -> napi_status;
81 fn napi_get_value_double(env: napi_env, value: napi_value, result: *mut f64) -> napi_status;
82 fn napi_get_value_int32(env: napi_env, value: napi_value, result: *mut i32) -> napi_status;
83 fn napi_get_value_uint32(env: napi_env, value: napi_value, result: *mut u32) -> napi_status;
84 fn napi_get_value_int64(env: napi_env, value: napi_value, result: *mut i64) -> napi_status;
85 fn napi_get_value_bool(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
86 fn napi_get_value_string_latin1(
87 env: napi_env,
88 value: napi_value,
89 buf: *mut c_char,
90 bufsize: usize,
91 result: *mut usize,
92 ) -> napi_status;
93 fn napi_get_value_string_utf8(
94 env: napi_env,
95 value: napi_value,
96 buf: *mut c_char,
97 bufsize: usize,
98 result: *mut usize,
99 ) -> napi_status;
100 fn napi_get_value_string_utf16(
101 env: napi_env,
102 value: napi_value,
103 buf: *mut u16,
104 bufsize: usize,
105 result: *mut usize,
106 ) -> napi_status;
107 fn napi_coerce_to_bool(
108 env: napi_env,
109 value: napi_value,
110 result: *mut napi_value,
111 ) -> napi_status;
112 fn napi_coerce_to_number(
113 env: napi_env,
114 value: napi_value,
115 result: *mut napi_value,
116 ) -> napi_status;
117 fn napi_coerce_to_object(
118 env: napi_env,
119 value: napi_value,
120 result: *mut napi_value,
121 ) -> napi_status;
122 fn napi_coerce_to_string(
123 env: napi_env,
124 value: napi_value,
125 result: *mut napi_value,
126 ) -> napi_status;
127 fn napi_get_prototype(
128 env: napi_env,
129 object: napi_value,
130 result: *mut napi_value,
131 ) -> napi_status;
132 fn napi_get_property_names(
133 env: napi_env,
134 object: napi_value,
135 result: *mut napi_value,
136 ) -> napi_status;
137 fn napi_set_property(
138 env: napi_env,
139 object: napi_value,
140 key: napi_value,
141 value: napi_value,
142 ) -> napi_status;
143 fn napi_has_property(
144 env: napi_env,
145 object: napi_value,
146 key: napi_value,
147 result: *mut bool,
148 ) -> napi_status;
149 fn napi_get_property(
150 env: napi_env,
151 object: napi_value,
152 key: napi_value,
153 result: *mut napi_value,
154 ) -> napi_status;
155 fn napi_delete_property(
156 env: napi_env,
157 object: napi_value,
158 key: napi_value,
159 result: *mut bool,
160 ) -> napi_status;
161 fn napi_has_own_property(
162 env: napi_env,
163 object: napi_value,
164 key: napi_value,
165 result: *mut bool,
166 ) -> napi_status;
167 fn napi_set_named_property(
168 env: napi_env,
169 object: napi_value,
170 utf8name: *const c_char,
171 value: napi_value,
172 ) -> napi_status;
173 fn napi_has_named_property(
174 env: napi_env,
175 object: napi_value,
176 utf8name: *const c_char,
177 result: *mut bool,
178 ) -> napi_status;
179 fn napi_get_named_property(
180 env: napi_env,
181 object: napi_value,
182 utf8name: *const c_char,
183 result: *mut napi_value,
184 ) -> napi_status;
185 fn napi_set_element(
186 env: napi_env,
187 object: napi_value,
188 index: u32,
189 value: napi_value,
190 ) -> napi_status;
191 fn napi_has_element(
192 env: napi_env,
193 object: napi_value,
194 index: u32,
195 result: *mut bool,
196 ) -> napi_status;
197 fn napi_get_element(
198 env: napi_env,
199 object: napi_value,
200 index: u32,
201 result: *mut napi_value,
202 ) -> napi_status;
203 fn napi_delete_element(
204 env: napi_env,
205 object: napi_value,
206 index: u32,
207 result: *mut bool,
208 ) -> napi_status;
209 fn napi_define_properties(
210 env: napi_env,
211 object: napi_value,
212 property_count: usize,
213 properties: *const napi_property_descriptor,
214 ) -> napi_status;
215 fn napi_is_array(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
216 fn napi_get_array_length(env: napi_env, value: napi_value, result: *mut u32) -> napi_status;
217 fn napi_strict_equals(
218 env: napi_env,
219 lhs: napi_value,
220 rhs: napi_value,
221 result: *mut bool,
222 ) -> napi_status;
223 fn napi_call_function(
224 env: napi_env,
225 recv: napi_value,
226 func: napi_value,
227 argc: usize,
228 argv: *const napi_value,
229 result: *mut napi_value,
230 ) -> napi_status;
231 fn napi_new_instance(
232 env: napi_env,
233 constructor: napi_value,
234 argc: usize,
235 argv: *const napi_value,
236 result: *mut napi_value,
237 ) -> napi_status;
238 fn napi_instanceof(
239 env: napi_env,
240 object: napi_value,
241 constructor: napi_value,
242 result: *mut bool,
243 ) -> napi_status;
244 fn napi_get_cb_info(
245 env: napi_env,
246 cbinfo: napi_callback_info,
247 argc: *mut usize,
248 argv: *mut napi_value,
249 this_arg: *mut napi_value,
250 data: *mut *mut c_void,
251 ) -> napi_status;
252 fn napi_get_new_target(
253 env: napi_env,
254 cbinfo: napi_callback_info,
255 result: *mut napi_value,
256 ) -> napi_status;
257 fn napi_define_class(
258 env: napi_env,
259 utf8name: *const c_char,
260 length: isize,
261 constructor: napi_callback,
262 data: *mut c_void,
263 property_count: usize,
264 properties: *const napi_property_descriptor,
265 result: *mut napi_value,
266 ) -> napi_status;
267 fn napi_wrap(
268 env: napi_env,
269 js_object: napi_value,
270 native_object: *mut c_void,
271 finalize_cb: napi_finalize,
272 finalize_hint: *mut c_void,
273 result: *mut napi_ref,
274 ) -> napi_status;
275 fn napi_unwrap(env: napi_env, js_object: napi_value, result: *mut *mut c_void)
276 -> napi_status;
277 fn napi_remove_wrap(
278 env: napi_env,
279 js_object: napi_value,
280 result: *mut *mut c_void,
281 ) -> napi_status;
282 fn napi_create_external(
283 env: napi_env,
284 data: *mut c_void,
285 finalize_cb: napi_finalize,
286 finalize_hint: *mut c_void,
287 result: *mut napi_value,
288 ) -> napi_status;
289 fn napi_get_value_external(
290 env: napi_env,
291 value: napi_value,
292 result: *mut *mut c_void,
293 ) -> napi_status;
294 fn napi_create_reference(
295 env: napi_env,
296 value: napi_value,
297 initial_refcount: u32,
298 result: *mut napi_ref,
299 ) -> napi_status;
300 fn napi_delete_reference(env: napi_env, ref_: napi_ref) -> napi_status;
301 fn napi_reference_ref(env: napi_env, ref_: napi_ref, result: *mut u32) -> napi_status;
302 fn napi_reference_unref(env: napi_env, ref_: napi_ref, result: *mut u32) -> napi_status;
303 fn napi_get_reference_value(
304 env: napi_env,
305 ref_: napi_ref,
306 result: *mut napi_value,
307 ) -> napi_status;
308 fn napi_open_handle_scope(env: napi_env, result: *mut napi_handle_scope) -> napi_status;
309 fn napi_close_handle_scope(env: napi_env, scope: napi_handle_scope) -> napi_status;
310 fn napi_open_escapable_handle_scope(
311 env: napi_env,
312 result: *mut napi_escapable_handle_scope,
313 ) -> napi_status;
314 fn napi_close_escapable_handle_scope(
315 env: napi_env,
316 scope: napi_escapable_handle_scope,
317 ) -> napi_status;
318 fn napi_escape_handle(
319 env: napi_env,
320 scope: napi_escapable_handle_scope,
321 escapee: napi_value,
322 result: *mut napi_value,
323 ) -> napi_status;
324 fn napi_throw(env: napi_env, error: napi_value) -> napi_status;
325 fn napi_throw_error(env: napi_env, code: *const c_char, msg: *const c_char) -> napi_status;
326 fn napi_throw_type_error(
327 env: napi_env,
328 code: *const c_char,
329 msg: *const c_char,
330 ) -> napi_status;
331 fn napi_throw_range_error(
332 env: napi_env,
333 code: *const c_char,
334 msg: *const c_char,
335 ) -> napi_status;
336 fn napi_is_error(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
337 fn napi_is_exception_pending(env: napi_env, result: *mut bool) -> napi_status;
338 fn napi_get_and_clear_last_exception(env: napi_env, result: *mut napi_value) -> napi_status;
339 fn napi_is_arraybuffer(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
340 fn napi_create_arraybuffer(
341 env: napi_env,
342 byte_length: usize,
343 data: *mut *mut c_void,
344 result: *mut napi_value,
345 ) -> napi_status;
346 fn napi_create_external_arraybuffer(
347 env: napi_env,
348 external_data: *mut c_void,
349 byte_length: usize,
350 finalize_cb: napi_finalize,
351 finalize_hint: *mut c_void,
352 result: *mut napi_value,
353 ) -> napi_status;
354 fn napi_get_arraybuffer_info(
355 env: napi_env,
356 arraybuffer: napi_value,
357 data: *mut *mut c_void,
358 byte_length: *mut usize,
359 ) -> napi_status;
360 fn napi_is_typedarray(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
361 fn napi_create_typedarray(
362 env: napi_env,
363 type_: napi_typedarray_type,
364 length: usize,
365 arraybuffer: napi_value,
366 byte_offset: usize,
367 result: *mut napi_value,
368 ) -> napi_status;
369 fn napi_get_typedarray_info(
370 env: napi_env,
371 typedarray: napi_value,
372 type_: *mut napi_typedarray_type,
373 length: *mut usize,
374 data: *mut *mut c_void,
375 arraybuffer: *mut napi_value,
376 byte_offset: *mut usize,
377 ) -> napi_status;
378 fn napi_create_dataview(
379 env: napi_env,
380 length: usize,
381 arraybuffer: napi_value,
382 byte_offset: usize,
383 result: *mut napi_value,
384 ) -> napi_status;
385 fn napi_is_dataview(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
386 fn napi_get_dataview_info(
387 env: napi_env,
388 dataview: napi_value,
389 bytelength: *mut usize,
390 data: *mut *mut c_void,
391 arraybuffer: *mut napi_value,
392 byte_offset: *mut usize,
393 ) -> napi_status;
394 fn napi_get_version(env: napi_env, result: *mut u32) -> napi_status;
395 fn napi_create_promise(
396 env: napi_env,
397 deferred: *mut napi_deferred,
398 promise: *mut napi_value,
399 ) -> napi_status;
400 fn napi_resolve_deferred(
401 env: napi_env,
402 deferred: napi_deferred,
403 resolution: napi_value,
404 ) -> napi_status;
405 fn napi_reject_deferred(
406 env: napi_env,
407 deferred: napi_deferred,
408 rejection: napi_value,
409 ) -> napi_status;
410 fn napi_is_promise(env: napi_env, value: napi_value, is_promise: *mut bool) -> napi_status;
411 #[cfg(not(target_env = "ohos"))]
412 fn napi_run_script(env: napi_env, script: napi_value, result: *mut napi_value)
413 -> napi_status;
414 #[cfg(not(target_env = "ohos"))]
415 fn napi_adjust_external_memory(
416 env: napi_env,
417 change_in_bytes: i64,
418 adjusted_value: *mut i64,
419 ) -> napi_status;
420 fn napi_module_register(mod_: *mut napi_module);
421 fn napi_fatal_error(
422 location: *const c_char,
423 location_len: isize,
424 message: *const c_char,
425 message_len: isize,
426 );
427 fn napi_async_init(
428 env: napi_env,
429 async_resource: napi_value,
430 async_resource_name: napi_value,
431 result: *mut napi_async_context,
432 ) -> napi_status;
433 fn napi_async_destroy(env: napi_env, async_context: napi_async_context) -> napi_status;
434 fn napi_make_callback(
435 env: napi_env,
436 async_context: napi_async_context,
437 recv: napi_value,
438 func: napi_value,
439 argc: usize,
440 argv: *const napi_value,
441 result: *mut napi_value,
442 ) -> napi_status;
443 fn napi_create_buffer(
444 env: napi_env,
445 length: usize,
446 data: *mut *mut c_void,
447 result: *mut napi_value,
448 ) -> napi_status;
449 fn napi_create_external_buffer(
450 env: napi_env,
451 length: usize,
452 data: *mut c_void,
453 finalize_cb: napi_finalize,
454 finalize_hint: *mut c_void,
455 result: *mut napi_value,
456 ) -> napi_status;
457 fn napi_create_buffer_copy(
458 env: napi_env,
459 length: usize,
460 data: *const c_void,
461 result_data: *mut *mut c_void,
462 result: *mut napi_value,
463 ) -> napi_status;
464 fn napi_is_buffer(env: napi_env, value: napi_value, result: *mut bool) -> napi_status;
465 fn napi_get_buffer_info(
466 env: napi_env,
467 value: napi_value,
468 data: *mut *mut c_void,
469 length: *mut usize,
470 ) -> napi_status;
471 fn napi_create_async_work(
472 env: napi_env,
473 async_resource: napi_value,
474 async_resource_name: napi_value,
475 execute: napi_async_execute_callback,
476 complete: napi_async_complete_callback,
477 data: *mut c_void,
478 result: *mut napi_async_work,
479 ) -> napi_status;
480 fn napi_delete_async_work(env: napi_env, work: napi_async_work) -> napi_status;
481 fn napi_queue_async_work(env: napi_env, work: napi_async_work) -> napi_status;
482 fn napi_cancel_async_work(env: napi_env, work: napi_async_work) -> napi_status;
483 fn napi_get_node_version(
484 env: napi_env,
485 version: *mut *const napi_node_version,
486 ) -> napi_status;
487 }
488 );
489}
490
491#[cfg(feature = "napi2")]
492mod napi2 {
493 #[cfg(not(target_env = "ohos"))]
494 use std::os::raw::c_int;
495
496 use super::super::types::*;
497
498 generate!(
499 extern "C" {
500 fn napi_get_uv_event_loop(env: napi_env, loop_: *mut *mut uv_loop_s) -> napi_status;
501
502 #[cfg(not(target_env = "ohos"))]
504 fn uv_run(loop_: *mut uv_loop_s, mode: uv_run_mode) -> c_int;
505 }
506 );
507}
508
509#[cfg(feature = "napi3")]
510mod napi3 {
511 use std::os::raw::c_void;
512
513 use super::super::types::*;
514
515 generate!(
516 extern "C" {
517 fn napi_fatal_exception(env: napi_env, err: napi_value) -> napi_status;
518 fn napi_add_env_cleanup_hook(
519 env: napi_env,
520 fun: Option<unsafe extern "C" fn(arg: *mut c_void)>,
521 arg: *mut c_void,
522 ) -> napi_status;
523 fn napi_remove_env_cleanup_hook(
524 env: napi_env,
525 fun: Option<unsafe extern "C" fn(arg: *mut c_void)>,
526 arg: *mut c_void,
527 ) -> napi_status;
528 fn napi_open_callback_scope(
529 env: napi_env,
530 resource_object: napi_value,
531 context: napi_async_context,
532 result: *mut napi_callback_scope,
533 ) -> napi_status;
534 fn napi_close_callback_scope(env: napi_env, scope: napi_callback_scope) -> napi_status;
535 }
536 );
537}
538
539#[cfg(feature = "napi4")]
540mod napi4 {
541 use super::super::types::*;
542 use std::os::raw::c_void;
543
544 generate!(
545 extern "C" {
546 fn napi_create_threadsafe_function(
547 env: napi_env,
548 func: napi_value,
549 async_resource: napi_value,
550 async_resource_name: napi_value,
551 max_queue_size: usize,
552 initial_thread_count: usize,
553 thread_finalize_data: *mut c_void,
554 thread_finalize_cb: napi_finalize,
555 context: *mut c_void,
556 call_js_cb: napi_threadsafe_function_call_js,
557 result: *mut napi_threadsafe_function,
558 ) -> napi_status;
559 fn napi_get_threadsafe_function_context(
560 func: napi_threadsafe_function,
561 result: *mut *mut c_void,
562 ) -> napi_status;
563 fn napi_call_threadsafe_function(
564 func: napi_threadsafe_function,
565 data: *mut c_void,
566 is_blocking: napi_threadsafe_function_call_mode,
567 ) -> napi_status;
568 fn napi_acquire_threadsafe_function(func: napi_threadsafe_function) -> napi_status;
569 fn napi_release_threadsafe_function(
570 func: napi_threadsafe_function,
571 mode: napi_threadsafe_function_release_mode,
572 ) -> napi_status;
573 fn napi_unref_threadsafe_function(
574 env: napi_env,
575 func: napi_threadsafe_function,
576 ) -> napi_status;
577 fn napi_ref_threadsafe_function(env: napi_env, func: napi_threadsafe_function)
578 -> napi_status;
579 }
580 );
581}
582
583#[cfg(feature = "napi5")]
584mod napi5 {
585 use super::super::types::*;
586 use std::ffi::c_void;
587
588 generate!(
589 extern "C" {
590 fn napi_create_date(env: napi_env, time: f64, result: *mut napi_value) -> napi_status;
591 fn napi_is_date(env: napi_env, value: napi_value, is_date: *mut bool) -> napi_status;
592 fn napi_get_date_value(env: napi_env, value: napi_value, result: *mut f64) -> napi_status;
593 fn napi_add_finalizer(
594 env: napi_env,
595 js_object: napi_value,
596 native_object: *mut c_void,
597 finalize_cb: napi_finalize,
598 finalize_hint: *mut c_void,
599 result: *mut napi_ref,
600 ) -> napi_status;
601 }
602 );
603}
604
605#[cfg(feature = "napi6")]
606mod napi6 {
607 use super::super::types::*;
608 use std::os::raw::{c_int, c_void};
609
610 generate!(
611 extern "C" {
612 fn napi_create_bigint_int64(
613 env: napi_env,
614 value: i64,
615 result: *mut napi_value,
616 ) -> napi_status;
617 fn napi_create_bigint_uint64(
618 env: napi_env,
619 value: u64,
620 result: *mut napi_value,
621 ) -> napi_status;
622 fn napi_create_bigint_words(
623 env: napi_env,
624 sign_bit: c_int,
625 word_count: usize,
626 words: *const u64,
627 result: *mut napi_value,
628 ) -> napi_status;
629 fn napi_get_value_bigint_int64(
630 env: napi_env,
631 value: napi_value,
632 result: *mut i64,
633 lossless: *mut bool,
634 ) -> napi_status;
635 fn napi_get_value_bigint_uint64(
636 env: napi_env,
637 value: napi_value,
638 result: *mut u64,
639 lossless: *mut bool,
640 ) -> napi_status;
641 fn napi_get_value_bigint_words(
642 env: napi_env,
643 value: napi_value,
644 sign_bit: *mut c_int,
645 word_count: *mut usize,
646 words: *mut u64,
647 ) -> napi_status;
648 fn napi_get_all_property_names(
649 env: napi_env,
650 object: napi_value,
651 key_mode: napi_key_collection_mode,
652 key_filter: napi_key_filter,
653 key_conversion: napi_key_conversion,
654 result: *mut napi_value,
655 ) -> napi_status;
656 fn napi_set_instance_data(
657 env: napi_env,
658 data: *mut c_void,
659 finalize_cb: napi_finalize,
660 finalize_hint: *mut c_void,
661 ) -> napi_status;
662 fn napi_get_instance_data(env: napi_env, data: *mut *mut c_void) -> napi_status;
663 }
664 );
665}
666
667#[cfg(feature = "napi7")]
668mod napi7 {
669 use super::super::types::*;
670
671 generate!(
672 extern "C" {
673 fn napi_detach_arraybuffer(env: napi_env, arraybuffer: napi_value) -> napi_status;
674 fn napi_is_detached_arraybuffer(
675 env: napi_env,
676 value: napi_value,
677 result: *mut bool,
678 ) -> napi_status;
679 }
680 );
681}
682
683#[cfg(feature = "napi8")]
684mod napi8 {
685 use std::os::raw::c_void;
686
687 use super::super::types::*;
688
689 generate!(
690 extern "C" {
691 fn napi_add_async_cleanup_hook(
692 env: napi_env,
693 hook: napi_async_cleanup_hook,
694 arg: *mut c_void,
695 remove_handle: *mut napi_async_cleanup_hook_handle,
696 ) -> napi_status;
697
698 fn napi_remove_async_cleanup_hook(
699 remove_handle: napi_async_cleanup_hook_handle,
700 ) -> napi_status;
701
702 fn napi_object_freeze(env: napi_env, object: napi_value) -> napi_status;
703
704 fn napi_object_seal(env: napi_env, object: napi_value) -> napi_status;
705 }
706 );
707}
708
709#[cfg(feature = "napi9")]
710mod napi9 {
711 use std::os::raw::c_char;
712
713 use super::super::types::*;
714
715 generate!(
716 extern "C" {
717 fn node_api_symbol_for(
718 env: napi_env,
719 utf8name: *const c_char,
720 length: isize,
721 result: *mut napi_value,
722 ) -> napi_status;
723 fn node_api_get_module_file_name(env: napi_env, result: *mut *const c_char) -> napi_status;
724 fn node_api_create_syntax_error(
725 env: napi_env,
726 code: napi_value,
727 msg: napi_value,
728 result: *mut napi_value,
729 ) -> napi_status;
730 fn node_api_throw_syntax_error(
731 env: napi_env,
732 code: *const c_char,
733 msg: *const c_char,
734 ) -> napi_status;
735 }
736 );
737}
738
739#[cfg(feature = "napi10")]
740mod napi10 {
741 use std::os::raw::{c_char, c_void};
742
743 use super::super::types::*;
744
745 generate!(
746 extern "C" {
747 fn node_api_create_external_string_latin1(
748 env: napi_env,
749 str_: *const c_char,
750 length: isize,
751 napi_finalize: node_api_basic_finalize,
752 finalize_hint: *mut c_void,
753 result: *mut napi_value,
754 copied: *mut bool,
755 ) -> napi_status;
756
757 fn node_api_create_external_string_utf16(
758 env: napi_env,
759 str_: *const u16,
760 length: isize,
761 napi_finalize: node_api_basic_finalize,
762 finalize_hint: *mut c_void,
763 result: *mut napi_value,
764 copied: *mut bool,
765 ) -> napi_status;
766
767 fn node_api_create_property_key_utf16(
768 env: napi_env,
769 str_: *const u16,
770 length: isize,
771 result: *mut napi_value,
772 ) -> napi_status;
773
774 fn node_api_create_property_key_utf8(
775 env: napi_env,
776 str_: *const c_char,
777 length: isize,
778 result: *mut napi_value,
779 ) -> napi_status;
780
781 fn node_api_create_property_key_latin1(
782 env: napi_env,
783 str_: *const c_char,
784 length: isize,
785 result: *mut napi_value,
786 ) -> napi_status;
787 }
788 );
789}
790
791#[cfg(feature = "experimental")]
792mod experimental {
793 use std::os::raw::c_void;
794
795 use super::super::types::*;
796
797 generate!(
798 extern "C" {
799 fn node_api_create_buffer_from_arraybuffer(
800 env: napi_env,
801 arraybuffer: napi_value,
802 byte_offset: usize,
803 byte_length: usize,
804 result: *mut napi_value,
805 ) -> napi_status;
806
807 fn node_api_post_finalizer(
808 env: node_api_basic_env,
809 finalize_cb: napi_finalize,
810 finalize_data: *mut c_void,
811 finalize_hint: *mut c_void,
812 ) -> napi_status;
813
814 fn napi_create_object_with_properties(
815 env: napi_env,
816 prototype_or_null: napi_value,
817 property_names: *const napi_value,
818 property_values: *const napi_value,
819 property_count: usize,
820 result: *mut napi_value,
821 ) -> napi_status;
822 }
823 );
824}
825
826#[cfg(feature = "experimental")]
827pub use experimental::*;
828
829pub use napi1::*;
830#[cfg(feature = "napi10")]
831pub use napi10::*;
832#[cfg(feature = "napi2")]
833pub use napi2::*;
834#[cfg(feature = "napi3")]
835pub use napi3::*;
836#[cfg(feature = "napi4")]
837pub use napi4::*;
838#[cfg(feature = "napi5")]
839pub use napi5::*;
840#[cfg(feature = "napi6")]
841pub use napi6::*;
842#[cfg(feature = "napi7")]
843pub use napi7::*;
844#[cfg(feature = "napi8")]
845pub use napi8::*;
846#[cfg(feature = "napi9")]
847pub use napi9::*;
848
849#[cfg(target_env = "ohos")]
850mod ohos {
851 use std::os::raw::{c_char, c_void};
852
853 use super::super::types::*;
854
855 generate!(
856 extern "C" {
857 fn napi_run_script_path(
859 env: napi_env,
860 script: napi_value,
861 result: *mut napi_value,
862 ) -> napi_status;
863 fn napi_queue_async_work_with_qos(
865 env: napi_env,
866 work: napi_async_work,
867 qos: napi_qos_t,
868 ) -> napi_status;
869 fn node_api_get_module_file_name(env: napi_env, result: *mut *const c_char) -> napi_status;
871 fn napi_load_module(
873 env: napi_env,
874 path: *const c_char,
875 result: *mut napi_value,
876 ) -> napi_status;
877 fn napi_load_module_with_info(
879 env: napi_env,
880 path: *const c_char,
881 module_info: *const c_char,
882 result: *mut napi_value,
883 ) -> napi_status;
884 fn napi_destroy_ark_runtime(env: *mut napi_env) -> napi_status;
885 fn napi_create_ark_runtime(env: *mut napi_env) -> napi_status;
886 fn napi_call_threadsafe_function_with_priority(
888 func: napi_threadsafe_function,
889 data: *mut c_void,
890 priority: napi_task_priority,
891 is_tail: bool,
892 ) -> napi_status;
893 fn napi_run_event_loop(env: napi_env, mode: napi_event_mode) -> napi_status;
894 fn napi_stop_event_loop(env: napi_env) -> napi_status;
895 }
896 );
897}
898
899#[cfg(target_env = "ohos")]
900pub use ohos::*;
901
902#[cfg(windows)]
903#[cfg(any(windows, feature = "dyn-symbols"))]
904#[cfg(all(windows, not(target_env = "msvc"), feature = "dyn-symbols"))]
905fn test_library(
906 lib_result: Result<libloading::os::windows::Library, libloading::Error>,
907) -> Result<libloading::Library, libloading::Error> {
908 unsafe {
909 match lib_result {
910 Ok(lib) => {
911 let symbol: Result<
912 libloading::os::windows::Symbol<unsafe extern "C" fn()>,
913 libloading::Error,
914 > = lib.get(b"napi_create_int32\0");
915 match symbol {
916 Ok(_) => Ok(lib.into()),
917 Err(err) => Err(err),
918 }
919 }
920 Err(err) => Err(err),
921 }
922 }
923}
924
925#[cfg(all(windows, not(target_env = "msvc"), feature = "dyn-symbols"))]
926fn find_node_library() -> Result<libloading::Library, libloading::Error> {
927 return unsafe {
928 test_library(libloading::os::windows::Library::this())
929 .or(test_library(
930 libloading::os::windows::Library::open_already_loaded("libnode"),
931 ))
932 .or(test_library(
933 libloading::os::windows::Library::open_already_loaded("node"),
934 ))
935 .or(test_library(libloading::os::windows::Library::new("node")))
936 .or(test_library(libloading::os::windows::Library::new(
937 "libnode",
938 )))
939 };
940}
941
942#[cfg(any(
943 target_env = "msvc",
944 all(not(target_family = "wasm"), feature = "dyn-symbols")
945))]
946pub(super) unsafe fn load_all() -> Result<libloading::Library, libloading::Error> {
947 #[cfg(all(windows, target_env = "msvc"))]
948 let host = libloading::os::windows::Library::this()?.into();
949
950 #[cfg(all(windows, not(target_env = "msvc")))]
951 let host = find_node_library()?.into();
952
953 #[cfg(unix)]
954 let host = libloading::os::unix::Library::this().into();
955
956 napi1::load(&host)?;
957 #[cfg(feature = "napi2")]
958 napi2::load(&host)?;
959 #[cfg(feature = "napi3")]
960 napi3::load(&host)?;
961 #[cfg(feature = "napi4")]
962 napi4::load(&host)?;
963 #[cfg(feature = "napi5")]
964 napi5::load(&host)?;
965 #[cfg(feature = "napi6")]
966 napi6::load(&host)?;
967 #[cfg(feature = "napi7")]
968 napi7::load(&host)?;
969 #[cfg(feature = "napi8")]
970 napi8::load(&host)?;
971 #[cfg(feature = "napi9")]
972 napi9::load(&host)?;
973 #[cfg(feature = "napi10")]
974 napi10::load(&host)?;
975 #[cfg(feature = "experimental")]
976 experimental::load(&host)?;
977 Ok(host)
978}