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 网页编程
每月 175 次下载
用于 Camo
57KB
1K SLoC
Camo
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-derive 和camo-typescript 。 |
camo-core |
此软件包定义了camo 的核心AST,因此是其他软件包构建的基础。 |
camo-derive |
此软件包定义了派生宏Camo 。 |
camo-typescript |
此软件包实现了从Camo AST到可以直接写入的TypeScript定义的转换层,例如文件。 |
许可证
camo
在MIT许可证的条款下分发。有关详细信息,请参阅LICENSE。