1use crate::{ContentInfo, Error, Result};
2
3#[derive(Debug, Clone)]
6pub struct ChunkCache {
7 offset: u64,
8 buffer: Vec<u8>,
9}
10
11impl ChunkCache {
12 pub fn new(offset: usize, buffer: Vec<u8>) -> Self {
14 Self {
15 offset: offset as u64,
16 buffer,
17 }
18 }
19
20 pub fn read(&self, content: &dyn ContentInfo) -> Result<&'_ [u8]> {
22 if content.len() > 0 {
23 assert!(
24 content.offset() >= self.offset,
25 "{} {}",
26 content.offset(),
27 self.offset
28 );
29 let offset = content.offset() - self.offset;
30 Ok(&self.buffer[offset as usize..(offset + content.len()) as usize])
31 } else {
32 Err(Error::Invalid("No data for this content.".into()))
33 }
34 }
35}