tf_demo_parser/demo/message/
prefetch.rs

1use crate::demo::parser::{Encode, ParseBitSkip};
2use crate::{Parse, ParserState, Result, Stream};
3use bitbuffer::{BitWriteStream, LittleEndian};
4use serde::{Deserialize, Serialize};
5
6#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
7#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
8pub struct PreFetchMessage {
9    pub index: u16,
10}
11
12impl PreFetchMessage {
13    fn bit_size(protocol_version: u32) -> usize {
14        if protocol_version > 22 {
15            14
16        } else {
17            13
18        }
19    }
20}
21
22impl<'a> Parse<'a> for PreFetchMessage {
23    fn parse(stream: &mut Stream<'a>, state: &ParserState) -> Result<Self> {
24        let size = Self::bit_size(state.protocol_version);
25        Ok(PreFetchMessage {
26            index: stream.read_sized(size)?,
27        })
28    }
29}
30
31impl Encode for PreFetchMessage {
32    fn encode(&self, stream: &mut BitWriteStream<LittleEndian>, state: &ParserState) -> Result<()> {
33        let size = Self::bit_size(state.protocol_version);
34        stream.write_int(self.index, size)?;
35        Ok(())
36    }
37}
38
39impl<'a> ParseBitSkip<'a> for PreFetchMessage {
40    fn parse_skip(stream: &mut Stream<'a>, state: &ParserState) -> Result<()> {
41        let size = Self::bit_size(state.protocol_version);
42        stream.skip_bits(size)?;
43        Ok(())
44    }
45}