#[allow(unused_imports)]
use super::*;
use crate::{Error, Result};
use std::io::{Read, Seek, SeekFrom};
pub struct FileRangeReader {
file: std::fs::File,
}
impl FileRangeReader {
pub fn new(file_path: &str) -> Result<Self> {
let file = std::fs::File::open(file_path).map_err(Error::IOError)?;
Ok(Self { file })
}
}
impl ByteRangeReader for FileRangeReader {
type Error = Error;
fn read_range(
&mut self,
offset: u64,
length: u64,
) -> core::result::Result<Vec<u8>, Self::Error> {
self.file
.seek(SeekFrom::Start(offset))
.map_err(Error::IOError)?;
let mut buffer = vec![0u8; length as usize];
self.file.read_exact(&mut buffer).map_err(Error::IOError)?;
Ok(buffer)
}
}