tf_demo_parser/demo/packet/
consolecmd.rs1use 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}