Documentação
Conceitos
Function

Function

Definir uma function JavaScript é muito simples em NAPI-RS. Apenas uma simples Rust fn:

#[napi]
fn sum(a: u32, b: u32) -> u32 {
  a + b
}

A coisa mais importante que você deve ter em mente é que as fn em NAPI-RS não suportam todos os tipos de Rust. Aqui está uma tabela para ilustrar como os tipos JavaScript se mapeiam para os tipos de Rust quando são argumentos e tipos de retorno de uma fn:

Argumentos

Rust TypeJavaScript Type
u32number
i32number
i64number
f64number
boolboolean
Stringstring
Latin1Stringstring
UTF16Stringstring
#[napi(object)] structObject
& struct or &mut structClass instance
serde_json::MapObject
serde_json::Valueunknown
std::collections::HashMapObject
Arrayunknown[]
Vec<T> T must be types in this tableT[]
BufferBuffer
ExternalExternal (opens in a new tab)
Nullnull
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>
AbortSignalAbortSignal (opens in a new tab)
JsSymbolSymbol
Int8Array / Uint8Array / Int16Array...TypedArray
BigIntBigInt

Tipo de Retorno

Rust TypeJavaScript Type
u32number
i32number
i64number
f64number
boolboolean
Stringstring
Latin1Stringstring
UTF16Stringstring
#[napi(object)] structObject
#[napi] structClass
serde_json::MapObject
serde_json::Valueunknown
std::collections::HashMapObject
Arrayunknown[]
Vec<T> T must be types in this tableT[]
BufferBuffer
ExternalExternal
Nullnull
Undefined / ()undefined
Option<T>T or null
AsyncTask<Task<JsValue = T>>Promise<T>
JsSymbolSymbol
Int8Array / Uint8Array / Int16Array...TypedArray
BigIntBigInt
i64nBigInt
i128BigInt
u128BigInt