···2222 });
2323}
24242525+#[inline(always)]
2626+fn ser(block: Vec<u8>) -> Vec<u8> {
2727+ let s = block.len();
2828+ usize::to_ne_bytes(s).to_vec()
2929+}
3030+2531async fn drive_car(filename: impl AsRef<Path>) -> usize {
2632 let reader = tokio::fs::File::open(filename).await.unwrap();
2733 let reader = tokio::io::BufReader::new(reader);
28342935 let mut driver =
3030- match Driver::load_car(reader, |block| block.len().to_le_bytes().to_vec(), 1024)
3636+ match Driver::load_car(reader, ser, 1024)
3137 .await
3238 .unwrap()
3339 .unwrap()
+7-1
benches/non-huge-cars.rs
···3232 });
3333}
34343535+#[inline(always)]
3636+fn ser(block: Vec<u8>) -> Vec<u8> {
3737+ let s = block.len();
3838+ usize::to_ne_bytes(s).to_vec()
3939+}
4040+3541async fn drive_car(bytes: &[u8]) -> usize {
3636- let mut driver = match Driver::load_car(bytes, |block| block.len().to_le_bytes().to_vec(), 32)
4242+ let mut driver = match Driver::load_car(bytes, ser, 32)
3743 .await
3844 .unwrap()
3945 {
+4-3
examples/read-file/main.rs
···2424 let reader = tokio::io::BufReader::new(reader);
25252626 let (commit, mut driver) = match DriverBuilder::new()
2727- .with_block_processor(|block| block.len().to_ne_bytes().to_vec().into())
2727+ .with_block_processor(|block| block.len().to_ne_bytes().to_vec())
2828 .load_car(reader)
2929 .await?
3030 {
3131- Driver::Memory(commit, mem_driver) => (commit, mem_driver),
3232- Driver::Disk(_) => panic!("this example doesn't handle big CARs"),
3131+ None => todo!(),
3232+ Some(Driver::Memory(commit, mem_driver)) => (commit, mem_driver),
3333+ Some(Driver::Disk(_)) => panic!("this example doesn't handle big CARs"),
3334 };
34353536 log::info!("got commit: {commit:?}");
+6-6
readme.md
···8686static GLOBAL: MiMalloc = MiMalloc;
8787```
88888989-- 450MiB CAR file: `1.1s` (-15%)
9090-- 128MiB: `310ms` (-13%)
9191-- 5.0MiB: `6.1ms` (-10%)
9292-- 279KiB: `160us` (-5%)
9393-- 3.4KiB: `5.7us` (-9%)
9494-- empty: `660ns` (-7%)
8989+- 450MiB CAR file: `1.2s` (-8%)
9090+- 128MiB: `300ms` (-14%)
9191+- 5.0MiB: `6.0ms` (-12%)
9292+- 279KiB: `140us` (-21%)
9393+- 3.4KiB: `4.7us` (-10%)
9494+- empty: `640ns` (-4%)
95959696processing CARs requires buffering blocks, so it can consume a lot of memory. repo-stream's in-memory driver has minimal memory overhead, but there are two ways to make it work with less mem (you can do either or both!)
9797