use crate::error::Result;
use crate::types::EventId;
pub trait EventLogIterator: Iterator<Item = Result<(EventId, Vec<u8>)>> + Send {}
impl<T: Iterator<Item = Result<(EventId, Vec<u8>)>> + Send> EventLogIterator for T {}
pub trait EventLog: Send + Sync {
fn append_with_id(&self, event_id: EventId, event_bytes: &[u8]) -> Result<()>;
fn append_batch_with_ids(&self, first_event_id: EventId, events: &[Vec<u8>]) -> Result<()>;
fn next_event_id(&self) -> Result<EventId>;
fn iter_range(&self, start: EventId, end: Option<EventId>)
-> Result<Box<dyn EventLogIterator>>;
fn get(&self, event_id: EventId) -> Result<Option<Vec<u8>>>;
fn delete_range(&self, start: EventId, end: EventId) -> Result<usize>;
fn rotate(&self) -> Result<std::path::PathBuf>;
fn oldest_event_id(&self) -> Result<EventId>;
fn newest_event_id(&self) -> Result<EventId>;
fn sync(&self) -> Result<()>;
fn stats(&self) -> Result<EventLogStats>;
}
#[derive(Debug, Clone)]
pub struct EventLogStats {
pub event_count: u64,
pub oldest_event_id: EventId,
pub newest_event_id: EventId,
pub total_bytes: u64,
pub file_count: usize,
}