Expand description
High level Node.js N-API binding
napi-rs provides minimal overhead to write N-API modules in Rust
.
§Feature flags
§napi1 ~ napi8
Because Node.js
N-API has versions. So there are feature flags to choose what version of N-API
you want to build for.
For example, if you want build a library which can be used by node@10.17.0
, you should choose the napi5
or lower.
The details of N-API versions and support matrix: n_api_version_matrix
§tokio_rt
With tokio_rt
feature, napi-rs
provides a tokio runtime in an additional thread.
And you can easily run tokio future
in it and return promise
.
use futures::prelude::*;
use napi::{CallContext, Error, JsObject, JsString, Result, Status};
use tokio;
#[napi]
pub async fn tokio_readfile(js_filepath: String) -> Result<JsBuffer> {
ctx.env.execute_tokio_future(
tokio::fs::read(js_filepath)
.map(|v| v.map_err(|e| Error::new(Status::Unknown, format!("failed to read file, {}", e)))),
|&mut env, data| env.create_buffer_with_data(data),
)
}
§latin1
Decode latin1 string from JavaScript using encoding_rs.
With this feature, you can use JsString.as_latin1_string
function
§serde-json
Enable Serialize/Deserialize data cross JavaScript Object
and Rust struct
.
#[derive(Serialize, Debug, Deserialize)]
struct AnObject {
a: u32,
b: Vec<f64>,
c: String,
}
#[napi]
fn deserialize_from_js(arg0: JsUnknown) -> Result<JsUndefined> {
let de_serialized: AnObject = ctx.env.from_js_value(arg0)?;
...
}
#[napi]
fn serialize(env: Env) -> Result<JsUnknown> {
let value = AnyObject { a: 1, b: vec![0.1, 2.22], c: "hello" };
env.to_js_value(&value)
}
Re-exports§
Modules§
Structs§
- Notice The hook will be removed if
AsyncCleanupHook
wasdropped
. If you want keep the hook until node process exited, call theAsyncCleanupHook::forget
. - Function call context
- Created by
Env::add_env_cleanup_hook
And used byEnv::remove_env_cleanup_hook
Env
is used to represent a context that the underlying N-API implementation can use to persist VM-specific state.- Represent
JsError
. Return this Error injs_function
, napi-rs will throw it asJsError
for you. If you want throw it asTypeError
orRangeError
, you can useJsTypeError/JsRangeError::from(Error).throw_into(env)
Enums§
Traits§
Functions§
- This function could be used for
create_buffer_with_borrowed_data
and want do noting when Buffer finalized.
Type Aliases§
Attribute Macros§
- Marks a function or static variable as a library/executable constructor. This uses OS-specific linker sections to call a specific function at load time.