diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-13 18:06:11 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-13 18:06:11 +0100 |
commit | 8fc4b9792044d82e729e8b4ef993c6391d711c5b (patch) | |
tree | ad69a04a83e876dce4ebb15513c69fad757483d8 /ebml/src/lib.rs | |
parent | b192ec740d358d0e12eedd1308d006e080b3d8c2 (diff) | |
download | jellything-8fc4b9792044d82e729e8b4ef993c6391d711c5b.tar jellything-8fc4b9792044d82e729e8b4ef993c6391d711c5b.tar.bz2 jellything-8fc4b9792044d82e729e8b4ef993c6391d711c5b.tar.zst |
started writing a proc_macro now
Diffstat (limited to 'ebml/src/lib.rs')
-rw-r--r-- | ebml/src/lib.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ebml/src/lib.rs b/ebml/src/lib.rs new file mode 100644 index 0000000..116b8e2 --- /dev/null +++ b/ebml/src/lib.rs @@ -0,0 +1,49 @@ +use crate::read::EbmlSize; + +use self::read::EbmlReader; +use anyhow::{bail, Result}; +use log::debug; + +pub mod matroska; +pub mod read; +pub mod write; + +#[derive(Debug, Clone)] +pub enum Master { + Start, + End, +} + +#[derive(Debug, Clone)] +pub enum MatroskaTag { + Ebml(Master), + EbmlVersion(u64), + EbmlReadVersion(u64), + EbmlMaxIdLength(u64), + EbmlMaxSizeLength(u64), + DocType(String), + DocTypeVersion(u64), + DocTypeReadVersion(u64), + DocTypeExtension(Master), +} + +impl EbmlReader { + pub fn read_tag(&mut self) -> Result<MatroskaTag> { + let id = self.read_tag_id()?; + let size = EbmlSize::from_vint(self.read_vint_len()?); + debug!("tag id={id:x}, size={size:?}"); + Ok(match id { + 0x1a45dfa3 => MatroskaTag::Ebml(Master::Start), + 0x4286 => MatroskaTag::EbmlVersion(self.read_vint()?), + 0x42f7 => MatroskaTag::EbmlReadVersion(self.read_vint()?), + 0x42f2 => MatroskaTag::EbmlMaxIdLength(self.read_vint()?), + 0x42f3 => MatroskaTag::EbmlMaxSizeLength(self.read_vint()?), + 0x4282 => MatroskaTag::DocType(self.read_utf8(size)?), + 0x4287 => MatroskaTag::DocTypeVersion(self.read_vint()?), + 0x4285 => MatroskaTag::DocTypeReadVersion(self.read_vint()?), + 0x4281 => MatroskaTag::DocTypeExtension(Master::Start), + + _ => bail!("thats not a tag we know..."), + }) + } +} |