rollsum is based on bupsplit, which in turn is based on rsync chunking.

Interface liable to change.

https://docs.rs/rollsum

``` extern crate rollsum;

use std::env; use std::fs; use std::path::Path; use std::io::prelude::*;

pub fn main () { let args: Vec<_> = env::args().collect(); let mut file = fs::File::open(&Path::new(&args[1])).unwrap(); let mut buf = vec![]; file.readtoend(&mut buf).unwrap();

let mut ofs: usize = 0;
while ofs < buf.len() {
    let mut b = rollsum::Bup::new();
    if let Some(count) = b.find_chunk_edge(&buf[ofs..]) {
        ofs += count;
        println!("found edge at {}", ofs);
    } else {
        println!("end of the line!");
        break
    }
}

} ```