5个版本 (破坏性更新)
0.5.0 | 2024年6月4日 |
---|---|
0.4.0 | 2024年6月2日 |
0.3.0 | 2024年5月30日 |
0.2.0 | 2024年5月29日 |
0.1.0 | 2024年5月7日 |
#143 在 数据库接口
每月250 次下载
51KB
1.5K SLoC
hGEN
面向人类的API模式语言
[!警告]
此项目处于早期开发阶段,尚未准备好投入生产使用。
用法
可以使用hGEN CLI生成给定模式文件的代码。
$ cargo install hgen
$ hgen -i schema.hgen -o schema.ts
哲学
-
单一真相来源:确保您的API在所有服务和客户端之间保持一致是困难的。使用hGEN,您可以在一个地方定义和维护您的API,同时快速代码生成可以降低开销。
-
设计严格:如果模式语言不强制执行严格规则,那么它的意义何在?hGEN深受Rust类型系统的影响,确保您的API尽可能安全。
-
编译时反射:由于生成的代码文件不打算直接编辑,hGEN以易于使用且强类型化的反射元数据格式的形式提供这种功能,允许您在生成的代码上构建以实现自己的类型、验证、映射逻辑等。
-
可扩展元数据:其他模式或反射方法需要大量难看的注释,并且缺乏类型安全。这就是为什么hGEN的目标之一是提供一种可扩展的方式,直接在模式中定义元数据,允许您以类型安全的方式定义验证、序列化等,而不会影响模式的可读性。
模式语言
hGEN定义了自己的模式语言来描述API。这种语言深受TypeScript、Kotlin和Dart等语言的影响,使其易于学习和使用。然而,hGEN的原始类型基于Rust,推动更严格和安全的API设计。
extern alias Instant = String;
alias UUID = String & {
type: uuid,
};
struct Todo {
id: UUID,
title: String,
createdAt: Instant,
checkedAt: Instant?,
}
struct CreateTodoParams {
title: String,
}
service TodoService {
create(params: CreateTodoParams) -> Todo,
find() -> List<Todo>,
check(id: UUID) -> Unit,
uncheck(id: UUID) -> Unit,
}
参考
类型
-
原始类型
-
结构体
-
枚举
-
布尔型
-
Int8
、Int16
、Int32
、Int64
、Int128
-
UInt8
、UInt16
、UInt32
、UInt64
、UInt128
-
Float32
、Float64
-
字符
-
字符串
-
可以为空
-
单元
-
(T1, T2, ...,Tn)
-
列表<T>
-
映射<K, V>
-
联合
-
-
概念
- 类型别名
- 自定义类型
- 结果类型
依赖项
~1.8–9.5MB
~81K SLoC