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.
esdl = "*"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 | 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.