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}