use async_trait::async_trait;
use crate::{error::DomainResult as Result, persist::SerializedEvent};
#[async_trait]
pub trait EventReclaimer: Send + Sync {
async fn fetch_events(&self) -> Result<Vec<SerializedEvent>>;
async fn mark_reclaimed(&self, events: &[&SerializedEvent]) -> Result<()>;
async fn mark_failed(&self, events: &[&SerializedEvent], reason: &str) -> Result<()>;
async fn mark_handler_failed(
&self,
handler_name: &str,
events: &[&SerializedEvent],
reason: &str,
) -> Result<()>;
async fn mark_handler_success(
&self,
handler_name: &str,
events: &[&SerializedEvent],
) -> Result<()>;
}