feat(napi): implmenet Set (#2330)

This commit is contained in:
LongYinan 2024-10-26 20:11:58 +08:00 committed by GitHub
parent 3d95fcffdf
commit f707f36c5a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 332 additions and 141 deletions

View File

@ -156,6 +156,8 @@ static KNOWN_TYPES: LazyLock<HashMap<&'static str, (&'static str, bool, bool)>>
("HashMap", ("Record<{}, {}>", false, false)),
("BTreeMap", ("Record<{}, {}>", false, false)),
("IndexMap", ("Record<{}, {}>", false, false)),
("HashSet", ("Set<{}>", false, false)),
("BTreeSet", ("Set<{}>", false, false)),
("ArrayBuffer", ("ArrayBuffer", false, false)),
("JsArrayBuffer", ("ArrayBuffer", false, false)),
("Int8Array", ("Int8Array", false, false)),

View File

@ -27,6 +27,7 @@ mod promise;
mod promise_raw;
#[cfg(feature = "serde-json")]
mod serde;
mod set;
mod string;
mod symbol;
mod task;

View File

@ -4,7 +4,7 @@ use std::hash::{BuildHasher, Hash};
#[cfg(feature = "object_indexmap")]
use indexmap::IndexMap;
use crate::bindgen_prelude::{Env, Result, ToNapiValue, *};
use crate::bindgen_prelude::*;
impl<K, V, S> TypeName for HashMap<K, V, S> {
fn type_name() -> &'static str {

View File

@ -0,0 +1,103 @@
use std::collections::{BTreeSet, HashSet};
use std::hash::{BuildHasher, Hash};
use crate::bindgen_prelude::*;
impl<V, S> TypeName for HashSet<V, S> {
fn type_name() -> &'static str {
"HashSet"
}
fn value_type() -> ValueType {
ValueType::Object
}
}
impl<V: FromNapiValue> ValidateNapiValue for HashSet<V> {}
impl<V, S> ToNapiValue for HashSet<V, S>
where
V: ToNapiValue,
{
unsafe fn to_napi_value(raw_env: sys::napi_env, val: Self) -> Result<sys::napi_value> {
let env = Env::from(raw_env);
let obj = env.get_global()?;
let set_class = obj.get_named_property_unchecked::<Function<'_, Array, ()>>("Set")?;
let set = set_class.new_instance(Array::from_vec(&env, val.into_iter().collect())?)?;
Ok(set.0.value)
}
}
impl<V, S> FromNapiValue for HashSet<V, S>
where
V: FromNapiValue + PartialEq + Eq + Hash,
S: Default + BuildHasher,
{
unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> Result<Self> {
let obj = unsafe { Object::from_napi_value(env, napi_val)? };
let mut set = HashSet::default();
let iter_creator: Function<'_, (), Object> = obj.get_named_property("values")?;
let iter = iter_creator.apply(&obj, ())?;
let next: Function<'_, (), Object> = iter.get_named_property("next")?;
while {
let o: Object = next.apply(&iter, ())?;
let done: bool = o.get_named_property("done")?;
if !done {
let v = o.get_named_property_unchecked::<V>("value")?;
set.insert(v);
}
!done
} {}
Ok(set)
}
}
impl<V> TypeName for BTreeSet<V> {
fn type_name() -> &'static str {
"BTreeSet"
}
fn value_type() -> ValueType {
ValueType::Object
}
}
impl<V: FromNapiValue> ValidateNapiValue for BTreeSet<V> {}
impl<V> ToNapiValue for BTreeSet<V>
where
V: ToNapiValue,
{
unsafe fn to_napi_value(raw_env: sys::napi_env, val: Self) -> Result<sys::napi_value> {
let env = Env::from(raw_env);
let obj = env.get_global()?;
let set_class = obj.get_named_property_unchecked::<Function<'_, Array, ()>>("Set")?;
let set = set_class.new_instance(Array::from_vec(&env, val.into_iter().collect())?)?;
Ok(set.0.value)
}
}
impl<V> FromNapiValue for BTreeSet<V>
where
V: FromNapiValue + Ord,
{
unsafe fn from_napi_value(env: sys::napi_env, napi_val: sys::napi_value) -> Result<Self> {
let obj = unsafe { Object::from_napi_value(env, napi_val)? };
let mut set = BTreeSet::default();
let iter_creator: Function<'_, (), Object> = obj.get_named_property("values")?;
let iter = iter_creator.apply(&obj, ())?;
let next: Function<'_, (), Object> = iter.get_named_property("next")?;
while {
let o: Object = next.apply(&iter, ())?;
let done: bool = o.get_named_property("done")?;
if !done {
let v = o.get_named_property_unchecked::<V>("value")?;
set.insert(v);
}
!done
} {}
Ok(set)
}
}

