1pub use bitbuffer::Result as ReadResult;
2
3pub use crate::demo::{
4 message::MessageType,
5 parser::{
6 DemoParser, GameEventError, MatchState, MessageTypeAnalyser, Parse, ParseError,
7 ParserState, Result,
8 },
9 Demo, Stream,
10};
11
12#[cfg(feature = "codegen")]
13pub mod codegen;
14pub(crate) mod consthash;
15pub mod demo;
16pub(crate) mod nullhasher;
17
18#[cfg(test)]
19#[track_caller]
20fn test_roundtrip_write<
21 'a,
22 T: bitbuffer::BitRead<'a, bitbuffer::LittleEndian>
23 + bitbuffer::BitWrite<bitbuffer::LittleEndian>
24 + std::fmt::Debug
25 + std::cmp::PartialEq,
26>(
27 val: T,
28) {
29 let mut data = Vec::with_capacity(128);
30 use bitbuffer::{BitReadBuffer, BitReadStream, BitWriteStream, LittleEndian};
31 let pos = {
32 let mut stream = BitWriteStream::new(&mut data, LittleEndian);
33 val.write(&mut stream).unwrap();
34 stream.bit_len()
35 };
36
37 let mut read = BitReadStream::new(BitReadBuffer::new_owned(data, LittleEndian));
38 assert_eq!(
39 val,
40 read.read().unwrap(),
41 "Failed to assert the parsed message is equal to the original"
42 );
43 assert_eq!(
44 pos,
45 read.pos(),
46 "Failed to assert that all encoded bits ({}) are used for decoding ({})",
47 pos,
48 read.pos()
49 );
50}
51
52#[cfg(test)]
53#[track_caller]
54fn test_roundtrip_encode<
55 'a,
56 T: Parse<'a> + crate::demo::parser::Encode + std::fmt::Debug + std::cmp::PartialEq,
57>(
58 val: T,
59 state: &ParserState,
60) {
61 let mut data = Vec::with_capacity(128);
62 use bitbuffer::{BitReadBuffer, BitReadStream, BitWriteStream, LittleEndian};
63 let pos = {
64 let mut stream = BitWriteStream::new(&mut data, LittleEndian);
65 val.encode(&mut stream, state).unwrap();
66 stream.bit_len()
67 };
68
69 let mut read = BitReadStream::new(BitReadBuffer::new_owned(data, LittleEndian));
70 pretty_assertions::assert_eq!(
71 val,
72 T::parse(&mut read, state).unwrap(),
73 "Failed to assert the parsed message is equal to the original"
74 );
75 pretty_assertions::assert_eq!(
76 pos,
77 read.pos(),
78 "Failed to assert that all encoded bits ({}) are used for decoding ({})",
79 pos,
80 read.pos()
81 );
82}