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

#349 in Programming languages

MIT/Apache

48KB
1K SLoC

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:

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.

Dependencies

~2.4–3.5MB
~69K SLoC