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

MIT/Apache

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-rustcodegen-rust-wasmcodegen-typescript

代码生成

ESDL模式可以用于代码生成。

当前的Rust crate支持以下语言的代码生成:

未来可能还会添加其他语言。欢迎贡献!

示例

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