#camo #language #interface #intended #foreign #attributes #definition

camo-core

camo的核心,外语言接口生成库。不建议直接使用。

1个不稳定版本

0.3.0 2023年2月26日

#19#foreign

Download history 11/week @ 2024-04-06 2/week @ 2024-04-13 4/week @ 2024-04-20 1/week @ 2024-04-27 7/week @ 2024-05-11 2/week @ 2024-05-18 2/week @ 2024-06-08 1/week @ 2024-06-15

308 每月下载量
用于 2 crates

MIT 协议

17KB
230

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::{
    // The trait (so we can use `Book::camo()`)
    core::Camo as _,
    // The macro (so we can use `#[derive(Camo)]`)
    derive::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

Crate

此项目由多个 crate 组成,以组织功能。

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

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

许可

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

无运行时依赖