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

add GameEventType::as_str

This commit is contained in:
Robin Appelman 2021-07-16 21:51:48 +02:00
commit b517df0e57
5 changed files with 9923 additions and 53 deletions

View file

@ -1,10 +1,10 @@
extern crate proc_macro;
use fnv::FnvHashMap;
use inflector::Inflector;
use lazy_static::lazy_static;
use proc_macro2::{Ident, Literal, Span, TokenStream};
use quote::quote;
use std::collections::hash_map::HashMap;
use tf_demo_parser::demo::gameevent_gen::get_sizes;
use tf_demo_parser::demo::gamevent::{GameEventDefinition, GameEventValueType};
use tf_demo_parser::demo::parser::MessageHandler;
@ -27,7 +27,7 @@ impl MessageHandler for GameEventAnalyser {
fn should_box_event(name: &str) -> bool {
lazy_static! {
static ref SIZES: HashMap<&'static str, usize> = get_sizes();
static ref SIZES: FnvHashMap<&'static str, usize> = get_sizes();
}
SIZES.get(name).cloned().unwrap_or_default() > 120
@ -308,6 +308,13 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
quote!(#name_str => GameEventType::#variant_name,)
});
let type_to_names = events.iter().map(|event| {
let name_str = &event.name;
let variant_name = Ident::new(&get_event_name(&name_str), span);
quote!(GameEventType::#variant_name => #name_str,)
});
let from_raw_events = events.iter().map(|event| {
let name = get_event_name(&event.name);
let variant_name = Ident::new(&name, span);
@ -361,6 +368,12 @@ pub fn generate_game_events(demo: Demo) -> TokenStream {
_ => GameEventType::Unknown,
}
}
pub fn as_str(&self) -> &'static str {
match self {
#(#type_to_names)*
GameEventType::Unknown => "unknown",
}
}
}
impl GameEvent {