1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
pub use bitbuffer::Result as ReadResult; pub use crate::demo::{ message::MessageType, parser::{ DemoParser, GameEventError, MatchState, MessageTypeAnalyser, Parse, ParseError, ParserState, Result, }, Demo, Stream, }; pub(crate) mod consthash; pub mod demo; mod nullhasher; #[cfg(test)] #[track_caller] fn test_roundtrip_write< 'a, T: bitbuffer::BitRead<'a, bitbuffer::LittleEndian> + bitbuffer::BitWrite<bitbuffer::LittleEndian> + 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() ); }