13 个版本 (7 个破坏性更新)
0.8.0 | 2023 年 12 月 29 日 |
---|---|
0.7.0 | 2023 年 11 月 20 日 |
0.6.0 | 2023 年 10 月 19 日 |
0.3.1 | 2023 年 5 月 21 日 |
0.2.0 | 2022 年 9 月 20 日 |
#218 在 WebAssembly
每月 69 次下载
用于 5 个 crates(3 个直接使用)
21KB
384 行
gents
gents
是一个从 Rust 代码生成 Typescript 接口的工具。我们可以轻松使用 serde-json
在 Rust 和 Typescript 之间进行通信,而无需编写简单的 Typescript 占位符。当您的 API 经常更改时,这非常有用。
它是为 LogiSheets 设计的,并受到了 ts-rs
的启发。非常感谢他们!
欢迎提出问题和 PR!
为什么你需要 gents
?
- 在 Rust 中编写一个简单的 Web 服务器,你讨厌像
grpc-web
这样的东西 - 编写一个 wasm 项目
为什么不使用 ts-rs
?
-
ts-rs
在运行cargo test
时生成文件,因此我们必须将这些生成的文件提交到我们的仓库中。这既不必要,甚至在使用bazel
等其他构建工具时也构成了障碍。gents
作为一个二进制文件生成 Typescript 文件。 -
gents
引入了一个概念 Group,在这个组中的所有成员文件都会放在同一个目录下。即使它们可以共享一些依赖项,Group 也会与其他组分开。因此,gents
要求你指定结构体或枚举上的 file_name,并在 dir 上指定组,而ts-rs
要求为每个项目指定 path。 -
gents
帮助你管理导出文件,并自动收集所有依赖项。 -
gents
很好地支持引用其他 crates。 -
由
ts-rs
生成的代码不符合我们的编码风格。
如何使用 gents
?
在你的 Rust 代码中
你应该在 Cargo.toml 中导入 gents
。
[dev-dependencies]
gents = "0.4"
gents_derives = "0.4"
use gents_derives::TS;
#[derive(TS)]
#[ts(file_name = "person.ts", rename_all = "camelCase")]
pub struct Person {
pub age: u16,
pub en_name: String,
}
#[derive(TS)]
#[ts(file_name = "group.ts", rename_all = "camelCase")]
pub struct Group {
pub name: String,
pub capacity: u16,
pub members: Vec<Person>,
pub leader: Option<Person>,
}
derive(TS)
在 #[cfg(any(test, feature="gents"))]
下生成代码,这意味着 gents
在运行之前没有任何区别。
如果所有从 TS
派生的结构体或枚举都在同一个 crate 中,我们建议您编写一个简单的单元测试来生成如下文件:
#[ignore]
#[test]
fn gents() {
use gents::FileGroup;
let mut group = FileGroup::new();
// You don't need to add Person because it is a dependency of Group and it will be added automatically
group.add::<Group>();
// If you need to generate the index.ts file, set true.
group.gen_files("outdir", false);
}
运行此测试后,在 outdir
中生成了 2 个文件。
- person.ts
- group.ts
在 tests
文件夹中查看更多案例和使用方法。
如果您的 derive(TS)
来自不同的 crate,则您需要定义一个名为 gents
的功能。请查看 LogiSheets 中的详细使用说明。