mirror of
https://codeberg.org/demostf/parser.git
synced 2026-06-04 10:34:11 +02:00
82 lines
2.2 KiB
Rust
82 lines
2.2 KiB
Rust
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()
|
|
);
|
|
}
|