use binrw::{BinRead, BinResult, Endian};
use std::io::Cursor;
pub(crate) fn read_null_trimmed_utf8<R: std::io::Read + std::io::Seek>(
reader: &mut R,
endian: Endian,
(): (),
) -> BinResult<String> {
let len = <u32 as BinRead>::read_options(reader, endian, ())?;
let mut bytes = vec![0u8; len as usize];
reader.read_exact(&mut bytes)?;
String::from_utf8(bytes)
.map(|s| s.trim_end_matches('\0').to_owned())
.map_err(|e| binrw::Error::Custom {
pos: 0,
err: Box::new(e),
})
}
pub(crate) fn parse_be<T: for<'a> BinRead<Args<'a> = ()>>(body: &[u8]) -> crate::Result<T> {
Ok(T::read_be(&mut Cursor::new(body))?)
}