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.
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
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 |
i64 |
number |
Float |
f64 |
number |
Bool |
bool |
boolean |
Timestamp |
DateTime<FixedOffset> |
Date |
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.