Skip to main content

tf_demo_parser/demo/packet/
consolecmd.rs

1use crate::demo::data::DemoTick;
2use crate::{ReadResult, Stream};
3#[cfg(feature = "write")]
4use bitbuffer::BitWrite;
5use bitbuffer::{BitRead, LittleEndian};
6use serde::{Deserialize, Serialize};
7
8#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
9#[derive(Debug, PartialEq, Serialize, Deserialize, Clone)]
10pub struct ConsoleCmdPacket {
11    pub tick: DemoTick,
12    pub command: String,
13}
14
15impl BitRead<'_, LittleEndian> for ConsoleCmdPacket {
16    fn read(stream: &mut Stream) -> ReadResult<Self> {
17        let tick = stream.read()?;
18        let len = stream.read_int::<usize>(32)?;
19        let mut packet_data = stream.read_bits(len * 8)?;
20        let command: String = packet_data.read()?;
21        Ok(ConsoleCmdPacket { tick, command })
22    }
23}
24
25#[cfg(feature = "write")]
26impl BitWrite<LittleEndian> for ConsoleCmdPacket {
27    fn write(&self, stream: &mut bitbuffer::BitWriteStream<LittleEndian>) -> ReadResult<()> {
28        self.tick.write(stream)?;
29        let len = self.command.len() as u32 + 1;
30        len.write(stream)?;
31        self.command.write(stream)?;
32        Ok(())
33    }
34}