binary_cookies/decode/
meta.rs

1use oval::Buffer;
2use winnow::Parser;
3
4use super::{DecodeResult, StreamIn};
5use crate::{
6    cookie::{BinaryCookies, Checksum, Metadata},
7    error::Result,
8};
9
10/// The meta relative file start offset
11pub type MetaOffset = u64;
12
13#[derive(Clone)]
14#[derive(Debug)]
15pub struct MetaFsm {
16    pub(crate) buffer: Buffer,
17}
18
19impl Default for MetaFsm {
20    fn default() -> Self {
21        Self::new()
22    }
23}
24
25impl MetaFsm {
26    const BUF_SIZE: usize = 4 + 8 + 75;
27
28    pub fn new() -> Self {
29        Self {
30            buffer: Buffer::with_capacity(Self::BUF_SIZE),
31        }
32    }
33
34    pub fn process(mut self) -> Result<DecodeResult<Self, (Checksum, Option<Metadata>)>> {
35        let mut input: StreamIn = StreamIn::new(self.buffer.data());
36
37        let e = match BinaryCookies::decode_tail.parse_next(&mut input) {
38            Ok((checksum, meta)) => {
39                return Ok(DecodeResult::Done((checksum, meta)));
40            },
41            Err(e) => e,
42        };
43        mode_err! {self, e, self.buffer}
44    }
45}