#![doc = include_str!("../README.md")]
#![warn(missing_docs)]
#![allow(clippy::too_many_arguments)]
#[cfg(test)]
extern crate self as source2_demo;
mod display;
mod entity;
pub mod error;
mod event;
mod macros;
mod parser;
mod stream;
mod string_table;
#[cfg(test)]
mod tests;
pub(crate) use stream::reader;
pub mod writer {
pub use crate::error::ParserError;
pub use crate::parser::{
rewrite_protobuf_message, DemoRewriter, DemoWriter, MessageRewrite, PacketMessage,
RewriteInterests,
};
pub use crate::stream::writer::{
write_demo_message, write_demo_message_with_compression, write_var_u32_to_buf,
write_var_u32_to_vec, write_var_u64_to_buf, write_var_u64_to_vec, BitsWriter,
BitstreamWriter, MessageWriter,
};
pub use crate::string_table::StringTableEntryUpdate;
pub use source2_demo_macros::{
replace_entity_field, rewrite_demo_message, rewrite_demo_string_tables, rewrite_field,
rewrite_packet_message, rewrite_packet_messages, rewrite_string_table_entry,
rewrite_svc_create_string_table, rewrite_svc_update_string_table, rewriter,
should_rewrite_entity,
};
}
pub mod proto {
pub use source2_demo_protobufs::prost::Message;
pub use source2_demo_protobufs::*;
}
pub mod prelude {
pub use crate::entity::field::FieldValue;
pub use crate::entity::{Entity, EntityEvents};
pub use crate::error::ParserError;
pub use crate::event::{EventValue, GameEvent, GameEventList};
pub use crate::parser::{Context, DemoRunner, Interests, Observer, ObserverResult, Parser};
pub use crate::string_table::{StringTable, StringTableRow, StringTables};
pub use crate::{property, try_property};
pub use source2_demo_macros::*;
pub use source2_demo_protobufs::prost::Message;
pub use source2_demo_protobufs::EBaseGameEvents;
pub use source2_demo_protobufs::EBaseUserMessages;
pub use source2_demo_protobufs::EDemoCommands;
pub use source2_demo_protobufs::NetMessages;
pub use source2_demo_protobufs::SvcMessages;
#[cfg(feature = "dota")]
pub use crate::event::CombatLogEntry;
#[cfg(feature = "dota")]
pub use crate::proto::EDotaUserMessages;
#[cfg(feature = "deadlock")]
pub use crate::proto::CitadelUserMessageIds;
#[cfg(feature = "deadlock")]
pub use crate::proto::ECitadelGameEvents;
#[cfg(feature = "cs2")]
pub use crate::proto::ECsgoGameEvents;
#[cfg(feature = "cs2")]
pub use crate::proto::ECstrike15UserMessages;
}
pub use crate::entity::field::{FieldRewriteResult, FieldValue, IntoFieldValue};
pub use crate::entity::*;
pub use crate::event::*;
pub use crate::parser::{Context, DemoRunner, Interests, Observer, ObserverResult, Parser};
pub use crate::string_table::{StringTable, StringTableRow, StringTables};
pub use source2_demo_macros::*;
pub type HashMap<K, V> = hashbrown::HashMap<K, V, rustc_hash::FxBuildHasher>;
pub type HashSet<T> = hashbrown::HashSet<T, rustc_hash::FxBuildHasher>;
#[cfg(feature = "dota")]
pub use crate::event::CombatLogEntry;
#[cfg(feature = "mimalloc")]
use mimalloc::MiMalloc;
#[cfg(feature = "mimalloc")]
#[global_allocator]
static GLOBAL: MiMalloc = MiMalloc;