napi_sys_ohos/
functions.rs

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      // harmony not support symbol
48      #[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      // uv_run should be removed, which is provided by libuv. If you need to use it, please add ffi and link libuv.so
503      #[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      // same with napi_run_script but script should be `abc` file
858      fn napi_run_script_path(
859        env: napi_env,
860        script: napi_value,
861        result: *mut napi_value,
862      ) -> napi_status;
863      // set async_work queue
864      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      // special napi9 for ohos
870      fn node_api_get_module_file_name(env: napi_env, result: *mut *const c_char) -> napi_status;
871      // load module, can be used in main thread
872      fn napi_load_module(
873        env: napi_env,
874        path: *const c_char,
875        result: *mut napi_value,
876      ) -> napi_status;
877      // can be used in new ark runtime
878      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      // set tsfn_priority
887      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}