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<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()
);
}