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