Skip to main content

tf_demo_parser/demo/message/
prefetch.rs

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