6 个版本 (破坏性更新)
0.6.0 | 2022年12月12日 |
---|---|
0.4.0 | 2022年1月30日 |
0.3.0 | 2022年1月28日 |
0.2.1 | 2022年1月27日 |
0.1.0 | 2022年1月24日 |
#331 在 编程语言
每月下载量 42
48KB
1K SLoC
ESDL
Event-sourcing Schema Definition Language
用于定义聚合、命令、事件和自定义类型的模式定义语言。
深受GraphQL语法的启发,您可以描述可以用于不同语言代码生成的聚合。
安装
由于wit-bindgen项目尚未发布其crates(见https://github.com/bytecodealliance/wit-bindgen/issues/180),
esdl
在crates.io上不是最新的,建议现在使用git url作为依赖。
esdl = { git = "https://github.com/thalo-rs/esdl", features = ["codegen-rust"] }
可能的功能包括codegen-rust
、codegen-rust-wasm
和codegen-typescript
。
代码生成
ESDL模式可以用于代码生成。
当前的Rust crate支持以下语言的代码生成:
- Rust (
codegen-rust
) - Rust WASM (
codegen-rust-wasm
) - TypeScript (
codegen-typescript
)
未来可能还会添加其他语言。欢迎贡献!
示例
version = "0.1.0"
aggregate BankAccount {
open_account(initial_balance: Float) -> OpenedAccount
deposit_funds(amount: Float) -> ReceivedFunds
withdraw_funds(amount: Float) -> SentFunds
send_funds(amount: Float, user: User) -> (SentFunds? | ReceivedFunds?)
}
event OpenedAccount {
initial_balance: Float
}
event SentFunds {
amount: Float
user: User?
}
event ReceivedFunds {
amount: Float
user: User?
}
type User {
id: String
name: String?
}
标量类型
标量 | Rust类型 | TypeScript类型 |
---|---|---|
String |
String |
string |
Int |
i32 |
number |
Long |
i64 |
number |
Float |
f32 |
number |
Double |
f64 |
number |
Bool |
bool |
boolean |
Bytes |
Vec<u8> |
string |
可选和必需
类型可以通过添加?
后缀来标记为可选。
类型 | 语法 | 示例 |
---|---|---|
必需 | T |
String |
可选 | T? |
String? |
重复类型
类型可以通过将它们包裹在[]
中来重复。
类型 | 语法 | 示例 |
---|---|---|
单个 | T |
String |
数组 | [T] |
[String] |
记住,我们可以在数组中标记类型为可选。
类型 | 语法 | 示例 |
---|---|---|
可选数组 | [T?]? |
[String?]? |
必需数组 | [T?] |
[String?] |
必需数组项 | [T]? |
[String]? |
必需数组项 | [T] |
[String] |
与Thalo集成以生成Rust代码。
依赖项
~3.5MB
~71K SLoC