From 36e91c20eb59e76d5aeb35e644e7fb391f346dc6 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 13 Jan 2023 20:21:45 +0100 Subject: proc macro works --- ebml/src/lib.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'ebml/src/lib.rs') diff --git a/ebml/src/lib.rs b/ebml/src/lib.rs index 116b8e2..acebae3 100644 --- a/ebml/src/lib.rs +++ b/ebml/src/lib.rs @@ -47,3 +47,34 @@ impl EbmlReader { }) } } + +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) + } +} +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))?) + } +} +impl ValueFromBuf for Master { + fn from_buf(_buf: &[u8]) -> anyhow::Result { + Ok(Master::Start) + } +} -- cgit v1.2.3-70-g09d2