evtc_parse/
util.rs
1use crate::ParseError;
2use byteorder::LittleEndian;
3use std::io;
4
5pub type Endian = LittleEndian;
9
10pub fn truncate_null(mut string: String) -> String {
12 if let Some(end) = string.find('\0') {
13 string.truncate(end);
14 }
15 string
16}
17
18pub fn read_buffer<const SIZE: usize>(input: &mut impl io::Read) -> io::Result<[u8; SIZE]> {
20 let mut buffer = [0; SIZE];
21 input.read_exact(&mut buffer)?;
22 Ok(buffer)
23}
24
25pub fn read_string_buffer<const SIZE: usize>(
27 input: &mut impl io::Read,
28) -> Result<String, ParseError> {
29 let buffer = read_buffer::<SIZE>(input)?;
30 Ok(String::from_utf8(buffer.to_vec())?)
31}
32
33pub fn write_string_buffer<const SIZE: usize>(
35 output: &mut impl io::Write,
36 string: impl AsRef<str>,
37) -> Result<(), io::Error> {
38 let bytes = string.as_ref().as_bytes();
39 let mut buffer = [0; SIZE];
40 buffer[..bytes.len()].copy_from_slice(bytes);
41 output.write_all(&buffer)?;
42 Ok(())
43}