// store.mbt
//! 事件存储抽象

///|
/// @event.EventMessage 记录类型定义

///|
/// 事件存储抽象
// pub trait EventStore {
//   /// 追加事件
//   append(self : Self, aggregate_id : Id, events : Array[@event.EventMessage[E]]) -> Unit raise

//   /// 加载事件
//   load(self : Self, aggregate_id : Id, after_version : Int) -> Array[
//     @event.EventMessage[E],
//   ] raise

//   /// 获取当前版本
//   current_version(self : Self, aggregate_id : Id) -> Int raise
// }
pub(all) struct EventStore[AggregateId, E] {
  append : (
    EventStore[AggregateId, E],
    AggregateId,
    Array[@event.EventMessage[AggregateId, E]],
  ) -> Unit raise EventStoreError
  load : (EventStore[AggregateId, E], AggregateId, Int32) -> Array[
    @event.EventMessage[AggregateId, E],
  ] raise EventStoreError
  current_version : (EventStore[AggregateId, E], AggregateId) -> Int32 raise EventStoreError
}