Skip to content
/ esdl Public

Event-sourcing Schema Definition Language

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

thalo-rs/esdl

Repository files navigation

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

esdl = "*"

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.