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
每月下载量 174
用于 camo
43KB
1K SLoC
Camo
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-derive 和 camo-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