this repo has no description
1use cid::Cid; 2use iroh_car::CarHeader; 3use std::io::Write; 4 5pub fn write_varint<W: Write>(mut writer: W, mut value: u64) -> std::io::Result<()> { 6 loop { 7 let mut byte = (value & 0x7F) as u8; 8 value >>= 7; 9 if value != 0 { 10 byte |= 0x80; 11 } 12 writer.write_all(&[byte])?; 13 if value == 0 { 14 break; 15 } 16 } 17 Ok(()) 18} 19 20pub fn ld_write<W: Write>(mut writer: W, data: &[u8]) -> std::io::Result<()> { 21 write_varint(&mut writer, data.len() as u64)?; 22 writer.write_all(data)?; 23 Ok(()) 24} 25 26pub fn encode_car_header(root_cid: &Cid) -> Result<Vec<u8>, String> { 27 let header = CarHeader::new_v1(vec![*root_cid]); 28 let header_cbor = header 29 .encode() 30 .map_err(|e| format!("Failed to encode CAR header: {:?}", e))?; 31 let mut result = Vec::new(); 32 write_varint(&mut result, header_cbor.len() as u64) 33 .expect("Writing to Vec<u8> should never fail"); 34 result.extend_from_slice(&header_cbor); 35 Ok(result) 36}