From b192ec740d358d0e12eedd1308d006e080b3d8c2 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 13 Jan 2023 17:12:47 +0100 Subject: new starting with a new ebml impl --- ebml/src/write.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 ebml/src/write.rs (limited to 'ebml/src/write.rs') diff --git a/ebml/src/write.rs b/ebml/src/write.rs new file mode 100644 index 0000000..b294d44 --- /dev/null +++ b/ebml/src/write.rs @@ -0,0 +1,36 @@ +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) + } +} + -- cgit v1.2.3-70-g09d2