View File

@ -329,6 +329,10 @@ Generated by [AVA](https://avajs.dev).
export declare function bigintGetU64AsString(bi: bigint): string␊
export declare function btreeSetToJs(): Set<string>
export declare function btreeSetToRust(set: Set<string>): void␊
export declare function bufferPassThrough(buf: Buffer): Promise<Buffer>
export declare function buildThreadsafeFunctionFromFunction(callback: (arg0: number, arg1: number) => number): void␊
@ -638,6 +642,10 @@ Generated by [AVA](https://avajs.dev).
export declare function panicInAsync(): Promise<void>
export declare function passSetToJs(): Set<string>
export declare function passSetToRust(set: Set<string>): void␊
export interface Pet {␊
name: string␊
kind: number␊

View File

@ -35,6 +35,10 @@ import {
getIndexMapping,
sumIndexMapping,
indexmapPassthrough,
passSetToJs,
passSetToRust,
btreeSetToJs,
btreeSetToRust,
getCwd,
Animal,
Kind,
@ -257,6 +261,15 @@ test('map', (t) => {
t.deepEqual(indexmapPassthrough({ a: 101, b: 102 }), { a: 101, b: 102 })
})
test('set', (t) => {
t.notThrows(() => {
passSetToRust(new Set(['a', 'b', 'c']))
btreeSetToRust(new Set(['a', 'b', 'c']))
})
t.deepEqual(Array.from(passSetToJs()).sort(), ['a', 'b', 'c'])
t.deepEqual(Array.from(btreeSetToJs()).sort(), ['a', 'b', 'c'])
})
test('enum', (t) => {
t.deepEqual([Kind.Dog, Kind.Cat, Kind.Duck], [0, 1, 2])
t.is(enumToI32(CustomNumEnum.Eight), 8)

View File

@ -307,76 +307,80 @@ function __napi_rs_initialize_modules(__napiInstance) {
__napiInstance.exports['__napi_register__test_serde_roundtrip_311']?.()
__napiInstance.exports['__napi_register__test_serde_big_number_precision_312']?.()
__napiInstance.exports['__napi_register__test_serde_buffer_bytes_313']?.()
__napiInstance.exports['__napi_register__return_from_shared_crate_314']?.()
__napiInstance.exports['__napi_register__contains_315']?.()
__napiInstance.exports['__napi_register__concat_str_316']?.()
__napiInstance.exports['__napi_register__concat_utf16_317']?.()
__napiInstance.exports['__napi_register__concat_latin1_318']?.()
__napiInstance.exports['__napi_register__roundtrip_str_319']?.()
__napiInstance.exports['__napi_register__set_symbol_in_obj_320']?.()
__napiInstance.exports['__napi_register__create_symbol_321']?.()
__napiInstance.exports['__napi_register__create_symbol_for_322']?.()
__napiInstance.exports['__napi_register__DelaySum_impl_323']?.()
__napiInstance.exports['__napi_register__without_abort_controller_324']?.()
__napiInstance.exports['__napi_register__with_abort_controller_325']?.()
__napiInstance.exports['__napi_register__AsyncTaskVoidReturn_impl_326']?.()
__napiInstance.exports['__napi_register__async_task_void_return_327']?.()
__napiInstance.exports['__napi_register__AsyncTaskOptionalReturn_impl_328']?.()
__napiInstance.exports['__napi_register__async_task_optional_return_329']?.()
__napiInstance.exports['__napi_register__AsyncTaskReadFile_impl_330']?.()
__napiInstance.exports['__napi_register__async_task_read_file_331']?.()
__napiInstance.exports['__napi_register__call_threadsafe_function_332']?.()
__napiInstance.exports['__napi_register__call_long_threadsafe_function_333']?.()
__napiInstance.exports['__napi_register__threadsafe_function_throw_error_334']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_335']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_error_336']?.()
__napiInstance.exports['__napi_register__threadsafe_function_closure_capture_337']?.()
__napiInstance.exports['__napi_register__tsfn_call_with_callback_338']?.()
__napiInstance.exports['__napi_register__tsfn_async_call_339']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_340']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_fatal_341']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_tuple_args_342']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_343']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_timeout_344']?.()
__napiInstance.exports['__napi_register__tsfn_throw_from_js_345']?.()
__napiInstance.exports['__napi_register__spawn_thread_in_thread_346']?.()
__napiInstance.exports['__napi_register__Pet_struct_347']?.()
__napiInstance.exports['__napi_register__tsfn_in_either_348']?.()
__napiInstance.exports['__napi_register__get_buffer_349']?.()
__napiInstance.exports['__napi_register__get_buffer_slice_350']?.()
__napiInstance.exports['__napi_register__append_buffer_351']?.()
__napiInstance.exports['__napi_register__get_empty_buffer_352']?.()
__napiInstance.exports['__napi_register__create_external_buffer_slice_353']?.()
__napiInstance.exports['__napi_register__create_buffer_slice_from_copied_data_354']?.()
__napiInstance.exports['__napi_register__get_empty_typed_array_355']?.()
__napiInstance.exports['__napi_register__convert_u32_array_356']?.()
__napiInstance.exports['__napi_register__create_external_typed_array_357']?.()
__napiInstance.exports['__napi_register__mutate_typed_array_358']?.()
__napiInstance.exports['__napi_register__deref_uint8_array_359']?.()
__napiInstance.exports['__napi_register__buffer_pass_through_360']?.()
__napiInstance.exports['__napi_register__array_buffer_pass_through_361']?.()
__napiInstance.exports['__napi_register__accept_slice_362']?.()
__napiInstance.exports['__napi_register__accept_arraybuffer_363']?.()
__napiInstance.exports['__napi_register__create_arraybuffer_364']?.()
__napiInstance.exports['__napi_register__u8_array_to_array_365']?.()
__napiInstance.exports['__napi_register__i8_array_to_array_366']?.()
__napiInstance.exports['__napi_register__u16_array_to_array_367']?.()
__napiInstance.exports['__napi_register__i16_array_to_array_368']?.()
__napiInstance.exports['__napi_register__u32_array_to_array_369']?.()
__napiInstance.exports['__napi_register__i32_array_to_array_370']?.()
__napiInstance.exports['__napi_register__f32_array_to_array_371']?.()
__napiInstance.exports['__napi_register__f64_array_to_array_372']?.()
__napiInstance.exports['__napi_register__u64_array_to_array_373']?.()
__napiInstance.exports['__napi_register__i64_array_to_array_374']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_375']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_and_buffer_slice_376']?.()
__napiInstance.exports['__napi_register__AsyncBuffer_impl_377']?.()
__napiInstance.exports['__napi_register__async_reduce_buffer_378']?.()
__napiInstance.exports['__napi_register__async_buffer_to_array_379']?.()
__napiInstance.exports['__napi_register__u_init8_array_from_string_380']?.()
__napiInstance.exports['__napi_register__AsyncReader_impl_381']?.()
__napiInstance.exports['__napi_register__Reader_struct_382']?.()
__napiInstance.exports['__napi_register__Reader_impl_384']?.()
__napiInstance.exports['__napi_register__pass_set_to_rust_314']?.()
__napiInstance.exports['__napi_register__pass_set_to_js_315']?.()
__napiInstance.exports['__napi_register__btree_set_to_rust_316']?.()
__napiInstance.exports['__napi_register__btree_set_to_js_317']?.()
__napiInstance.exports['__napi_register__return_from_shared_crate_318']?.()
__napiInstance.exports['__napi_register__contains_319']?.()
__napiInstance.exports['__napi_register__concat_str_320']?.()
__napiInstance.exports['__napi_register__concat_utf16_321']?.()
__napiInstance.exports['__napi_register__concat_latin1_322']?.()
__napiInstance.exports['__napi_register__roundtrip_str_323']?.()
__napiInstance.exports['__napi_register__set_symbol_in_obj_324']?.()
__napiInstance.exports['__napi_register__create_symbol_325']?.()
__napiInstance.exports['__napi_register__create_symbol_for_326']?.()
__napiInstance.exports['__napi_register__DelaySum_impl_327']?.()
__napiInstance.exports['__napi_register__without_abort_controller_328']?.()
__napiInstance.exports['__napi_register__with_abort_controller_329']?.()
__napiInstance.exports['__napi_register__AsyncTaskVoidReturn_impl_330']?.()
__napiInstance.exports['__napi_register__async_task_void_return_331']?.()
__napiInstance.exports['__napi_register__AsyncTaskOptionalReturn_impl_332']?.()
__napiInstance.exports['__napi_register__async_task_optional_return_333']?.()
__napiInstance.exports['__napi_register__AsyncTaskReadFile_impl_334']?.()
__napiInstance.exports['__napi_register__async_task_read_file_335']?.()
__napiInstance.exports['__napi_register__call_threadsafe_function_336']?.()
__napiInstance.exports['__napi_register__call_long_threadsafe_function_337']?.()
__napiInstance.exports['__napi_register__threadsafe_function_throw_error_338']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_339']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_error_340']?.()
__napiInstance.exports['__napi_register__threadsafe_function_closure_capture_341']?.()
__napiInstance.exports['__napi_register__tsfn_call_with_callback_342']?.()
__napiInstance.exports['__napi_register__tsfn_async_call_343']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_344']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_fatal_345']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_tuple_args_346']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_347']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_timeout_348']?.()
__napiInstance.exports['__napi_register__tsfn_throw_from_js_349']?.()
__napiInstance.exports['__napi_register__spawn_thread_in_thread_350']?.()
__napiInstance.exports['__napi_register__Pet_struct_351']?.()
__napiInstance.exports['__napi_register__tsfn_in_either_352']?.()
__napiInstance.exports['__napi_register__get_buffer_353']?.()
__napiInstance.exports['__napi_register__get_buffer_slice_354']?.()
__napiInstance.exports['__napi_register__append_buffer_355']?.()
__napiInstance.exports['__napi_register__get_empty_buffer_356']?.()
__napiInstance.exports['__napi_register__create_external_buffer_slice_357']?.()
__napiInstance.exports['__napi_register__create_buffer_slice_from_copied_data_358']?.()
__napiInstance.exports['__napi_register__get_empty_typed_array_359']?.()
__napiInstance.exports['__napi_register__convert_u32_array_360']?.()
__napiInstance.exports['__napi_register__create_external_typed_array_361']?.()
__napiInstance.exports['__napi_register__mutate_typed_array_362']?.()
__napiInstance.exports['__napi_register__deref_uint8_array_363']?.()
__napiInstance.exports['__napi_register__buffer_pass_through_364']?.()
__napiInstance.exports['__napi_register__array_buffer_pass_through_365']?.()
__napiInstance.exports['__napi_register__accept_slice_366']?.()
__napiInstance.exports['__napi_register__accept_arraybuffer_367']?.()
__napiInstance.exports['__napi_register__create_arraybuffer_368']?.()
__napiInstance.exports['__napi_register__u8_array_to_array_369']?.()
__napiInstance.exports['__napi_register__i8_array_to_array_370']?.()
__napiInstance.exports['__napi_register__u16_array_to_array_371']?.()
__napiInstance.exports['__napi_register__i16_array_to_array_372']?.()
__napiInstance.exports['__napi_register__u32_array_to_array_373']?.()
__napiInstance.exports['__napi_register__i32_array_to_array_374']?.()
__napiInstance.exports['__napi_register__f32_array_to_array_375']?.()
__napiInstance.exports['__napi_register__f64_array_to_array_376']?.()
__napiInstance.exports['__napi_register__u64_array_to_array_377']?.()
__napiInstance.exports['__napi_register__i64_array_to_array_378']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_379']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_and_buffer_slice_380']?.()
__napiInstance.exports['__napi_register__AsyncBuffer_impl_381']?.()
__napiInstance.exports['__napi_register__async_reduce_buffer_382']?.()
__napiInstance.exports['__napi_register__async_buffer_to_array_383']?.()
__napiInstance.exports['__napi_register__u_init8_array_from_string_384']?.()
__napiInstance.exports['__napi_register__AsyncReader_impl_385']?.()
__napiInstance.exports['__napi_register__Reader_struct_386']?.()
__napiInstance.exports['__napi_register__Reader_impl_388']?.()
}
export const Animal = __napiModule.exports.Animal
export const AnimalWithDefaultConstructor = __napiModule.exports.AnimalWithDefaultConstructor
@ -445,6 +449,8 @@ export const bigintAdd = __napiModule.exports.bigintAdd
export const bigintFromI128 = __napiModule.exports.bigintFromI128
export const bigintFromI64 = __napiModule.exports.bigintFromI64
export const bigintGetU64AsString = __napiModule.exports.bigintGetU64AsString
export const btreeSetToJs = __napiModule.exports.btreeSetToJs
export const btreeSetToRust = __napiModule.exports.btreeSetToRust
export const bufferPassThrough = __napiModule.exports.bufferPassThrough
export const buildThreadsafeFunctionFromFunction = __napiModule.exports.buildThreadsafeFunctionFromFunction
export const buildThreadsafeFunctionFromFunctionCalleeHandle = __napiModule.exports.buildThreadsafeFunctionFromFunctionCalleeHandle
@ -555,6 +561,8 @@ export const overrideIndividualArgOnFunction = __napiModule.exports.overrideIndi
export const overrideIndividualArgOnFunctionWithCbArg = __napiModule.exports.overrideIndividualArgOnFunctionWithCbArg
export const panic = __napiModule.exports.panic
export const panicInAsync = __napiModule.exports.panicInAsync
export const passSetToJs = __napiModule.exports.passSetToJs
export const passSetToRust = __napiModule.exports.passSetToRust
export const plusOne = __napiModule.exports.plusOne
export const promiseInEither = __napiModule.exports.promiseInEither
export const readFile = __napiModule.exports.readFile

