napi-ohos 0.1.2

N-API bindings
# napi-rs-oh

> `napi-rs` HarmonyOS版本。整体代码来源于[napi-rs]https://github.com/napi-rs/napi-rs,针对鸿蒙系统做了部分裁剪和整理

## 环境准备

- OpenHarmony SDK    
  配置环境变量为`OHOS_NDK_HOME`,进入之后目录结构应该包括 native ets js等目录

- Rust    
  MSRV 1.65.0

## 快速开始

1. 安装脚手架工具

```shell
cargo install ohrs
```

2. 初始化项目

```shell
ohrs init test
```

3. 构建产物

```shell
cd test

ohrs build
```

## 指南

目前所有API基本对齐napi,你可以在[example](https://github.com/ohos-rs/example)中看到在HarmonyOS工程中的应用。

能力支持:

- 脚手架支持(支持workspace模式)
- CI 能力支持
- [Harmony native binding]https://github.com/ohos-rs/ohos-native-bindings

## Packages

| Package                                                    | Version | Description                                                                |
|------------------------------------------------------------|---------| -------------------------------------------------------------------------- |
| [`@ohos-rs/crc32`]https://github.com/ohos-rs/crc32-ohos  | 0.0.1   | Fastest `CRC32` implementation using `SIMD` |
| [`@ohos-rs/jieba`]https://github.com/ohos-rs/jieba-ohos  | 0.0.1   | [`jieba-rs`]https://github.com/messense/jieba-rs binding |


## 社区

你可以在 [这里](https://github.com/ohos-rs/example/issues) 提交相关问题、建议和需求场景。

## F&Q

1. 为什么Rust构建产物体积比官方的CMAKE构建体积大?    
Rust本身的产物体积会比C++大很多。即使使用了各种优化手段因为零抽象成本等各种原因,本身构建的代码体积就会比C++大。    
   - 如果对于体积较为敏感的话,可以参考[min-sized-rust]https://github.com/johnthagen/min-sized-rust进行优化。
   - 另外可以使用NDK提供的strip工具进行优化。工具路径:`${OHOS_NDK_HOME}/native/llvm/bin/llvm-strip`


2. 为什么 `Option<T>` 参数会报错?    
目前OpenHarmony NDK中的 `napi_typeof` 方法实现有点问题,对于可选参数无法默认处理成 undefined 值。已向团队提相关问题,待修复即可。


3. 为什么 `Buffer` 在 Native 和 ArkTS 之间无法直接传递?    
ArkTS侧的 buffer实现跟Native侧的 Buffer实现不一致,导致在跨语言传递的时候出现问题。已向官方提相关问题,待修复即可。