diff --git a/storage_engine/src/cursor.rs b/storage_engine/src/cursor.rs index 42584b7..b0ea017 100644 --- a/storage_engine/src/cursor.rs +++ b/storage_engine/src/cursor.rs @@ -121,12 +121,13 @@ pub trait CursorWithStoreHeader: PrimitiveCursor { async fn next(&mut self) -> Result>> where T: Decode { + let file_position = self.current_file_position().await?; let Some(entry_header) = self.next_entry_header().await? else { return Ok(None) }; let mut data_bytes: Vec = vec![0; entry_header.size_of_data()]; self.read_bytes(&mut data_bytes).await?; let entry: EntryDetailed = - EntryDetailed::decode(entry_header, self.header().number_of_columns, &mut data_bytes)?; + EntryDetailed::decode(entry_header, file_position, self.header().number_of_columns, &mut data_bytes)?; Ok(Some(entry)) } diff --git a/storage_engine/src/entry.rs b/storage_engine/src/entry.rs index 90d3dca..c628979 100644 --- a/storage_engine/src/entry.rs +++ b/storage_engine/src/entry.rs @@ -1,7 +1,7 @@ use bincode::{Decode, Encode}; use crate::binary_coding::{encode_sequence, encode_sequence_with_sizes, decode_sequence}; -use crate::storage_engine::Result; +use crate::storage_engine::{Result, FilePosition}; use crate::error::{Error, DecodeErrorKind}; use crate::entry_header::{EntryHeader, EntryHeaderWithDataSize}; @@ -14,6 +14,7 @@ pub struct Entry { #[derive(Debug)] pub struct EntryDetailed { pub header: EntryHeaderWithDataSize, + pub file_position: FilePosition, pub data: Vec, } @@ -40,11 +41,11 @@ impl Entry { } impl EntryDetailed { - pub fn decode(header: EntryHeaderWithDataSize, number_of_columns: usize, bytes: &[u8]) -> Result + pub fn decode(header: EntryHeaderWithDataSize, file_position: FilePosition, number_of_columns: usize, bytes: &[u8]) -> Result where T: Decode { let data = decode_sequence::(number_of_columns, bytes) .map_err(|e| Error::DecodeError(DecodeErrorKind::EntryData, e))?; - Ok(EntryDetailed { header, data }) + Ok(EntryDetailed { header, file_position, data }) } }