View File

@ -331,76 +331,80 @@ function __napi_rs_initialize_modules(__napiInstance) {
__napiInstance.exports['__napi_register__test_serde_roundtrip_311']?.()
__napiInstance.exports['__napi_register__test_serde_big_number_precision_312']?.()
__napiInstance.exports['__napi_register__test_serde_buffer_bytes_313']?.()
__napiInstance.exports['__napi_register__return_from_shared_crate_314']?.()
__napiInstance.exports['__napi_register__contains_315']?.()
__napiInstance.exports['__napi_register__concat_str_316']?.()
__napiInstance.exports['__napi_register__concat_utf16_317']?.()
__napiInstance.exports['__napi_register__concat_latin1_318']?.()
__napiInstance.exports['__napi_register__roundtrip_str_319']?.()
__napiInstance.exports['__napi_register__set_symbol_in_obj_320']?.()
__napiInstance.exports['__napi_register__create_symbol_321']?.()
__napiInstance.exports['__napi_register__create_symbol_for_322']?.()
__napiInstance.exports['__napi_register__DelaySum_impl_323']?.()
__napiInstance.exports['__napi_register__without_abort_controller_324']?.()
__napiInstance.exports['__napi_register__with_abort_controller_325']?.()
__napiInstance.exports['__napi_register__AsyncTaskVoidReturn_impl_326']?.()
__napiInstance.exports['__napi_register__async_task_void_return_327']?.()
__napiInstance.exports['__napi_register__AsyncTaskOptionalReturn_impl_328']?.()
__napiInstance.exports['__napi_register__async_task_optional_return_329']?.()
__napiInstance.exports['__napi_register__AsyncTaskReadFile_impl_330']?.()
__napiInstance.exports['__napi_register__async_task_read_file_331']?.()
__napiInstance.exports['__napi_register__call_threadsafe_function_332']?.()
__napiInstance.exports['__napi_register__call_long_threadsafe_function_333']?.()
__napiInstance.exports['__napi_register__threadsafe_function_throw_error_334']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_335']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_error_336']?.()
__napiInstance.exports['__napi_register__threadsafe_function_closure_capture_337']?.()
__napiInstance.exports['__napi_register__tsfn_call_with_callback_338']?.()
__napiInstance.exports['__napi_register__tsfn_async_call_339']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_340']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_fatal_341']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_tuple_args_342']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_343']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_timeout_344']?.()
__napiInstance.exports['__napi_register__tsfn_throw_from_js_345']?.()
__napiInstance.exports['__napi_register__spawn_thread_in_thread_346']?.()
__napiInstance.exports['__napi_register__Pet_struct_347']?.()
__napiInstance.exports['__napi_register__tsfn_in_either_348']?.()
__napiInstance.exports['__napi_register__get_buffer_349']?.()
__napiInstance.exports['__napi_register__get_buffer_slice_350']?.()
__napiInstance.exports['__napi_register__append_buffer_351']?.()
__napiInstance.exports['__napi_register__get_empty_buffer_352']?.()
__napiInstance.exports['__napi_register__create_external_buffer_slice_353']?.()
__napiInstance.exports['__napi_register__create_buffer_slice_from_copied_data_354']?.()
__napiInstance.exports['__napi_register__get_empty_typed_array_355']?.()
__napiInstance.exports['__napi_register__convert_u32_array_356']?.()
__napiInstance.exports['__napi_register__create_external_typed_array_357']?.()
__napiInstance.exports['__napi_register__mutate_typed_array_358']?.()
__napiInstance.exports['__napi_register__deref_uint8_array_359']?.()
__napiInstance.exports['__napi_register__buffer_pass_through_360']?.()
__napiInstance.exports['__napi_register__array_buffer_pass_through_361']?.()
__napiInstance.exports['__napi_register__accept_slice_362']?.()
__napiInstance.exports['__napi_register__accept_arraybuffer_363']?.()
__napiInstance.exports['__napi_register__create_arraybuffer_364']?.()
__napiInstance.exports['__napi_register__u8_array_to_array_365']?.()
__napiInstance.exports['__napi_register__i8_array_to_array_366']?.()
__napiInstance.exports['__napi_register__u16_array_to_array_367']?.()
__napiInstance.exports['__napi_register__i16_array_to_array_368']?.()
__napiInstance.exports['__napi_register__u32_array_to_array_369']?.()
__napiInstance.exports['__napi_register__i32_array_to_array_370']?.()
__napiInstance.exports['__napi_register__f32_array_to_array_371']?.()
__napiInstance.exports['__napi_register__f64_array_to_array_372']?.()
__napiInstance.exports['__napi_register__u64_array_to_array_373']?.()
__napiInstance.exports['__napi_register__i64_array_to_array_374']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_375']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_and_buffer_slice_376']?.()
__napiInstance.exports['__napi_register__AsyncBuffer_impl_377']?.()
__napiInstance.exports['__napi_register__async_reduce_buffer_378']?.()
__napiInstance.exports['__napi_register__async_buffer_to_array_379']?.()
__napiInstance.exports['__napi_register__u_init8_array_from_string_380']?.()
__napiInstance.exports['__napi_register__AsyncReader_impl_381']?.()
__napiInstance.exports['__napi_register__Reader_struct_382']?.()
__napiInstance.exports['__napi_register__Reader_impl_384']?.()
__napiInstance.exports['__napi_register__pass_set_to_rust_314']?.()
__napiInstance.exports['__napi_register__pass_set_to_js_315']?.()
__napiInstance.exports['__napi_register__btree_set_to_rust_316']?.()
__napiInstance.exports['__napi_register__btree_set_to_js_317']?.()
__napiInstance.exports['__napi_register__return_from_shared_crate_318']?.()
__napiInstance.exports['__napi_register__contains_319']?.()
__napiInstance.exports['__napi_register__concat_str_320']?.()
__napiInstance.exports['__napi_register__concat_utf16_321']?.()
__napiInstance.exports['__napi_register__concat_latin1_322']?.()
__napiInstance.exports['__napi_register__roundtrip_str_323']?.()
__napiInstance.exports['__napi_register__set_symbol_in_obj_324']?.()
__napiInstance.exports['__napi_register__create_symbol_325']?.()
__napiInstance.exports['__napi_register__create_symbol_for_326']?.()
__napiInstance.exports['__napi_register__DelaySum_impl_327']?.()
__napiInstance.exports['__napi_register__without_abort_controller_328']?.()
__napiInstance.exports['__napi_register__with_abort_controller_329']?.()
__napiInstance.exports['__napi_register__AsyncTaskVoidReturn_impl_330']?.()
__napiInstance.exports['__napi_register__async_task_void_return_331']?.()
__napiInstance.exports['__napi_register__AsyncTaskOptionalReturn_impl_332']?.()
__napiInstance.exports['__napi_register__async_task_optional_return_333']?.()
__napiInstance.exports['__napi_register__AsyncTaskReadFile_impl_334']?.()
__napiInstance.exports['__napi_register__async_task_read_file_335']?.()
__napiInstance.exports['__napi_register__call_threadsafe_function_336']?.()
__napiInstance.exports['__napi_register__call_long_threadsafe_function_337']?.()
__napiInstance.exports['__napi_register__threadsafe_function_throw_error_338']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_339']?.()
__napiInstance.exports['__napi_register__threadsafe_function_fatal_mode_error_340']?.()
__napiInstance.exports['__napi_register__threadsafe_function_closure_capture_341']?.()
__napiInstance.exports['__napi_register__tsfn_call_with_callback_342']?.()
__napiInstance.exports['__napi_register__tsfn_async_call_343']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_344']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_fatal_345']?.()
__napiInstance.exports['__napi_register__accept_threadsafe_function_tuple_args_346']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_347']?.()
__napiInstance.exports['__napi_register__tsfn_return_promise_timeout_348']?.()
__napiInstance.exports['__napi_register__tsfn_throw_from_js_349']?.()
__napiInstance.exports['__napi_register__spawn_thread_in_thread_350']?.()
__napiInstance.exports['__napi_register__Pet_struct_351']?.()
__napiInstance.exports['__napi_register__tsfn_in_either_352']?.()
__napiInstance.exports['__napi_register__get_buffer_353']?.()
__napiInstance.exports['__napi_register__get_buffer_slice_354']?.()
__napiInstance.exports['__napi_register__append_buffer_355']?.()
__napiInstance.exports['__napi_register__get_empty_buffer_356']?.()
__napiInstance.exports['__napi_register__create_external_buffer_slice_357']?.()
__napiInstance.exports['__napi_register__create_buffer_slice_from_copied_data_358']?.()
__napiInstance.exports['__napi_register__get_empty_typed_array_359']?.()
__napiInstance.exports['__napi_register__convert_u32_array_360']?.()
__napiInstance.exports['__napi_register__create_external_typed_array_361']?.()
__napiInstance.exports['__napi_register__mutate_typed_array_362']?.()
__napiInstance.exports['__napi_register__deref_uint8_array_363']?.()
__napiInstance.exports['__napi_register__buffer_pass_through_364']?.()
__napiInstance.exports['__napi_register__array_buffer_pass_through_365']?.()
__napiInstance.exports['__napi_register__accept_slice_366']?.()
__napiInstance.exports['__napi_register__accept_arraybuffer_367']?.()
__napiInstance.exports['__napi_register__create_arraybuffer_368']?.()
__napiInstance.exports['__napi_register__u8_array_to_array_369']?.()
__napiInstance.exports['__napi_register__i8_array_to_array_370']?.()
__napiInstance.exports['__napi_register__u16_array_to_array_371']?.()
__napiInstance.exports['__napi_register__i16_array_to_array_372']?.()
__napiInstance.exports['__napi_register__u32_array_to_array_373']?.()
__napiInstance.exports['__napi_register__i32_array_to_array_374']?.()
__napiInstance.exports['__napi_register__f32_array_to_array_375']?.()
__napiInstance.exports['__napi_register__f64_array_to_array_376']?.()
__napiInstance.exports['__napi_register__u64_array_to_array_377']?.()
__napiInstance.exports['__napi_register__i64_array_to_array_378']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_379']?.()
__napiInstance.exports['__napi_register__accept_uint8_clamped_slice_and_buffer_slice_380']?.()
__napiInstance.exports['__napi_register__AsyncBuffer_impl_381']?.()
__napiInstance.exports['__napi_register__async_reduce_buffer_382']?.()
__napiInstance.exports['__napi_register__async_buffer_to_array_383']?.()
__napiInstance.exports['__napi_register__u_init8_array_from_string_384']?.()
__napiInstance.exports['__napi_register__AsyncReader_impl_385']?.()
__napiInstance.exports['__napi_register__Reader_struct_386']?.()
__napiInstance.exports['__napi_register__Reader_impl_388']?.()
}
module.exports.Animal = __napiModule.exports.Animal
module.exports.AnimalWithDefaultConstructor = __napiModule.exports.AnimalWithDefaultConstructor
@ -469,6 +473,8 @@ module.exports.bigintAdd = __napiModule.exports.bigintAdd
module.exports.bigintFromI128 = __napiModule.exports.bigintFromI128
module.exports.bigintFromI64 = __napiModule.exports.bigintFromI64
module.exports.bigintGetU64AsString = __napiModule.exports.bigintGetU64AsString
module.exports.btreeSetToJs = __napiModule.exports.btreeSetToJs
module.exports.btreeSetToRust = __napiModule.exports.btreeSetToRust
module.exports.bufferPassThrough = __napiModule.exports.bufferPassThrough
module.exports.buildThreadsafeFunctionFromFunction = __napiModule.exports.buildThreadsafeFunctionFromFunction
module.exports.buildThreadsafeFunctionFromFunctionCalleeHandle = __napiModule.exports.buildThreadsafeFunctionFromFunctionCalleeHandle
@ -579,6 +585,8 @@ module.exports.overrideIndividualArgOnFunction = __napiModule.exports.overrideIn
module.exports.overrideIndividualArgOnFunctionWithCbArg = __napiModule.exports.overrideIndividualArgOnFunctionWithCbArg
module.exports.panic = __napiModule.exports.panic
module.exports.panicInAsync = __napiModule.exports.panicInAsync
module.exports.passSetToJs = __napiModule.exports.passSetToJs
module.exports.passSetToRust = __napiModule.exports.passSetToRust
module.exports.plusOne = __napiModule.exports.plusOne
module.exports.promiseInEither = __napiModule.exports.promiseInEither
module.exports.readFile = __napiModule.exports.readFile

