use anyhow::{bail, Result}; use std::io::Write; pub struct EbmlWriter { inner: T, position: usize, } impl EbmlWriter { pub fn new(inner: T, position: usize) -> Self { Self { inner, position } } pub fn write(&mut self, data: &[u8]) -> Result<()> { self.inner.write_all(data)?; self.position += data.len(); Ok(()) } pub fn write_vint(&mut self, i: u64) -> Result<()> { if i > (1 << 56) - 1 { bail!("vint does not fit"); } let mut len = 1; while len <= 8 { if i < (1 << ((7 * len) - 1)) { break; } len += 1; } let mut bytes = i.to_be_bytes(); bytes[0] |= 1 << (8 - len); self.write(&bytes) } }