use futures::StreamExt;
use std::sync::Arc;
use writeahead::{SimpleFile, WriteAhead, WriteAheadOptions};
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
let mut wal = WriteAhead::<SimpleFile>::with_options(WriteAheadOptions {
log_dir: "./write_ahead".into(),
..Default::default()
});
wal.start()?; let wal = Arc::new(wal);
let handle = wal.writer()?;
let id = handle.write(b"hello".to_vec()).await?;
let more = handle
.write_batch(vec![b"a".to_vec(), b"b".to_vec()])
.await?;
println!("wrote {:?} and {:?}", id, more);
let record = wal.read(id.file_id, id.file_offset)?;
assert_eq!(record, b"hello");
let mut stream = wal.create_stream()?;
while let Some(entry) = stream.next().await {
let (id, record) = entry?;
println!("replayed {} bytes from {:?}", record.len(), id);
}
Ok(())
}