#schema #codegen #event-sourcing #cqrs #esdl


Event-sourcing Schema Definition Language parser

6 releases (breaking)

0.6.0 Dec 12, 2022
0.4.0 Jan 30, 2022
0.3.0 Jan 28, 2022
0.2.1 Jan 27, 2022
0.1.0 Jan 24, 2022

#282 in Data structures

42 downloads per month




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), 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:

Additional languages may be added in the future. Contributions are welcome!


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.


~53K SLoC