Event-sourcing Schema Definition Language
Schema definition language for defining aggregates, commands, events & custom types.
Heavily inspired by GraphQL syntax, you can describe aggregates which can be used for codegen in different languages.
Due to the wit-bindgen project not having their crates published yet (see https://github.com/bytecodealliance/wit-bindgen/issues/180),
esdlis not up to date on crates.io and it's advised to use the git url as the dependency for now.
toml
esdl = { git = "https://github.com/thalo-rs/esdl", features = ["codegen-rust"] }
Possible features include codegen-rust, codegen-rust-wasm and codegen-typescript.
ESDL schemas can be used for code generation.
The Rust crate currently supports code generation for:
codegen-rust)codegen-rust-wasm)codegen-typescript)Additional languages may be added in the future. Contributions are welcome!
``` version = "0.1.0"
aggregate BankAccount { openaccount(initialbalance: Float) -> OpenedAccount depositfunds(amount: Float) -> ReceivedFunds withdrawfunds(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? } ```
| Scalar | Rust Type | TypeScript Type |
| -------- | ----------- | --------------- |
| String | [String] | string |
| Int | [i32] | number |
| Long | [i64] | number |
| Float | [f32] | number |
| Double | [f64] | number |
| Bool | [bool] | boolean |
| Bytes | [Vec<u8>] | string |
Types can be marked as optional by adding the ? suffix.
| Type | Syntax | Example |
| -------- | ------ | --------- |
| Required | T | String |
| Optional | T? | String? |
Types can be repeated by wrapping them in [].
| Type | Syntax | Example |
| ------ | ------ | ---------- |
| Single | T | String |
| Array | [T] | [String] |
Remember, we can mark types as optional, even in arrays.
| Type | Syntax | Example |
| -------------------- | ------- | ------------ |
| Optional Array | [T?]? | [String?]? |
| Required Array | [T?] | [String?] |
| Required Array Items | [T]? | [String]? |
| Required Array Items | [T] | [String] |
Integrates with Thalo to generate Rust code.