use super::{data_block::DataBlock, DataFile};
use crate::error::Error;
impl DataFile {
pub async fn read(&mut self, id: &str) -> Result<Option<Vec<u8>>, Error> {
if let Some(data_block) = self.data_blocks.get(id).cloned() {
let DataBlock {
padding,
chunk_offsets,
} = data_block;
let mut bytes = Vec::with_capacity(
(chunk_offsets.len() * self.options_store.chunk_size()) - padding,
);
for (index, chunk_offset) in chunk_offsets.iter().enumerate() {
bytes.append(
&mut self
.read_chunk(
*chunk_offset,
if index == chunk_offsets.len() - 1 {
padding
} else {
0
},
)
.await?,
);
}
return Ok(Some(bytes));
}
Ok(None)
}
}