fn encode_strings>()

in src/model/filerec.rs [158:185]


fn encode_strings<'a>(strings: &[String]) -> Result<Vec<u8>, StringEncodeError<'a>> {
	let mut result: Vec<u8> = Vec::with_capacity(1024);

	for string in strings.iter() {
		let u16data: Vec<u16> = string.encode_utf16().collect();
		let size = u16data.len() * 2;

		result
			.write_u8(0xfe)
			.map_err(|_| StringEncodeError("Failed to write file rec string header"))?;

		result
			.write_i32::<LittleEndian>(-(size as i32))
			.map_err(|_| StringEncodeError("Failed to write file rec string size"))?;

		let start = result.len();
		let end = start + size;
		result.resize(end, 0);

		LittleEndian::write_u16_into(&u16data, &mut result[start..end]);
	}

	result
		.write_u8(0xff)
		.map_err(|_| StringEncodeError("Failed to write file rec string end"))?;

	Ok(result)
}