tf_demo_parser/demo/packet/
consolecmd.rs

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