pub enum TagType { Master, UnsignedInt, Integer, Utf8, Binary, Float, } macro_rules! define_ebml { ($master:ident { $($name:ident: $kind:ty = $id:literal),* }) => { pub enum $master { $($name($kind)),* } impl $master { } }; } // 0x1a45dfa3 define_ebml! { Ebml { EbmlVersion: u64 = 0x4286, EbmlReadVersion: u64 = 0x42f7, EbmlMaxIdLength: u64 = 0x42f2, EbmlMaxSizeLength: u64 = 0x42f3, DocType: String = 0x4282, DocTypeVersion: u64 = 0x4287, DocTypeReadVersion: u64 = 0x4285, DocTypeExtension: DocTypeExtension = 0x4281 } } define_ebml! { DocTypeExtension { Name: String = 0x4283, Version: u64 = 0x4284 } }