use std::io::Read; use crate::{Error, crypto::RepoConfig}; /// Splits a byte stream into content-defined chunks with FastCDC. /// /// Content-defined boundaries mean that an insertion or deletion early in /// a file only changes the chunks around the edit, so unchanged content /// keeps deduplicating across snapshots. pub(crate) fn chunks( source: impl Read, config: &RepoConfig, ) -> impl Iterator, Error>> { fastcdc::v2020::StreamCDC::new(source, config.chunk_min, config.chunk_avg, config.chunk_max) .map(|result| match result { Ok(chunk) => Ok(chunk.data), Err(fastcdc::v2020::Error::IoError(err)) => Err(Error::IO(err)), Err(err) => Err(Error::Chunking(err.to_string())), }) }