use std::io;
use bao_tree::{
io::{
outboard::PreOrderOutboard,
round_up_to_chunks,
sync::{decode_ranges, encode_ranges_validated, valid_ranges, CreateOutboard},
},
BlockSize, ByteRanges, ChunkRanges,
};
const BLOCK_SIZE: BlockSize = BlockSize::from_chunk_log(4);
fn main() -> io::Result<()> {
let file = std::fs::File::open("video.mp4")?;
let ob = PreOrderOutboard::<Vec<u8>>::create(&file, BLOCK_SIZE)?;
let ranges = ByteRanges::from(0..100000);
let ranges = round_up_to_chunks(&ranges);
let mut to_client = vec![];
encode_ranges_validated(&file, &ob, &ranges, &mut to_client)?;
let from_server = io::Cursor::new(to_client);
let root = ob.root;
let tree = ob.tree;
let mut decoded = std::fs::File::create("copy.mp4")?;
let mut ob = PreOrderOutboard {
tree,
root,
data: vec![],
};
decode_ranges(from_server, &ranges, &mut decoded, &mut ob)?;
for range in valid_ranges(&ob, &decoded, &ChunkRanges::all()) {
println!("{range:?}");
}
Ok(())
}