13 个重大版本
0.15.0 | 2022 年 7 月 28 日 |
---|---|
0.12.0 | 2022 年 4 月 15 日 |
0.11.0 | 2022 年 3 月 10 日 |
0.5.0 | 2021 年 12 月 23 日 |
405 在 WebAssembly 中排名
1,070 每月下载量
用于 6 个 crate(直接使用 2 个)
38KB
727 行
witgen
witgen 是一个库和 CLI 工具,帮助您为 WebAssembly 生成 wit 定义。结合使用此库和 wit-bindgen,可以帮助您从/到 wasm 模块导入/导出类型和函数。此项目目前支持 wit 解析器版本 0.2.0
,请见 此处。
入门指南
目标: 仅使用 Rust 编写代码生成 .wit
文件。
您需要库和 CLI。
预备知识
- 创建一个新的库项目并移动到该项目。
$ cargo new my_wit
$ cd my_wit
- 在您的
Cargo.toml
中添加witgen
作为依赖项。注意:必须安装cargo-edit
以从 CLI 添加依赖项,例如cargo install cargo-edit
。
$ cargo add witgen
- 安装
cargo witgen
CLI。
$ cargo install cargo-witgen
编写代码
- 将您的
lib.rs
中的内容替换为
use witgen::witgen;
#[witgen]
use other_crate::*;
/// Doc strings are supported!
#[witgen]
struct TestStruct {
/// Even for fields!
inner: String,
}
#[witgen]
enum TestEnum {
Unit,
Number(u64),
StringVariant(String),
}
#[witgen]
fn test(other: Vec<u8>, test_struct: TestStruct, other_enum: TestEnum) -> Result<(String, i64), String> {
// The following code is not part of the generated `.wit` file.
// You may add an example implementation or just satisfy the compiler with a `todo!()`.
Ok((String::from("test"), 0i64))
}
#[witgen]
impl AResource {
/// Can convert custom attributes to doc strings
#[custom_attribute]
pub fn foo(&self) {}
/// Have special mutable attribute
pub fn faa(&mut self) {}
pub fn fee() {}
}
- 然后您可以在您的包根目录下启动 CLI
cargo witgen generate
- 它将在您的包根目录下生成一个
index.wit
文件
use * from other-crate
/// Doc strings are supported!
record test-struct {
/// Even for fields!
inner: string
}
variant test-enum {
unit,
number(u64),
string-variant(string),
}
test : func(other: list <u8>, test-struct: test-struct, other-enum: test-enum) -> expected<tuple<string, s64>>
resource a-resource {
/// Can convert custom attributes to doc strings
/// @custom_attribute
foo: func()
/// Have special mutable attribute
/// @mutable
faa: func()
static fee: func()
}
- 您可以在 此处 找到更完整的示例
限制
目前使用 #[witgen]
有一些限制
- 您只能使用进程宏
#[witgen]
在struct
、enum
、type alias
、function
、impl
和use
上 - 不支持泛型参数或生命周期注解,除了
HashMap
,它被解释为list<tuple<key, value>>
。 - 类型
&str
不支持(但您可以使用String
) - 引用、
Box
、Rc
、Arc
以及所有智能指针类型均不支持 - 没有语义分析,这意味着如果您的
function
、struct
或enum
使用了非标量类型,您必须在此类型声明处添加#[witgen]
(它不会在编译时失败)
开发
这是一个非常基础的版本,它目前不支持所有类型的类型,但主要类型都是支持的。我制作它的目的是为了方便生成针对我需求的 .wit
文件。如果您需要什么,请随时创建问题或拉取请求。我将很高兴帮助您!
依赖项
约 5MB
约 138K SLoC