7 个版本 (破坏性更新)

0.7.0 2023 年 7 月 22 日
0.6.0 2023 年 7 月 18 日
0.5.0 2023 年 3 月 28 日
0.4.0 2023 年 2 月 27 日
0.1.1 2021 年 3 月 2 日

#1417 in 网页编程

Download history 17/week @ 2024-04-03 1/week @ 2024-05-08

每月 175 次下载
用于 Camo

MIT 许可证

57KB
1K SLoC

Camo

release version release date documentation

文档 | 仓库 | 版本

Camo 是一个将 Rust 类型定义转换为其他语言相应定义的库。

  • 抽象语法树 - Camo 提供了一组数据结构来描述 Rust 语法的子集。语法树以 core::Container 为根,该类型通过 core::Camo 特性提供。

  • 派生宏 - derive::Camo 派生宏自动化创建您类型语法树的工作。该宏考虑了 serde 属性,确保生成的类型准确描述 serde 将生成的值。

  • TypeScript 后端 - typescript 模块提供了一个现成的 TypeScript 后端。将 core::Container 转换为 typescript::Definition,并将其写入文件。


入门

将 Camo 添加为依赖项

# `derive` is included by default
cargo add camo
# optionally add the typescript backend
cargo add camo --features typescript

Camo 派生宏添加到您的类型

use camo::Camo;

#[derive(Camo)]
struct Book {
    title: String,
    author: String,
    page_count: usize,
    chapters: Vec<String>,
}

使用生成的 Camo::camo() 实现

fn main() {
    let book = Book::camo();
    println!("{:?}", book);
}

启用 typescript 功能后,创建 TypeScript 定义

use camo::{
    /* ... */
    typescript::Definition,
};

/* ... */

fn main() {

    /* ... */

    let ty: Definition = book.into();

    println!("{}", ty);
    // interface Book {
    //     title: string;
    //     author: string;
    //     page_count: number;
    //     chapters: string[];
    // }
}

查看更多示例 这里

特性

特性 默认 描述
派生 启用derive::Camo派生宏。
typescript 启用TypeScript后端,基于typescript::Definition

软件包

该项目由多个软件包组成,以组织特性。

注意,只有camo适用于通用用途。

软件包 描述
camo 此软件包整合了子软件包,是唯一旨在通用用途的软件包。它公开了camo-core,并且可以通过特性开关可选地公开camo-derivecamo-typescript
camo-core 此软件包定义了camo的核心AST,因此是其他软件包构建的基础。
camo-derive 此软件包定义了派生宏Camo
camo-typescript 此软件包实现了从Camo AST到可以直接写入的TypeScript定义的转换层,例如文件。

许可证

camo在MIT许可证的条款下分发。有关详细信息,请参阅LICENSE

依赖项