View File

@ -431,6 +431,8 @@ module.exports.bigintAdd = nativeBinding.bigintAdd
module.exports.bigintFromI128 = nativeBinding.bigintFromI128
module.exports.bigintFromI64 = nativeBinding.bigintFromI64
module.exports.bigintGetU64AsString = nativeBinding.bigintGetU64AsString
module.exports.btreeSetToJs = nativeBinding.btreeSetToJs
module.exports.btreeSetToRust = nativeBinding.btreeSetToRust
module.exports.bufferPassThrough = nativeBinding.bufferPassThrough
module.exports.buildThreadsafeFunctionFromFunction = nativeBinding.buildThreadsafeFunctionFromFunction
module.exports.buildThreadsafeFunctionFromFunctionCalleeHandle = nativeBinding.buildThreadsafeFunctionFromFunctionCalleeHandle
@ -541,6 +543,8 @@ module.exports.overrideIndividualArgOnFunction = nativeBinding.overrideIndividua
module.exports.overrideIndividualArgOnFunctionWithCbArg = nativeBinding.overrideIndividualArgOnFunctionWithCbArg
module.exports.panic = nativeBinding.panic
module.exports.panicInAsync = nativeBinding.panicInAsync
module.exports.passSetToJs = nativeBinding.passSetToJs
module.exports.passSetToRust = nativeBinding.passSetToRust
module.exports.plusOne = nativeBinding.plusOne
module.exports.promiseInEither = nativeBinding.promiseInEither
module.exports.readFile = nativeBinding.readFile

