7个版本
0.2.2 | 2022年2月20日 |
---|---|
0.2.1 | 2022年2月20日 |
0.2.0 | 2022年1月21日 |
0.1.3 | 2022年1月16日 |
#234 in FFI
18KB
276 行
ts2rs
一个将TypeScript接口定义导入Rust的proc-macro库。
使用方法
参见 docs.rs
待办事项列表
- 更好的错误报告;
- 从类定义中导入;
- 日期和时间等高级类型;
lib.rs
:
此crate提供了用于将TypeScript接口导入Rust的 import!
宏。
类型映射
目前只支持基本类型,映射如下
Typescript 类型 | Rust 类型 |
---|---|
string |
String |
number |
f64 |
boolean |
bool |
T[] |
Vec<T> |
T? |
Option<T> |
任何用户定义的类型/接口 | 结构定义(首字母大写) |
使用方法
查看 import!
宏。
Cargo 特性
serde
默认情况下,所有接口都被导入为仅派生 Debug
的结构体。
启用此特性将使所有结构体默认派生 serde::Serialize
和 serde::Deserialize
。
有关更多派生选项,请参阅 派生选项。
导入选项
使用以 /**
开头并以 **/
结尾的注释来指定导入选项。多个选项可以位于同一个注释块中,每个选项以分号 ;
结尾。
重命名
使用 /** rename: <name>; **/
将字段/接口重命名为 <name>
。
示例
interface Fries {
favorite: boolean; /** rename: favourite; **/
price: number;
} /** rename: Chips; **/
这将导致以下结构体定义
#[derive(Debug)]
pub struct Chips {
favourite: bool,
price: f64,
}
重类型
使用 /** retype: <type>; **/
将字段重类型为 <type>
。
示例
interface Chocolate {
price: number; /** retype: i32; **/
}
这将导致以下结构体定义
#[derive(Debug)]
pub struct Chocolate {
price: i32,
}
跳过
使用 /** skip; **/
跳过字段/接口。
示例
interface User {
id: number;
theme: string; /** skip; **/ // backend doesn't care about this field
}
interface Advertisement {
id: number;
url: string;
} /** skip; **/ // backend doesn't care about this interface
这将导致以下结构体定义
#[derive(Debug)]
pub struct User {
id: f64,
}
派生
使用 /** derive: <derive>; **/
为接口派生一个特质。
示例
interface User {
id: number;
} /** derive: PartialEq; derive: Eq; **/
这将导致以下结构体定义
#[derive(Debug, PartialEq, Eq)]
pub struct User {
id: f64,
}
跳过 Serde 派生
使用 /** skip_derive_serde; **/
跳过接口的 serde
派生。
示例
interface User {
id: number;
} /** skip_derive_serde; **/
这将导致以下结构体定义
#[derive(Debug)]
pub struct User {
id: f64,
}
依赖项
~2.2–3MB
~58K SLoC