1个不稳定版本
0.3.0 | 2023年2月26日 |
---|
#19 在 #foreign
308 每月下载量
用于 2 crates
17KB
230 行
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::{
// 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-derive 和 camo-typescript 。 |
camo-core |
此 crate 定义了 camo 的核心 AST,因此是其他 crate 建立的基础。 |
camo-derive |
此 crate 定义了 Camo 推导宏。 |
camo-typescript |
此 crate 实现了从 Camo AST 到 TypeScript 定义的转换层,可以直接写入,例如文件。 |
许可
camo
在 MIT 许可证的条款下分发。有关详细信息,请参阅 LICENSE。