diff --git a/codegen/Cargo.lock b/codegen/Cargo.lock index 3202faa..8ed8d17 100644 --- a/codegen/Cargo.lock +++ b/codegen/Cargo.lock @@ -25,9 +25,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" dependencies = [ "memchr", ] @@ -76,9 +76,9 @@ dependencies = [ [[package]] name = "bitbuffer" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a9c93bd4423a7740feae26d6daf52b7d53451cba0b2d6bed59b836c32e15c" +checksum = "525586993a118417512a49bada2d143319310891f48b0b116c8f64fbb6486c87" dependencies = [ "bitbuffer_derive", "err-derive", @@ -95,7 +95,7 @@ checksum = "4090254bfbc71442ff4a426ddba663346e26fd14b55b259281f763e350d7f621" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.99", "syn_util", ] @@ -183,7 +183,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.99", ] [[package]] @@ -196,7 +196,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.99", "synstructure", ] @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] @@ -274,9 +274,9 @@ checksum = "155db5e86c6e45ee456bf32fad5a290ee1f7151c2faca27ea27097568da67d1a" [[package]] name = "memchr" -version = "2.4.1" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "miniz_oxide" @@ -391,7 +391,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.99", ] [[package]] @@ -405,15 +405,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.9.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "parse-display" -version = "0.5.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "813e91c6232dbeb2e9deba0eb0dc5c967bd6f380676fd34419f9ddd71411faa7" +checksum = "c6509d08722b53e8dafe97f2027b22ccbe3a5db83cb352931e9716b0aa44bc5c" dependencies = [ "once_cell", "parse-display-derive", @@ -422,17 +422,17 @@ dependencies = [ [[package]] name = "parse-display-derive" -version = "0.5.5" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007ed61a69cf7d9b95cc5dc18489dbb4f70d4adb0a0c100e2dd46f0be241711a" +checksum = "68517892c8daf78da08c0db777fcc17e07f2f63ef70041718f8a7630ad84f341" dependencies = [ "once_cell", "proc-macro2", "quote", "regex", - "regex-syntax", + "regex-syntax 0.7.5", "structmeta", - "syn", + "syn 2.0.48", ] [[package]] @@ -442,7 +442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f3ebd569945e276e2c8000677484f50f5c242b3495929ae1c7d42d89778939a" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.99", ] [[package]] @@ -464,7 +464,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.99", "version_check", ] @@ -481,18 +481,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.14" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -508,20 +508,38 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-automata", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", ] [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" [[package]] name = "remove_dir_all" @@ -552,29 +570,29 @@ checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" [[package]] name = "serde" -version = "1.0.144" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.144" +version = "1.0.196" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79" dependencies = [ "itoa", "ryu", @@ -583,20 +601,20 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.9" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] name = "snap" -version = "1.0.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" [[package]] name = "steamid-ng" @@ -615,25 +633,25 @@ dependencies = [ [[package]] name = "structmeta" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59915b528a896f2e3bfa1a6ace65f7bb0ff9f9863de6213b0c01cb6fd3c3ac71" +checksum = "78ad9e09554f0456d67a69c1584c9798ba733a5b50349a6c0d0948710523922d" dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn", + "syn 2.0.48", ] [[package]] name = "structmeta-derive" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73800bcca56045d5ab138a48cd28a96093335335deaa916f22b5749c4150c79" +checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.48", ] [[package]] @@ -647,6 +665,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn_util" version = "0.4.2" @@ -655,7 +684,7 @@ checksum = "6754c4559b79657554e9d8a0d56e65e490c76d382b9c23108364ec4125dea23c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.99", ] [[package]] @@ -666,7 +695,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.99", "unicode-xid", ] @@ -695,7 +724,7 @@ dependencies = [ [[package]] name = "tf-demo-parser" -version = "0.4.0" +version = "0.5.0" dependencies = [ "bitbuffer", "enumflags2", @@ -725,7 +754,7 @@ dependencies = [ "prettyplease", "proc-macro2", "quote", - "syn", + "syn 1.0.99", "tempfile", "tf-demo-parser", ] @@ -747,7 +776,7 @@ checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.99", ] [[package]] diff --git a/codegen/src/gameevent.rs b/codegen/src/gameevent.rs index 46e1d56..f141b7e 100644 --- a/codegen/src/gameevent.rs +++ b/codegen/src/gameevent.rs @@ -229,7 +229,7 @@ pub fn generate_game_events(demo: Demo) -> TokenStream { use crate::demo::Stream; use crate::{ParseError, Result}; use bitbuffer::{BitRead, LittleEndian, BitWrite, BitWriteStream}; - use serde::{Deserialize, Serialize}; + use serde::{Deserialize, Deserializer, Serialize, Serializer}; use crate::demo::data::MaybeUtf8String; ); @@ -398,12 +398,32 @@ pub fn generate_game_events(demo: Demo) -> TokenStream { } #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] - #[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] + #[derive(Clone, Debug, PartialEq, Eq, Hash)] pub enum GameEventType { #(#event_types)* Unknown(String), } + impl Serialize for GameEventType { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.as_str()) + } + } + + impl<'de> Deserialize<'de> for GameEventType { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + let str = <&str>::deserialize(deserializer)?; + Ok(GameEventType::from_type_name(str)) + } + } + + impl GameEventType { pub fn from_type_name(name: &str) -> Self { match name { diff --git a/src/demo/gameevent_gen.rs b/src/demo/gameevent_gen.rs index 5785254..b82e514 100644 --- a/src/demo/gameevent_gen.rs +++ b/src/demo/gameevent_gen.rs @@ -3,7 +3,7 @@ use crate::demo::data::MaybeUtf8String; use crate::demo::Stream; use crate::{ParseError, Result}; use bitbuffer::{BitRead, BitWrite, BitWriteStream, LittleEndian}; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; fn read_value<'a, T: EventValue + BitRead<'a, LittleEndian> + Default>( stream: &mut Stream<'a>, entry: Option<&GameEventEntry>, @@ -6712,7 +6712,7 @@ pub enum GameEvent { Unknown(RawGameEvent), } #[cfg_attr(feature = "schema", derive(schemars::JsonSchema))] -#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Clone, Debug, PartialEq, Eq, Hash)] pub enum GameEventType { ServerSpawn, ServerChangeLevelFailed, @@ -7117,6 +7117,23 @@ pub enum GameEventType { ReplayServerError, Unknown(String), } +impl Serialize for GameEventType { + fn serialize(&self, serializer: S) -> std::result::Result + where + S: Serializer, + { + serializer.serialize_str(self.as_str()) + } +} +impl<'de> Deserialize<'de> for GameEventType { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + let str = <&str>::deserialize(deserializer)?; + Ok(GameEventType::from_type_name(str)) + } +} impl GameEventType { pub fn from_type_name(name: &str) -> Self { match name {