binary_cookies/decode/
meta.rs1use oval::Buffer;
2use winnow::Parser;
3
4use super::{DecodeResult, StreamIn};
5use crate::{
6 cookie::{BinaryCookies, Checksum, Metadata},
7 error::Result,
8};
9
10pub 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}