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 日

#218WebAssembly

Download history 5/week @ 2024-04-22 6/week @ 2024-05-06 7/week @ 2024-05-20 4/week @ 2024-05-27 11/week @ 2024-06-03 15/week @ 2024-06-10 6/week @ 2024-06-17 8/week @ 2024-06-24 13/week @ 2024-07-15 41/week @ 2024-07-22 7/week @ 2024-07-29 8/week @ 2024-08-05

每月 69 次下载
用于 5 个 crates(3 个直接使用)

MIT 许可证

21KB
384

gents

MIT/Apache 2.0

gents 是一个从 Rust 代码生成 Typescript 接口的工具。我们可以轻松使用 serde-jsonRustTypescript 之间进行通信,而无需编写简单的 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 中的详细使用说明。

无运行时依赖