17个版本

1.0.0-beta.52024年7月31日
1.0.0-beta.42024年7月30日
1.0.0-beta.22024年5月27日
1.0.0-beta.02024年4月18日
0.0.3 2023年11月28日

#58 in FFI

Download history 72/week @ 2024-05-03 24/week @ 2024-05-10 11/week @ 2024-05-17 86/week @ 2024-05-24 18/week @ 2024-05-31 6/week @ 2024-06-07 5/week @ 2024-06-14 32/week @ 2024-06-21 556/week @ 2024-06-28 835/week @ 2024-07-05 579/week @ 2024-07-12 522/week @ 2024-07-19 959/week @ 2024-07-26 830/week @ 2024-08-02 1200/week @ 2024-08-09 1117/week @ 2024-08-16

4,178 每月下载量
用于 3 个crate(2个直接使用)

MIT 许可

480KB
14K SLoC

ohos-rs

Crates.io Version Platform License: MIT

请访问官方网站: 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 ObjectRust 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