mkv_element/
supplement.rs1use std::ops::Deref;
2
3use crate::base::VInt64;
4use crate::element::Element;
5use crate::functional::*;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq)]
15pub struct Void {
16 pub size: u64,
18}
19impl Element for Void {
20 const ID: VInt64 = VInt64::from_encoded(0xEC);
21 fn decode_body(buf: &mut &[u8]) -> crate::Result<Self> {
22 let len = buf.len() as u64;
23 buf.advance(buf.len());
24 Ok(Self { size: len })
25 }
26 fn encode_body<B: BufMut>(&self, buf: &mut B) -> crate::Result<()> {
27 buf.append_slice(&vec![0; self.size as usize]);
28 Ok(())
29 }
30}
31
32#[derive(Debug, Clone, Copy, PartialEq, Eq)]
38pub struct Crc32(pub u32);
39impl Deref for Crc32 {
40 type Target = u32;
41 fn deref(&self) -> &Self::Target {
42 &self.0
43 }
44}
45impl Element for Crc32 {
46 const ID: VInt64 = VInt64::from_encoded(0xBF);
47 fn decode_body(buf: &mut &[u8]) -> crate::Result<Self> {
48 let buf = <[u8; 4]>::decode(buf)?;
49 Ok(Self(u32::from_le_bytes(buf)))
50 }
51 fn encode_body<B: BufMut>(&self, buf: &mut B) -> crate::Result<()> {
52 buf.append_slice(&self.0.to_le_bytes());
53 Ok(())
54 }
55}