View File

@ -319,6 +319,10 @@ export declare function bigintFromI64(): bigint
export declare function bigintGetU64AsString(bi: bigint): string
export declare function btreeSetToJs(): Set<string>
export declare function btreeSetToRust(set: Set<string>): void
export declare function bufferPassThrough(buf: Buffer): Promise<Buffer>
export declare function buildThreadsafeFunctionFromFunction(callback: (arg0: number, arg1: number) => number): void
@ -628,6 +632,10 @@ export declare function panic(): void
export declare function panicInAsync(): Promise<void>
export declare function passSetToJs(): Set<string>
export declare function passSetToRust(set: Set<string>): void
export interface Pet {
name: string
kind: number

View File

@ -62,6 +62,7 @@ mod object;
mod promise;
mod reference;
mod serde;
mod set;
mod shared;
mod string;
mod symbol;

35
examples/napi/src/set.rs Normal file
View File

@ -0,0 +1,35 @@
use std::collections::{BTreeSet, HashSet};
#[napi]
pub fn pass_set_to_rust(set: HashSet<String>) {
assert_eq!(set.len(), 3);
assert!(set.contains("a"));
assert!(set.contains("b"));
assert!(set.contains("c"));
}
#[napi]
pub fn pass_set_to_js() -> HashSet<String> {
let mut set = HashSet::new();
set.insert("a".to_string());
set.insert("b".to_string());
set.insert("c".to_string());
set
}
#[napi]
pub fn btree_set_to_rust(set: BTreeSet<String>) {
assert_eq!(set.len(), 3);
assert!(set.contains("a"));
assert!(set.contains("b"));
assert!(set.contains("c"));
}
#[napi]
pub fn btree_set_to_js() -> BTreeSet<String> {
let mut set = BTreeSet::new();
set.insert("a".to_string());
set.insert("b".to_string());
set.insert("c".to_string());
set
}