binary_cookies/sync/
meta.rs1use std::io::Read;
2
3use crate::{
4 cookie::{Checksum, Metadata},
5 decode::{meta::MetaFsm, DecodeResult},
6 error::Result,
7};
8
9#[derive(Clone, Copy)]
10#[derive(Debug)]
11#[derive(Default)]
12#[derive(PartialEq, Eq, PartialOrd, Ord)]
13pub struct MetaDecoder<R: Read> {
14 pub(crate) rd: R,
15}
16
17impl<R: Read> MetaDecoder<R> {
18 pub fn decode(&mut self) -> Result<(Checksum, Option<Metadata>)> {
19 let mut fsm = MetaFsm::new();
20 loop {
21 self.rd
22 .read_exact(fsm.buffer.space())?;
23 let count = fsm.buffer.available_space();
24 fsm.buffer.fill(count);
25 match fsm.process()? {
26 DecodeResult::Continue(fsm_) => {
27 fsm = fsm_;
28 continue;
29 },
30 DecodeResult::Done(done) => return Ok(done),
31 }
32 }
33 }
34}