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