use std::io::{self, Read, Write}; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; pub fn read_string(mut reader: R) -> io::Result { // Strings are written as len + bytes let str_len = reader.read_u64::()?; let mut str_bytes = vec![0; str_len as usize]; reader.read_exact(&mut str_bytes)?; let str = String::from_utf8(str_bytes).map_err(|e| { io::Error::new(io::ErrorKind::InvalidData, e.to_string()) })?; Ok(str) } pub fn write_string(mut writer: W, s: &String) -> io::Result<()> { // Strings are written as len + utf8 writer.write_u64::(s.as_bytes().len() as u64)?; writer.write_all(s.as_bytes()) }