1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-10-01 08:44:05 +02:00

cargo updates

This commit is contained in:
Robin Appelman 2026-08-31 23:02:56 +02:00
commit 1a5960f7c4
10 changed files with 375 additions and 329 deletions

563
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,14 +1,13 @@
[package] [package]
name = "tf-demo-parser" name = "tf-demo-parser"
description = "parser for tf2 demo files"
version = "0.7.0" version = "0.7.0"
authors = ["Robin Appelman <robin@icewind.nl>"] edition = "2024"
edition = "2021" rust-version = "1.94.0"
license = "MIT OR Apache-2.0" description = "parser for tf2 demo files"
repository = "https://codeberg.org/demostf/parser" repository = "https://codeberg.org/demostf/parser"
exclude = ["tests/fuzz", "test_data"] license = "MIT OR Apache-2.0"
exclude = ["test_data", "tests/fuzz"]
default-run = "parse_demo" default-run = "parse_demo"
rust-version = "1.75.0"
[lib] [lib]
name = "tf_demo_parser" name = "tf_demo_parser"
@ -45,54 +44,65 @@ path = "src/bin/strings.rs"
name = "direct_hits" name = "direct_hits"
path = "src/bin/direct_hits.rs" path = "src/bin/direct_hits.rs"
[[bench]]
harness = false
name = "parse"
[dependencies] [dependencies]
bitbuffer = { version = "0.11.3", features = ["serde"] }
num_enum = "0.7.2"
num-traits = "0.2.19"
enumflags2 = { version = "0.7.10", features = ["serde"] }
snap = "1.1.1"
serde = { version = "1.0.203", features = ["derive", "rc"] }
serde_json = "1.0.117"
serde_repr = "0.1.19"
thiserror = "2.0.4"
parse-display = "0.9.1"
main_error = "0.1.2"
jemallocator = { version = "0.5.4", optional = true }
better-panic = { version = "0.3.0", optional = true } better-panic = { version = "0.3.0", optional = true }
fnv = "1.0.7" bitbuffer = { version = "0.11.3", features = ["serde"] }
tracing = { version = "0.1.40", optional = true }
tracing-subscriber = { version = "0.3.18", features = ["env-filter"], optional = true }
itertools = "0.14.0"
const-fnv1a-hash = "1.1.0" const-fnv1a-hash = "1.1.0"
enumflags2 = { version = "0.7.12", features = ["serde"] }
fnv = "1.0.7"
itertools = "0.15.0"
jemallocator = { version = "0.5.4", optional = true }
main_error = "0.1.2"
num_enum = "0.7.6"
num-traits = "0.2.19"
parse-display = "0.11.0"
serde = { version = "1.0.229", features = ["derive", "rc"] }
serde_json = "1.0.151"
serde_repr = "0.1.21"
snap = "1.1.2"
thiserror = "2.0.20"
tracing = { version = "0.1.44", optional = true }
tracing-subscriber = { version = "0.3.23", features = ["env-filter"], optional = true }
# schema # schema
schemars = { version = "1.0.4", optional = true } schemars = { version = "1.2.2", optional = true }
Inflector = { version = "0.11", default-features = false, optional = true }
lazy_static = { version = "1", optional = true }
prettyplease = { version = "0.3", optional = true }
proc-macro2 = { version = "1", optional = true }
# codegen # codegen
quote = { version = "1", optional = true } quote = { version = "1", optional = true }
syn = { version = "2", features = ["full"], optional = true } syn = { version = "3", features = ["full"], optional = true }
Inflector = { version = "0.11", default-features = false, optional = true }
proc-macro2 = { version = "1", optional = true }
tempfile = { version = "3", optional = true } tempfile = { version = "3", optional = true }
lazy_static = { version = "1", optional = true }
prettyplease = { version = "0.2", optional = true }
log = { version = "0.4.21", features = [] } log = { version = "0.4.34", features = [] }
[features]
schema = ["schemars", "bitbuffer/schemars_1"]
trace = ["tracing", "tracing-subscriber"]
codegen = ["better-panic", "quote", "syn", "Inflector", "proc-macro2", "tempfile", "lazy_static", "prettyplease"]
write = []
[dev-dependencies] [dev-dependencies]
pretty_assertions = "1.4.0" iai-callgrind = "0.16.1"
insta = { version = "1.48.0", features = ["json"] }
pretty_assertions = "1.4.1"
test-case = "3.3.1" test-case = "3.3.1"
iai-callgrind = "0.15.2"
insta = { version = "1.39.0", features = ["json"] }
[profile.release] [features]
lto = "thin" codegen = [
"Inflector",
"better-panic",
"lazy_static",
"prettyplease",
"proc-macro2",
"quote",
"syn",
"tempfile"
]
schema = ["bitbuffer/schemars_1", "schemars"]
trace = ["tracing", "tracing-subscriber"]
write = []
[profile.bench] [profile.bench]
debug = true debug = true
@ -100,7 +110,5 @@ debug = true
[profile.dev] [profile.dev]
opt-level = 2 opt-level = 2
[[bench]] [profile.release]
name = "parse" lto = "thin"
harness = false

