1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
use std::collections::HashMap; use crate::formats::archive::BinArchive; use crate::formats::archive::BinArchiveReader; use anyhow::{anyhow, Result}; pub struct TextData { title: String, entries: HashMap<String, String> } impl TextData { pub fn new() -> Self { TextData { title: String::new(), entries: HashMap::new() } } pub fn read(archive: &BinArchive) -> Result<Self> { let mut reader = BinArchiveReader::new(archive, 0); let mut entries: HashMap<String, String> = HashMap::new(); let title = reader.read_shift_jis_string()?; while reader.tell() < archive.size() { match reader.read_label(0)? { Some(label) => { let value = reader.read_utf16_string()?; entries.insert(label, value); } None => { return Err(anyhow!("Malformed message archive {}", title)); } } } Ok(TextData { title, entries }) } pub fn get_title(&self) -> &str { &self.title } pub fn set_title(&mut self, new_title: String) { self.title = new_title; } pub fn insert_or_overwrite(&mut self, key: String, value: String) { self.entries.insert(key, value); } pub fn get_entry(&self, key: &String) -> Option<&String> { self.entries.get(key) } pub fn delete_entry(&mut self, key: &String) { self.entries.remove(key); } }