use anyhow::bail; pub mod matroska; pub mod read; pub mod write; #[derive(Debug, Clone)] pub enum Master { Start, End, } pub trait ValueFromBuf: Sized { fn from_buf(buf: &[u8]) -> anyhow::Result; } impl ValueFromBuf for u64 { fn from_buf(buf: &[u8]) -> anyhow::Result { // if buf.len() != 8 { // bail!("u64 is not 64 bits long") // } // Ok((buf[0] as u64) << 24 // | (buf[1] as u64) << 16 // | (buf[2] as u64) << 8 // | (buf[3] as u64) << 0) if buf.len() > 8 { bail!("u64 too big") } let mut val = 0u64; for byte in buf { val <<= 8; val |= *byte as u64; } Ok(val) } } impl ValueFromBuf for Vec { fn from_buf(buf: &[u8]) -> anyhow::Result { Ok(buf.to_vec()) } } impl ValueFromBuf for String { fn from_buf(buf: &[u8]) -> anyhow::Result { Ok(String::from_utf8(Vec::from(buf))?) } }