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日

#289 in FFI

Download history 19/week @ 2024-03-07 10/week @ 2024-03-14 1/week @ 2024-03-21 11/week @ 2024-03-28 9/week @ 2024-04-04

每月163次 下载

MIT 许可

40KB
478

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

软件包

本项目由多个软件包组成,以便组织功能。

请注意,只有 camo 是针对通用用途的。

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

许可证

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

依赖项

~110KB