use async_trait::async_trait;
use obzenflow_core::event::{ChainEvent, SystemEvent};
use obzenflow_core::journal::journal_error::JournalError;
use obzenflow_core::journal::journal_name::JournalName;
use obzenflow_core::journal::journal_owner::JournalOwner;
use obzenflow_core::journal::Journal;
use obzenflow_core::journal::RunManifest;
use std::sync::Arc;
use crate::replay::{ReplayArchive, ReplayError};
#[async_trait]
pub trait FlowJournalFactory: Send {
fn create_chain_journal(
&mut self,
name: JournalName,
owner: JournalOwner,
) -> Result<Arc<dyn Journal<ChainEvent>>, JournalError>;
fn create_system_journal(
&mut self,
name: JournalName,
owner: JournalOwner,
) -> Result<Arc<dyn Journal<SystemEvent>>, JournalError>;
fn write_run_manifest(&self, _manifest: &RunManifest) -> Result<(), JournalError> {
Ok(())
}
async fn replay_archive_from_env(
&mut self,
) -> Result<Option<Arc<dyn ReplayArchive>>, ReplayError> {
Ok(None)
}
}