View file

@ -29,6 +29,6 @@
demostf-parser-schema = pkgs: pkgs.demostf-parser-schema; demostf-parser-schema = pkgs: pkgs.demostf-parser-schema;
}; };
tools = pkgs: with pkgs; [bacon cargo-insta]; tools = pkgs: with pkgs; [bacon cargo-insta cargo-edit];
}; };
} }

View file

@ -2,9 +2,6 @@ use std::env;
use std::fs; use std::fs;
use main_error::MainError; use main_error::MainError;
use serde::{Deserialize, Serialize};
use tf_demo_parser::demo::header::Header;
use tf_demo_parser::demo::parser::analyser::MatchState;
use tf_demo_parser::demo::parser::gamestateanalyser::GameStateAnalyser; use tf_demo_parser::demo::parser::gamestateanalyser::GameStateAnalyser;
pub use tf_demo_parser::{Demo, DemoParser, Parse}; pub use tf_demo_parser::{Demo, DemoParser, Parse};
@ -12,14 +9,6 @@ pub use tf_demo_parser::{Demo, DemoParser, Parse};
#[global_allocator] #[global_allocator]
static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc; static ALLOC: jemallocator::Jemalloc = jemallocator::Jemalloc;
#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
struct JsonDemo {
header: Header,
#[serde(flatten)]
state: MatchState,
}
fn main() -> Result<(), MainError> { fn main() -> Result<(), MainError> {
#[cfg(feature = "better-panic")] #[cfg(feature = "better-panic")]
better_panic::install(); better_panic::install();

View file

@ -129,8 +129,8 @@ impl schemars::JsonSchema for MaybeUtf8String {
String::schema_name() String::schema_name()
} }
fn json_schema(gen: &mut schemars::SchemaGenerator) -> schemars::Schema { fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
String::json_schema(gen) String::json_schema(generator)
} }
} }

View file

