use async_trait::async_trait;
mod file_log;
pub use file_log::FileLog;
pub type Offset = u64;
pub type Bytes = Vec<u8>;
struct Record {
value_length: u64,
value: Bytes,
}
#[derive(Debug)]
pub enum LogError {
IoError(std::io::Error),
IndexOutOfBounds,
}
#[async_trait]
pub trait Log {
async fn append(&self, entry: Bytes) -> Result<Offset, LogError>;
async fn read(&self, offset: Offset) -> Result<(Bytes, Offset), LogError>;
async fn batch_read(&self, offset: Offset, max_records: usize) -> Result<(Vec<Bytes>, Offset), LogError>;
}