1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-04-26 14:17:45 +00:00

Add write support and relevant test for EXL files

This commit is contained in:
Joshua Goins 2023-08-02 16:27:38 -04:00
parent 1fd7cdf07d
commit f3e51048b2

View file

@ -1,6 +1,6 @@
use crate::gamedata::MemoryBuffer; use crate::gamedata::MemoryBuffer;
use std::collections::HashMap; use std::collections::HashMap;
use std::io::{BufRead, BufReader, Cursor}; use std::io::{BufRead, BufReader, BufWriter, Cursor, Write};
/// Represents an Excel List. /// Represents an Excel List.
pub struct EXL { pub struct EXL {
@ -40,6 +40,23 @@ impl EXL {
Some(exl) Some(exl)
} }
pub fn write_to_buffer(&self) -> Option<MemoryBuffer> {
let mut buffer = MemoryBuffer::new();
{
let cursor = Cursor::new(&mut buffer);
let mut writer = BufWriter::new(cursor);
writer.write(format!("EXLT,{}", self.version).as_ref());
for entry in &self.entries {
writer.write(format!("\n{},{}", entry.0, entry.1).as_ref());
}
}
Some(buffer)
}
/// Checks whether or not the list contains a key. /// Checks whether or not the list contains a key.
/// ///
/// # Example /// # Example
@ -90,4 +107,17 @@ mod tests {
// should be case-sensitive // should be case-sensitive
assert!(!exl.contains("foo")); assert!(!exl.contains("foo"));
} }
#[test]
fn test_write() {
let existing_exl = common_setup();
let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
d.push("resources/tests");
d.push("test.exl");
let exl = read(d).unwrap();
assert_eq!(existing_exl.write_to_buffer().unwrap(), exl);
}
} }