tf_demo_parser/demo/message/
prefetch.rs1#[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}