Expand description
§ESDL
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.
§Install
Due to the wit-bindgen project not having their crates published yet (see https://github.com/bytecodealliance/wit-bindgen/issues/180),
esdl
is not up to date on crates.io and it’s advised to use the git url as the dependency for now.
esdl = { git = "https://github.com/thalo-rs/esdl", features = ["codegen-rust"] }
Possible features include codegen-rust
, codegen-rust-wasm
and codegen-typescript
.
§Code generation
ESDL schemas can be used for code generation.
The Rust crate currently supports code generation for:
- Rust (
codegen-rust
) - Rust WASM (
codegen-rust-wasm
) - TypeScript (
codegen-typescript
)
Additional languages may be added in the future. Contributions are welcome!
§Example
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?
}
§Scalar Types
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 |
§Optional & Required
Types can be marked as optional by adding the ?
suffix.
Type | Syntax | Example |
---|---|---|
Required | T | String |
Optional | T? | String? |
§Repeating Types
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.
§Code generation
For usage with code generation, see [codegen].
Modules§
Enums§
Functions§
- parse
- Parse and validate an ESDL schema string.