5 个版本 (3 个重大更新)

0.5.0 2023年7月18日
0.4.0 2023年2月27日
0.3.0 2023年2月26日
0.1.1 2021年3月2日
0.1.0 2021年3月2日

#350 in #ast

Download history 1/week @ 2024-05-14 1/week @ 2024-06-11

每月下载量 174
用于 camo

MIT 许可证

43KB
1K SLoC

Camo

release version release date documentation

文档 | 仓库 | 版本

Camo 是一个库,用于将 Rust 类型定义转换为其他语言中的对应定义。

  • 抽象语法树 - Camo 提供了一系列数据结构,用于描述 Rust 语法的一个子集。语法树以 core::Container 为根,这些类型通过 core::Camo 特性提供。

  • Derive 宏 - derive::Camo derive 宏自动化为您的类型创建语法树的工作。该宏考虑了 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 derive 宏添加到您的类型中

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 启用 derive::Camo derive 宏。
typescript 启用 TypeScript 后端,基于 typescript::Definition

Crate

本项目由多个 crate 组成,以便组织特性。

请注意,只有 camo 是用于一般用途的。

Crate 描述
camo 此 crate 整合了子 crate,是唯一用于一般用途的 crate。它公开了 camo-core,并且通过功能开关可选地公开了 camo-derivecamo-typescript
camo-core 此 crate 定义了 camo 的核心 AST,因此是其他 crate 构建的基础。
camo-derive 此 crate 定义了 derive 宏 Camo
camo-typescript 此 crate 实现了从 Camo AST 到 TypeScript 定义的翻译层,可以直接写入,例如文件。

许可证

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

依赖关系

~270–720KB
~17K SLoC