17个版本
1.0.0-beta.5 | 2024年7月31日 |
---|---|
1.0.0-beta.4 | 2024年7月30日 |
1.0.0-beta.2 | 2024年5月27日 |
1.0.0-beta.0 | 2024年4月18日 |
0.0.3 | 2023年11月28日 |
#58 in FFI
4,178 每月下载量
用于 3 个crate(2个直接使用)
480KB
14K SLoC
ohos-rs
请访问官方网站: https://ohos.rs
讨论
lib.rs
:
高级Node.js N-API 绑定
napi-rs 为在 Rust
中编写 N-API 模块提供了最小的开销。
功能标志
napi1 ~ napi8
因为 Node.js N-API 有多个版本,所以有功能标志来选择您想构建哪个版本的 N-API
。例如,如果您想构建一个可以在 node@10.17.0
上使用的库,您应该选择 napi5
或更低版本。
N-API版本和支持矩阵的详细信息: n_api_version_matrix
tokio_rt
使用 tokio_rt
功能,napi-rs
在一个额外的线程中提供了一个 tokio 运行时。您可以在其中轻松运行 tokio future
并返回 promise
。
use futures::prelude::*;
use napi_ohos::{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
使用 encoding_rs 从 JavaScript 解码 latin1 字符串。
使用此功能,您可以使用 JsString.as_latin1_string
函数
serde-json
启用通过 JavaScript Object
和 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)
}
依赖关系
~0.4–11MB
~120K SLoC