1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 18:24:05 +02:00

code cleanup

This commit is contained in:
Robin Appelman 2019-02-28 23:52:00 +01:00
commit 0bf09c95c9
14 changed files with 39 additions and 93 deletions

View file

@ -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 {

View file

@ -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;

View file

@ -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 {

View file

@ -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()))

View file

@ -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;

View file

@ -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;

View file

@ -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 {

View file

@ -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,

View file

@ -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 {

View file

@ -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)
} }

View file

@ -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};

View file

@ -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,

View file

@ -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;

View file

@ -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);
//}