函数
在 NAPI-RS 中定义一个 JavaScript function
非常简单,只需要一个普通的 Rust fn
:
#[napi]
fn sum(a: u32, b: u32) -> u32 {
a + b
}
最重要的是,你需要记住 NAPI-RS fn 并不支持所有的 Rust 类型,
下面的表格说明了在 fn
参数和返回类型里,JavaScript 类型和 Rust 类型的映射关系:
参数
Rust Type | JavaScript Type |
---|---|
u32 | number |
i32 | number |
i64 | number |
f64 | number |
bool | boolean |
String | string |
Latin1String | string |
UTF16String | string |
#[napi(object)] struct | Object |
& struct or &mut struct | Class instance |
serde_json::Map | Object |
serde_json::Value | unknown |
std::collections::HashMap | Object |
Array | unknown[] |
Vec<T> T must be types in this table | T[] |
Buffer | Buffer |
External | External (opens in a new tab) |
Null | null |
Undefined / () | undefined |
Option<T> | T or null |
Fn(Arg) ->T Arg and T must be types in this table | (arg: Arg) => T |
Promise<T> | Promise<T> |
AbortSignal | AbortSignal (opens in a new tab) |
JsSymbol | Symbol |
Int8Array / Uint8Array / Int16Array ... | TypedArray |
BigInt | BigInt |
返回类型
Rust Type | JavaScript Type |
---|---|
u32 | number |
i32 | number |
i64 | number |
f64 | number |
bool | boolean |
String | string |
Latin1String | string |
UTF16String | string |
#[napi(object)] struct | Object |
#[napi] struct | Class |
serde_json::Map | Object |
serde_json::Value | unknown |
std::collections::HashMap | Object |
Array | unknown[] |
Vec<T> T must be types in this table | T[] |
Buffer | Buffer |
External | External |
Null | null |
Undefined / () | undefined |
Option<T> | T or null |
AsyncTask<Task<JsValue = T>> | Promise<T> |
JsSymbol | Symbol |
Int8Array / Uint8Array / Int16Array ... | TypedArray |
BigInt | BigInt |
i64n | BigInt |
i128 | BigInt |
u128 | BigInt |