[−][src]Crate napi
High level NodeJS N-API binding
napi-rs provides minimal overhead to write N-API modules in Rust
.
Feature flags
libuv
With libuv
feature, you can execute a rust future in libuv
in NodeJS, and return a promise
object.
use std::thread; use std::fs; use futures::prelude::*; use futures::channel::oneshot; use napi::{CallContext, Result, JsString, JsObject, Status, Error}; #[js_function(1)] pub fn uv_read_file(ctx: CallContext) -> Result<JsObject> { let path = ctx.get::<JsString>(0)?; let (sender, receiver) = oneshot::channel(); let p = path.as_str()?.to_owned(); thread::spawn(|| { let res = fs::read(p).map_err(|e| Error::new(Status::Unknown, format!("{}", e))); sender.send(res).expect("Send data failed"); }); ctx.env.execute(receiver.map_err(|e| Error::new(Status::Unknown, format!("{}", e))).map(|x| x.and_then(|x| x)), |&mut env, data| { env.create_buffer_with_data(data) }) }
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; #[js_function(1)] pub fn tokio_readfile(ctx: CallContext) -> Result<JsObject> { let js_filepath = ctx.get::<JsString>(0)?; let path_str = js_filepath.as_str()?; ctx.env.execute_tokio_future( tokio::fs::read(path_str.to_owned()) .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), ) }
Tokio channel in napi-rs
buffer size is default 100
.
You can adjust it via NAPI_RS_TOKIO_CHANNEL_BUFFER_SIZE
environment variable
NAPI_RS_TOKIO_CHANNEL_BUFFER_SIZE=1000 node ./app.js
Re-exports
pub use napi_sys as sys; |
Modules
threadsafe_function |
Macros
register_module | register nodejs module |
Structs
CallContext | |
Env | |
Error | |
JsArrayBuffer | |
JsBoolean | |
JsBuffer | |
JsExternal | |
JsFunction | |
JsNull | |
JsNumber | |
JsObject | |
JsString | |
JsSymbol | |
JsUndefined | |
JsUnknown | |
Module | |
NodeVersion | |
Property |
Enums
Either | |
Status | |
ValueType |
Traits
NapiValue | |
Task |
Type Definitions
Callback | |
Result |