mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-03 18:24:05 +02:00
code cleanup
This commit is contained in:
parent
e7b9f5ecbb
commit
0bf09c95c9
14 changed files with 39 additions and 93 deletions
|
|
@ -1,6 +1,4 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead};
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
|
||||||
|
|
||||||
#[derive(BitRead, Debug, PartialEq)]
|
#[derive(BitRead, Debug, PartialEq)]
|
||||||
pub struct Header {
|
pub struct Header {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
|
use bitstream_reader::{BitBuffer, BitStream, LittleEndian};
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result};
|
|
||||||
|
|
||||||
pub mod gamevent;
|
pub mod gamevent;
|
||||||
pub mod header;
|
pub mod header;
|
||||||
pub mod message;
|
pub mod message;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream, ReadResult};
|
use crate::{Stream, ReadResult};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct ConsoleCmdPacket {
|
pub struct ConsoleCmdPacket {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::BitRead;
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream, ReadResult};
|
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
||||||
use crate::demo::sendprop::{SendPropDefinition, SendPropFlag, SendPropType};
|
use crate::demo::sendprop::{SendPropDefinition, SendPropFlag, SendPropType};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(BitRead, Debug)]
|
||||||
pub struct ServerClass {
|
pub struct ServerClass {
|
||||||
id: u32,
|
id: u16,
|
||||||
name: String,
|
name: String,
|
||||||
data_table: String,
|
data_table: String,
|
||||||
}
|
}
|
||||||
|
|
@ -35,7 +35,7 @@ impl Parse for DataTablePacket {
|
||||||
let mut tables = vec![];
|
let mut tables = vec![];
|
||||||
while packet_data.read_bool()? {
|
while packet_data.read_bool()? {
|
||||||
let needs_decoder = packet_data.read_bool()?;
|
let needs_decoder = packet_data.read_bool()?;
|
||||||
let name = packet_data.read_string(None)?;
|
let name: String = packet_data.read()?;
|
||||||
let prop_count = packet_data.read_int(10)?;
|
let prop_count = packet_data.read_int(10)?;
|
||||||
|
|
||||||
let mut array_element_prop = None;
|
let mut array_element_prop = None;
|
||||||
|
|
@ -78,17 +78,7 @@ impl Parse for DataTablePacket {
|
||||||
// TODO linked tables?
|
// TODO linked tables?
|
||||||
|
|
||||||
let server_class_count = packet_data.read_int(16)?;
|
let server_class_count = packet_data.read_int(16)?;
|
||||||
let mut server_classes = Vec::with_capacity(server_class_count);
|
let server_classes = packet_data.read_sized(server_class_count)?;
|
||||||
for i in 0..server_class_count {
|
|
||||||
let id = packet_data.read_int(16)?;
|
|
||||||
let name = packet_data.read_string(None)?;
|
|
||||||
let data_table = packet_data.read_string(None)?;
|
|
||||||
server_classes.push(ServerClass {
|
|
||||||
id,
|
|
||||||
name,
|
|
||||||
data_table,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if packet_data.bits_left() > 7 {
|
if packet_data.bits_left() > 7 {
|
||||||
Err(ParseError::DataRemaining(packet_data.bits_left()))
|
Err(ParseError::DataRemaining(packet_data.bits_left()))
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead};
|
||||||
use enum_primitive_derive::Primitive;
|
use enum_primitive_derive::Primitive;
|
||||||
use num_traits::FromPrimitive;
|
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
use crate::{Parse, ParserState, Result, Stream};
|
||||||
|
|
||||||
use self::consolecmd::ConsoleCmdPacket;
|
use self::consolecmd::ConsoleCmdPacket;
|
||||||
use self::datatable::DataTablePacket;
|
use self::datatable::DataTablePacket;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::{Parse, ParserState, Result, Stream, ReadResult};
|
use crate::{Stream, ReadResult};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct StopPacket;
|
pub struct StopPacket;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream, ReadResult};
|
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
||||||
use std::fmt;
|
use crate::demo::sendprop::SendPropFlag::Exclude;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct StringTable {
|
pub struct StringTable {
|
||||||
|
|
@ -15,21 +17,14 @@ pub struct StringTable {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for StringTable {
|
impl BitRead<LittleEndian> for StringTable {
|
||||||
fn read(stream: &mut Stream) -> ReadResult <Self> {
|
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
||||||
let name = stream.read_string(None)?;
|
let name = stream.read()?;
|
||||||
let entry_count: u32 = stream.read_int(16)?;
|
let entry_count = stream.read_int(16)?;
|
||||||
let mut entries = Vec::with_capacity(entry_count as usize);
|
let entries = stream.read_sized(entry_count as usize)?;
|
||||||
for _ in 0..entry_count {
|
|
||||||
entries.push(StringTableEntry::read(stream)?);
|
|
||||||
}
|
|
||||||
|
|
||||||
let client_entries = if stream.read_bool()? {
|
let client_entries = if stream.read_bool()? {
|
||||||
let count = stream.read_int(16)?;
|
let count = stream.read_int(16)?;
|
||||||
let mut vec = Vec::with_capacity(count);
|
Some(stream.read_sized(count)?)
|
||||||
for _ in 0..count {
|
|
||||||
vec.push(StringTableEntry::read(stream)?);
|
|
||||||
}
|
|
||||||
Some(vec)
|
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
@ -46,22 +41,19 @@ impl BitRead<LittleEndian> for StringTable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct StringTableEntry {
|
#[derive(BitRead)]
|
||||||
text: String,
|
#[endianness = "LittleEndian"]
|
||||||
extra_data: Option<Stream>,
|
pub struct ExtraData {
|
||||||
|
len: u16,
|
||||||
|
#[size = "len * 8"]
|
||||||
|
data: Stream,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BitRead<LittleEndian> for StringTableEntry {
|
#[derive(BitRead)]
|
||||||
fn read(stream: &mut Stream) -> ReadResult<Self> {
|
#[endianness = "LittleEndian"]
|
||||||
let text = stream.read_string(None)?;
|
pub struct StringTableEntry {
|
||||||
let extra_data = if stream.read_bool()? {
|
text: String,
|
||||||
let byte_len: usize = stream.read_int(16)?;
|
extra_data: Option<ExtraData>,
|
||||||
Some(stream.read_bits(byte_len * 8)?)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
Ok(StringTableEntry { text, extra_data })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Debug for StringTableEntry {
|
impl fmt::Debug for StringTableEntry {
|
||||||
|
|
@ -70,9 +62,9 @@ impl fmt::Debug for StringTableEntry {
|
||||||
None => write!(f, "Table Entry: '{}'", self.text),
|
None => write!(f, "Table Entry: '{}'", self.text),
|
||||||
Some(extra_data) => write!(
|
Some(extra_data) => write!(
|
||||||
f,
|
f,
|
||||||
"Table Entry: '{}' with {} bits of extra data",
|
"StringTableEntry{{ '{}' with {} bits of extra data }}",
|
||||||
self.text,
|
self.text,
|
||||||
extra_data.bit_len()
|
extra_data.len
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -90,11 +82,9 @@ impl Parse for StringTablePacket {
|
||||||
let start = stream.pos();
|
let start = stream.pos();
|
||||||
let length: usize = stream.read_int(32)?;
|
let length: usize = stream.read_int(32)?;
|
||||||
let mut packet_data = stream.read_bits(length * 8)?;
|
let mut packet_data = stream.read_bits(length * 8)?;
|
||||||
let count: u32 = packet_data.read_int(8)?;
|
let count: usize = packet_data.read_int(8)?;
|
||||||
let mut tables = Vec::with_capacity(count as usize);
|
let tables = packet_data.read_sized(count)?;
|
||||||
for _ in 0..count {
|
|
||||||
tables.push(StringTable::read(&mut packet_data)?);
|
|
||||||
}
|
|
||||||
if packet_data.bits_left() > 7 {
|
if packet_data.bits_left() > 7 {
|
||||||
Err(ParseError::DataRemaining(packet_data.bits_left()))
|
Err(ParseError::DataRemaining(packet_data.bits_left()))
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
use bitstream_reader::{BitRead};
|
use bitstream_reader::{BitRead};
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
|
||||||
|
|
||||||
#[derive(BitRead, Debug)]
|
#[derive(BitRead, Debug)]
|
||||||
pub struct SyncTickPacket {
|
pub struct SyncTickPacket {
|
||||||
tick: u32,
|
tick: u32,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream, ReadResult};
|
use crate::{Stream, ReadResult};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct UserCmdPacket {
|
pub struct UserCmdPacket {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
use std::error::Error;
|
|
||||||
|
|
||||||
use bitstream_reader::{ReadError, BitRead, LittleEndian};
|
use bitstream_reader::{ReadError, BitRead, LittleEndian};
|
||||||
|
|
||||||
use crate::demo::header::Header;
|
use crate::demo::header::Header;
|
||||||
|
|
@ -43,7 +41,7 @@ pub trait Parse: Sized {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: BitRead<LittleEndian>> Parse for T {
|
impl<T: BitRead<LittleEndian>> Parse for T {
|
||||||
fn parse(stream: &mut Stream, _state: &ParserState) -> Result<Self> {
|
fn parse(stream: &mut Stream, state: &ParserState) -> Result<Self> {
|
||||||
Self::read(stream).map_err(ParseError::from)
|
Self::read(stream).map_err(ParseError::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,8 @@
|
||||||
use bitstream_reader::{BitRead, LittleEndian};
|
use bitstream_reader::{BitRead, LittleEndian};
|
||||||
use enum_primitive_derive::Primitive;
|
|
||||||
use enumflags2::BitFlags;
|
use enumflags2::BitFlags;
|
||||||
use enumflags2_derive::EnumFlags;
|
use enumflags2_derive::EnumFlags;
|
||||||
use num_traits::cast::FromPrimitive;
|
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
|
use crate::{ReadResult, Result, Stream};
|
||||||
|
|
||||||
use super::packet::datatable::SendTable;
|
use super::packet::datatable::SendTable;
|
||||||
use super::vector::{Vector, VectorXY};
|
use super::vector::{Vector, VectorXY};
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
use bitstream_reader::BitRead;
|
use bitstream_reader::BitRead;
|
||||||
|
|
||||||
use crate::{Parse, ParseError, ParserState, Result, Stream};
|
|
||||||
|
|
||||||
#[derive(BitRead, Debug)]
|
#[derive(BitRead, Debug)]
|
||||||
pub struct Vector {
|
pub struct Vector {
|
||||||
pub x: f32,
|
pub x: f32,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,3 @@
|
||||||
use std::error::Error;
|
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
pub use crate::demo::{
|
pub use crate::demo::{
|
||||||
parser::{DemoParser, Parse, ParseError, ParserState, Result},
|
parser::{DemoParser, Parse, ParseError, ParserState, Result},
|
||||||
Demo, Stream,
|
Demo, Stream,
|
||||||
|
|
@ -10,4 +7,3 @@ pub use bitstream_reader::Result as ReadResult;
|
||||||
|
|
||||||
mod demo;
|
mod demo;
|
||||||
mod state;
|
mod state;
|
||||||
mod test;
|
|
||||||
|
|
|
||||||
17
src/test.rs
17
src/test.rs
|
|
@ -1,17 +0,0 @@
|
||||||
use crate::*;
|
|
||||||
use std::fmt::Debug;
|
|
||||||
use std::fs;
|
|
||||||
|
|
||||||
//pub fn test_parse<'a, T: Parse<'a> + Debug + PartialEq>(path: &str, expected: T, offset: usize) {
|
|
||||||
// let file = fs::read(path).expect("Unable to read file");
|
|
||||||
// let demo = Demo::new(file);
|
|
||||||
// let stream: Stream = demo.get_stream();
|
|
||||||
// let mut parser = DemoParser::new(stream);
|
|
||||||
// let _ = parser.set_stream_pos(offset);
|
|
||||||
// let result = parser.read().unwrap();
|
|
||||||
// assert_eq!(expected, result);
|
|
||||||
// let end_pos = parser.stream_pos();
|
|
||||||
// let _ = parser.set_stream_pos(offset);
|
|
||||||
// let _ = parser.skip::<T>();
|
|
||||||
// assert_eq!(parser.stream_pos(), end_pos);
|
|
||||||
//}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue