pub use bitbuffer::Result as ReadResult; pub use crate::demo::{ message::MessageType, parser::{ DemoParser, GameEventError, MatchState, MessageTypeAnalyser, Parse, ParseError, ParserState, Result, }, Demo, Stream, }; #[cfg(feature = "codegen")] pub mod codegen; pub(crate) mod consthash; pub mod demo; pub(crate) mod nullhasher; #[cfg(test)] #[track_caller] fn test_roundtrip_write< 'a, T: bitbuffer::BitRead<'a, bitbuffer::LittleEndian> + bitbuffer::BitWrite + std::fmt::Debug + std::cmp::PartialEq, >( val: T, ) { let mut data = Vec::with_capacity(128); use bitbuffer::{BitReadBuffer, BitReadStream, BitWriteStream, LittleEndian}; let pos = { let mut stream = BitWriteStream::new(&mut data, LittleEndian); val.write(&mut stream).unwrap(); stream.bit_len() }; let mut read = BitReadStream::new(BitReadBuffer::new_owned(data, LittleEndian)); assert_eq!( val, read.read().unwrap(), "Failed to assert the parsed message is equal to the original" ); assert_eq!( pos, read.pos(), "Failed to assert that all encoded bits ({}) are used for decoding ({})", pos, read.pos() ); } #[cfg(test)] #[track_caller] fn test_roundtrip_encode< 'a, T: Parse<'a> + crate::demo::parser::Encode + std::fmt::Debug + std::cmp::PartialEq, >( val: T, state: &ParserState, ) { let mut data = Vec::with_capacity(128); use bitbuffer::{BitReadBuffer, BitReadStream, BitWriteStream, LittleEndian}; let pos = { let mut stream = BitWriteStream::new(&mut data, LittleEndian); val.encode(&mut stream, state).unwrap(); stream.bit_len() }; let mut read = BitReadStream::new(BitReadBuffer::new_owned(data, LittleEndian)); pretty_assertions::assert_eq!( val, T::parse(&mut read, state).unwrap(), "Failed to assert the parsed message is equal to the original" ); pretty_assertions::assert_eq!( pos, read.pos(), "Failed to assert that all encoded bits ({}) are used for decoding ({})", pos, read.pos() ); }