15 个不稳定版本 (6 个重大更改)
0.8.0 | 2023年11月21日 |
---|---|
0.7.0 | 2023年11月10日 |
0.5.0 | 2022年1月20日 |
0.4.0 | 2022年1月1日 |
0.1.3 | 2021年11月28日 |
#1764 在 异步
每月99 次下载
在 8 crates 中使用
27KB
389 行
Thalo 是一个事件源运行时,通过 wasmtime 利用 WebAssembly (wasm) 的力量,结合 sled 作为嵌入式事件存储。它设计用于处理使用编译的聚合 wasm 组件的命令,并持久化生成的事件,有效地管理从先前事件重建聚合状态。
计数器聚合示例
此示例展示了一个基本的计数器聚合,允许按一定数量增加计数。
#
use serde::{Deserialize, Serialize};
use thalo::{events, export_aggregate, Aggregate, Apply, Command, Event, Handle};
export_aggregate!(Counter);
pub struct Counter {
count: u64,
}
impl Aggregate for Counter {
type Command = CounterCommand;
type Event = CounterEvent;
fn init(_id: String) -> Self {
Counter { count: 0 }
}
}
#[derive(Command, Deserialize)]
pub enum CounterCommand {
Increment { amount: u64 },
}
impl Handle<CounterCommand> for Counter {
type Error = Infallible;
fn handle(&self, cmd: CounterCommand) -> Result<Vec<CounterEvent>, Self::Error> {
match cmd {
CounterCommand::Increment { amount } => events![Incremented { amount }],
}
}
}
#[derive(Event, Serialize, Deserialize)]
pub enum CounterEvent {
Incremented(Incremented),
}
#[derive(Serialize, Deserialize)]
pub struct Incremented {
pub amount: u64,
}
impl Apply<Incremented> for Counter {
fn apply(&mut self, event: Incremented) {
self.count += event.amount;
}
}
依赖
~0.9–1.8MB
~38K SLoC