aboutsummaryrefslogtreecommitdiff
path: root/ebml/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ebml/src/lib.rs')
-rw-r--r--ebml/src/lib.rs31
1 files changed, 31 insertions, 0 deletions
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<Self>;
+}
+
+impl ValueFromBuf for u64 {
+ fn from_buf(buf: &[u8]) -> anyhow::Result<Self> {
+ 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<u8> {
+ fn from_buf(buf: &[u8]) -> anyhow::Result<Self> {
+ Ok(buf.to_vec())
+ }
+}
+impl ValueFromBuf for String {
+ fn from_buf(buf: &[u8]) -> anyhow::Result<Self> {
+ Ok(String::from_utf8(Vec::from(buf))?)
+ }
+}
+impl ValueFromBuf for Master {
+ fn from_buf(_buf: &[u8]) -> anyhow::Result<Self> {
+ Ok(Master::Start)
+ }
+}