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

minor cleanup

This commit is contained in:
Robin Appelman 2019-08-12 13:44:48 +02:00
commit 65d55c9a26
5 changed files with 24 additions and 27 deletions

View file

@ -9,7 +9,7 @@ use crate::demo::gamevent::{
RawGameEvent, RawGameEvent,
}; };
use crate::demo::parser::ParseBitSkip; use crate::demo::parser::ParseBitSkip;
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream}; use crate::{GameEventError, Parse, ParseError, ParserState, ReadResult, Result, Stream};
fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> { fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<GameEventValue> {
Ok(match definition.kind { Ok(match definition.kind {
@ -20,7 +20,9 @@ fn read_event_value(stream: &mut Stream, definition: &GameEventEntry) -> Result<
GameEventValueType::Byte => GameEventValue::Byte(stream.read()?), GameEventValueType::Byte => GameEventValue::Byte(stream.read()?),
GameEventValueType::Boolean => GameEventValue::Boolean(stream.read()?), GameEventValueType::Boolean => GameEventValue::Boolean(stream.read()?),
GameEventValueType::Local => GameEventValue::Local, GameEventValueType::Local => GameEventValue::Local,
GameEventValueType::None => unreachable!(), GameEventValueType::None => {
return Err(ParseError::MalformedGameEvent(GameEventError::NoneValue))
}
}) })
} }
@ -46,7 +48,7 @@ impl Parse for GameEventMessage {
values, values,
} }
} }
None => unreachable!(), None => return Err(ParseError::MalformedGameEvent(GameEventError::UnknownType)),
}; };
let event = GameEvent::from_raw_event(raw_event)?; let event = GameEvent::from_raw_event(raw_event)?;
Ok(GameEventMessage { event }) Ok(GameEventMessage { event })

View file

@ -198,16 +198,14 @@ impl MessageHandler for Analyser {
fn handle_string_entry(&mut self, table: &String, _index: usize, entry: &StringTableEntry) { fn handle_string_entry(&mut self, table: &String, _index: usize, entry: &StringTableEntry) {
match table.as_str() { match table.as_str() {
"userinfo" => { "userinfo" => match (&entry.text, &entry.extra_data) {
match (&entry.text, &entry.extra_data) {
(Some(text), Some(data)) => { (Some(text), Some(data)) => {
if data.byte_len > 32 { if data.byte_len > 32 {
let _ = self.parse_user_info(text, data.data.clone()); let _ = self.parse_user_info(text, data.data.clone());
} }
} }
_ => {} //unreachable!("no userdata {}, {}", table, &entry.text) _ => {}
} },
}
_ => {} _ => {}
} }
} }

View file

@ -76,21 +76,22 @@ impl<T: MessageHandler> DemoHandler<T> {
self.state_handler self.state_handler
.handle_string_table_meta(table.get_table_meta()); .handle_string_table_meta(table.get_table_meta());
for (entry_index, entry) in table.entries.into_iter().enumerate() { for (entry_index, entry) in table.entries.into_iter().enumerate() {
self.handle_string_entry(&table.name, entry_index, entry); self.state_handler
.handle_string_entry(&table.name, entry_index, &entry);
self.analyser
.handle_string_entry(&table.name, entry_index, &entry);
} }
} }
fn handle_table_update(&mut self, table_id: u8, entries: Vec<(u16, StringTableEntry)>) { fn handle_table_update(&mut self, table_id: u8, entries: Vec<(u16, StringTableEntry)>) {
let table_name = self.string_table_names.get(table_id as usize); if let Some(table_name) = self.string_table_names.get(table_id as usize) {
match table_name {
Some(table_name) => {
let table_name = table_name.clone();
for (index, entry) in entries { for (index, entry) in entries {
self.handle_string_entry(&table_name, index as usize, entry); let index = index as usize;
self.state_handler
.handle_string_entry(table_name, index, &entry);
self.analyser.handle_string_entry(table_name, index, &entry);
} }
} }
_ => unreachable!("trying to update non existing table"),
}
} }
fn handle_data_table(&mut self, send_tables: Vec<SendTable>, server_classes: Vec<ServerClass>) { fn handle_data_table(&mut self, send_tables: Vec<SendTable>, server_classes: Vec<ServerClass>) {
@ -98,12 +99,6 @@ impl<T: MessageHandler> DemoHandler<T> {
.handle_data_table(send_tables, server_classes); .handle_data_table(send_tables, server_classes);
} }
fn handle_string_entry(&mut self, table: &String, index: usize, entries: StringTableEntry) {
self.state_handler
.handle_string_entry(table, index, &entries);
self.analyser.handle_string_entry(table, index, &entries);
}
fn handle_message(&mut self, message: Message) { fn handle_message(&mut self, message: Message) {
let message_type = message.get_message_type(); let message_type = message.get_message_type();
if ParserState::does_handle(message_type) { if ParserState::does_handle(message_type) {

View file

@ -60,6 +60,8 @@ pub enum ParseError {
#[derive(Debug)] #[derive(Debug)]
pub enum GameEventError { pub enum GameEventError {
IncorrectValueCount, IncorrectValueCount,
NoneValue,
UnknownType,
} }
impl From<ReadError> for ParseError { impl From<ReadError> for ParseError {

View file

@ -119,7 +119,7 @@ impl MessageHandler for ParserState {
} }
Err(_) => {} Err(_) => {}
}, },
_ => unreachable!("missing baseline"), _ => {}
}, },
_ => {} _ => {}
} }