@ -12,7 +12,7 @@ use crate::demo::parser::ParseBitSkip;
use crate::demo::sendprop::{SendProp, SendPropIdentifier, SendPropValue}; use crate::demo::sendprop::{SendProp, SendPropIdentifier, SendPropValue};
use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream}; use crate::{Parse, ParseError, ParserState, ReadResult, Result, Stream};
use parse_display::{Display, FromStr}; use parse_display::{Display, FromStr};
use std::cmp::{min, Ordering}; use std::cmp::{Ordering, min};
use std::collections::HashSet; use std::collections::HashSet;
use crate::demo::data::ServerTick; use crate::demo::data::ServerTick;
@ -120,7 +120,7 @@ impl<E: Endianness> BitRead<'_, E> for BaselineIndex {
} }
unsafe fn read_unchecked(stream: &mut BitReadStream<'_, E>, end: bool) -> ReadResult<Self> { unsafe fn read_unchecked(stream: &mut BitReadStream<'_, E>, end: bool) -> ReadResult<Self> {
bool::read_unchecked(stream, end).map(BaselineIndex::from) unsafe { bool::read_unchecked(stream, end).map(BaselineIndex::from) }
} }
fn bit_size() -> Option<usize> { fn bit_size() -> Option<usize> {

View file

@ -15,7 +15,7 @@ use bitbuffer::{BitWrite, BitWriteStream, Endianness};
use num_enum::TryFromPrimitive; use num_enum::TryFromPrimitive;
use parse_display::{Display, FromStr}; use parse_display::{Display, FromStr};
use serde::de::Error; use serde::de::Error;
use serde::{ser::SerializeMap, Deserialize, Deserializer, Serialize, Serializer}; use serde::{Deserialize, Deserializer, Serialize, Serializer, ser::SerializeMap};
use std::collections::{BTreeMap, HashMap}; use std::collections::{BTreeMap, HashMap};
use std::convert::TryFrom; use std::convert::TryFrom;
@ -143,7 +143,7 @@ impl Class {
where where
u8: TryFrom<U>, u8: TryFrom<U>,
{ {
Class::try_from(u8::try_from(number).unwrap_or_default()).unwrap() Class::try_from(u8::try_from(number).unwrap_or_default()).unwrap_or_default()
} }
} }

View file

@ -5,12 +5,12 @@ pub use self::messagetypeanalyser::MessageTypeAnalyser;
use crate::demo::header::Header; use crate::demo::header::Header;
use crate::Stream;
use crate::demo::packet::Packet; use crate::demo::packet::Packet;
use crate::demo::parser::analyser::Analyser; use crate::demo::parser::analyser::Analyser;
pub use crate::demo::parser::analyser::MatchState; pub use crate::demo::parser::analyser::MatchState;
pub use crate::demo::parser::handler::{DemoHandler, MessageHandler, NullHandler}; pub use crate::demo::parser::handler::{DemoHandler, MessageHandler, NullHandler};
pub use crate::demo::parser::state::ParserState; pub use crate::demo::parser::state::ParserState;
use crate::Stream;
pub mod analyser; pub mod analyser;
pub mod error; pub mod error;
@ -190,7 +190,7 @@ impl<A: MessageHandler + BorrowMessageHandler> DemoTicker<'_, A> {
/// Process the next packet /// Process the next packet
#[allow(clippy::should_implement_trait)] #[allow(clippy::should_implement_trait)]
pub fn next(&mut self) -> Result<Option<Tick<A::Output>>> { pub fn next(&mut self) -> Result<Option<Tick<'_, A::Output>>> {
Ok( Ok(
if let Some(packet) = self.packets.next(&self.handler.state_handler)? { if let Some(packet) = self.packets.next(&self.handler.state_handler)? {
let tick = packet.tick(); let tick = packet.tick();

View file

@ -8,7 +8,7 @@ use crate::demo::message::packetentities::{
BaselineIndex, EntityId, PacketEntitiesMessage, PacketEntity, UpdateType, BaselineIndex, EntityId, PacketEntitiesMessage, PacketEntity, UpdateType,
}; };
use crate::demo::message::stringtable::StringTableMeta; use crate::demo::message::stringtable::StringTableMeta;
use crate::demo::message::{log_base2, Message, MessageType}; use crate::demo::message::{Message, MessageType, log_base2};
use crate::demo::packet::datatable::{ use crate::demo::packet::datatable::{
ClassId, ParseSendTable, SendTable, SendTableName, ServerClass, ClassId, ParseSendTable, SendTable, SendTableName, ServerClass,
}; };
@ -158,7 +158,7 @@ impl ParserState {
class_id: ClassId, class_id: ClassId,
send_table: &SendTable, send_table: &SendTable,
is_delta: bool, is_delta: bool,
) -> Result<Cow<[SendProp]>> { ) -> Result<Cow<'_, [SendProp]>> {
match self.get_instance_baseline(baseline_index).get(entity_index) { match self.get_instance_baseline(baseline_index).get(entity_index) {
Some(baseline) if baseline.server_class == class_id && is_delta => { Some(baseline) if baseline.server_class == class_id && is_delta => {
Ok(Cow::Borrowed(&baseline.props)) Ok(Cow::Borrowed(&baseline.props))

View file

@ -9,7 +9,7 @@ use crate::{ParseError, ReadResult, Result, Stream};
use bitbuffer::{BitRead, BitReadStream, Endianness, LittleEndian}; use bitbuffer::{BitRead, BitReadStream, Endianness, LittleEndian};
#[cfg(feature = "write")] #[cfg(feature = "write")]
use bitbuffer::{BitWrite, BitWriteSized, BitWriteStream}; use bitbuffer::{BitWrite, BitWriteSized, BitWriteStream};
use enumflags2::{bitflags, BitFlags}; use enumflags2::{BitFlags, bitflags};
#[cfg(feature = "write")] #[cfg(feature = "write")]
use num_traits::Signed; use num_traits::Signed;
use parse_display::Display; use parse_display::Display;
@ -336,8 +336,8 @@ impl schemars::JsonSchema for SendPropFlags {
"SendPropFlags".into() "SendPropFlags".into()
} }
fn json_schema(gen: &mut schemars::SchemaGenerator) -> schemars::Schema { fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
u16::json_schema(gen) u16::json_schema(generator)
} }
} }
@ -697,11 +697,7 @@ impl SendPropValue {
0.0f32 0.0f32
}; };
if is_negative { if is_negative { -z } else { z }
-z
} else {
z
}
} }
_ => Self::read_float(stream, float_definition)?, _ => Self::read_float(stream, float_definition)?,
}; };
@ -1284,8 +1280,8 @@ impl schemars::JsonSchema for SendPropIdentifier {
"SendPropIdentifier".into() "SendPropIdentifier".into()
} }
fn json_schema(gen: &mut schemars::SchemaGenerator) -> schemars::Schema { fn json_schema(generator: &mut schemars::SchemaGenerator) -> schemars::Schema {
<String as schemars::JsonSchema>::json_schema(gen) <String as schemars::JsonSchema>::json_schema(generator)
} }
} }
@ -1558,11 +1554,7 @@ pub fn read_bit_normal(stream: &mut Stream) -> ReadResult<f32> {
let is_negative = stream.read()?; let is_negative = stream.read()?;
let frac_val: u16 = stream.read_sized(11)?; let frac_val: u16 = stream.read_sized(11)?;
let value = (frac_val as f32) * get_frac_factor(11); let value = (frac_val as f32) * get_frac_factor(11);
if is_negative { if is_negative { Ok(-value) } else { Ok(value) }
Ok(-value)
} else {
Ok(value)
}
} }
#[cfg(feature = "write")] #[cfg(feature = "write")]