diff options
Diffstat (limited to 'src/chunker.rs')
-rw-r--r-- | src/chunker.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/chunker.rs b/src/chunker.rs index f424833..eeeed8d 100644 --- a/src/chunker.rs +++ b/src/chunker.rs @@ -2,29 +2,32 @@ use crate::checksummer::sha256; use crate::chunk::DataChunk; use crate::chunkmeta::ChunkMeta; use std::io::prelude::*; +use std::path::{Path, PathBuf}; pub struct Chunker { chunk_size: usize, buf: Vec<u8>, + filename: PathBuf, handle: std::fs::File, } #[derive(Debug, thiserror::Error)] pub enum ChunkerError { - #[error(transparent)] - IoError(#[from] std::io::Error), + #[error("failed to read file {0}: {1}")] + FileRead(PathBuf, std::io::Error), } pub type ChunkerResult<T> = Result<T, ChunkerError>; impl Chunker { - pub fn new(chunk_size: usize, handle: std::fs::File) -> Self { + pub fn new(chunk_size: usize, handle: std::fs::File, filename: &Path) -> Self { let mut buf = vec![]; buf.resize(chunk_size, 0); Self { chunk_size, buf, handle, + filename: filename.to_path_buf(), } } @@ -32,7 +35,10 @@ impl Chunker { let mut used = 0; loop { - let n = self.handle.read(&mut self.buf.as_mut_slice()[used..])?; + let n = self + .handle + .read(&mut self.buf.as_mut_slice()[used..]) + .map_err(|err| ChunkerError::FileRead(self.filename.to_path_buf(), err))?; used += n; if n == 0 || used == self.chunk_size { break; |