# carbites Chunking for [CAR files](https://ipld.io/specs/transport/car/). Split a single CAR into multiple CARs. Original implementation in [go-carbites](https://github.com/alanshaw/go-carbites). ## Usage Carbites supports treewalk strategy: **Treewalk** - walks the DAG to pack sub-graphs into each CAR file that is output. Every CAR file has the _same_ root CID but contains a different portion of the DAG. The DAG is traversed from the root node and each block is decoded and links extracted in order to determine which sub-graph to include in each CAR. ```rust use carbites::{new_splitter, CarSplitter, Strategy}; use std::io::Write; fn main() -> Result<(), Box> { let file = std::fs::File::open("examples/test.car")?; let mut splitter = new_splitter(Strategy::Treewalk, file, 1024); let mut i = 0; while let Some(chunk) = splitter.next_chunk()? { let mut file = std::fs::File::create(format!("target/chunk-{}.car", i))?; file.write(&chunk)?; i += 1; } Ok(()) } ``` ## Todo - [ ] Add support for simple strategy (see below) **Simple** - fast but naive, only the first CAR output has a root CID, subsequent CARs have a placeholder "empty" CID. The first CAR output has roots in the header, subsequent CARs have an empty root CID [`bafkqaaa`](https://cid.ipfs.io/#bafkqaaa) as [recommended](https://ipld.io/specs/transport/car/carv1/#number-of-roots). ## License Licensed under either of * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or https://www.apache.org/licenses/LICENSE-2.0) * MIT license ([LICENSE-MIT](LICENSE-MIT) or https://opensource.org/licenses/MIT) at your option.