use std::{
fmt::Debug,
io::{Cursor, Read, Seek, SeekFrom},
};
#[derive(Debug, Clone)]
pub struct ChunkCache {
offset: u64,
buffer: Cursor<Vec<u8>>,
}
impl ChunkCache {
pub fn new(offset: usize, buffer: Vec<u8>) -> Self {
Self {
offset: offset as u64,
buffer: Cursor::new(buffer),
}
}
}
impl Read for ChunkCache {
fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
self.buffer.read(buf)
}
}
impl Seek for ChunkCache {
fn seek(&mut self, pos: std::io::SeekFrom) -> std::io::Result<u64> {
let pos = match pos {
SeekFrom::Current(p) => SeekFrom::Current(p),
SeekFrom::Start(p) => SeekFrom::Start(p - self.offset),
SeekFrom::End(p) => SeekFrom::End(p),
};
self.buffer.seek(pos)
}
}