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

more propnames

This commit is contained in:
Robin Appelman 2022-04-09 19:44:22 +02:00
commit b9a9d2c2c1
5 changed files with 29376 additions and 5390 deletions

View file

@ -26,7 +26,7 @@ path = "src/bin/schema.rs"
required-features = ["schema"] required-features = ["schema"]
[dependencies] [dependencies]
bitbuffer = { version = "0.10", features = ["serde"] } bitbuffer = { version = "0.10.5", features = ["serde"] }
num_enum = "0.5" num_enum = "0.5"
num-traits = "0.2" num-traits = "0.2"
enumflags2 = { version = "0.7", features = ["serde"] } enumflags2 = { version = "0.7", features = ["serde"] }

4
codegen/Cargo.lock generated
View file

@ -85,9 +85,9 @@ dependencies = [
[[package]] [[package]]
name = "bitbuffer" name = "bitbuffer"
version = "0.10.3" version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650346fecc0be01be480d078b014cc0deb000d26790a53f6ef854dda35f87d62" checksum = "2a1011b65695f83be55d63eadf310a4c28da66550b196bca815eb94ec8885da8"
dependencies = [ dependencies = [
"bitbuffer_derive", "bitbuffer_derive",
"err-derive", "err-derive",

View file

@ -1,6 +1,7 @@
use fnv::{FnvHashMap, FnvHashSet}; use fnv::{FnvHashMap, FnvHashSet};
use proc_macro2::TokenStream; use proc_macro2::TokenStream;
use quote::quote; use quote::quote;
use std::collections::HashSet;
use tf_demo_parser::demo::message::Message; use tf_demo_parser::demo::message::Message;
use tf_demo_parser::demo::packet::datatable::{ParseSendTable, SendTableName, ServerClass}; use tf_demo_parser::demo::packet::datatable::{ParseSendTable, SendTableName, ServerClass};
use tf_demo_parser::demo::parser::MessageHandler; use tf_demo_parser::demo::parser::MessageHandler;
@ -41,12 +42,28 @@ impl MessageHandler for PropAnalyzer {
parse_tables: &[ParseSendTable], parse_tables: &[ParseSendTable],
_server_classes: &[ServerClass], _server_classes: &[ServerClass],
) { ) {
let mut numeric_tables: FnvHashSet<String> = HashSet::default();
for table in parse_tables { for table in parse_tables {
for prop_def in &table.props { for prop_def in &table.props {
self.prop_names.insert( self.prop_names.insert(
prop_def.identifier(), prop_def.identifier(),
(table.name.clone(), prop_def.name.clone()), (table.name.clone(), prop_def.name.clone()),
); );
let name = prop_def.name.as_str();
if name.len() == 3 && table.name.as_str().len() > 3 {
if let Ok(_) = name.parse::<u8>() {
numeric_tables.insert(table.name.to_string());
}
}
}
}
for table in numeric_tables {
for num in 0..256 {
let prop_name = SendPropName::from(format!("{:03}", num));
self.prop_names.insert(
SendPropIdentifier::new(&table, prop_name.as_str()),
(table.clone().into(), prop_name),
);
} }
} }
} }
@ -61,7 +78,11 @@ impl MessageHandler for PropAnalyzer {
prop_name: prop_name.to_string(), prop_name: prop_name.to_string(),
}) })
.collect(); .collect();
props.sort_by(|a, b| a.identifier.cmp(&b.identifier)); props.sort_by(|a, b| {
a.table_name
.cmp(&b.table_name)
.then(a.prop_name.cmp(&b.prop_name))
});
props props
} }
} }

View file

@ -121,6 +121,12 @@ impl From<&'static str> for SendTableName {
} }
} }
impl PartialEq<&str> for SendTableName {
fn eq(&self, other: &&str) -> bool {
self.as_str() == *other
}
}
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ParseSendTable { pub struct ParseSendTable {

File diff suppressed because it is too large Load diff