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
mod parser; mod writer; use super::Script; use parser::take_file; use std::fs::File; use std::io::prelude::*; use std::path::Path; pub struct MscsbFile { pub scripts: Vec<Script>, pub strings: Vec<String>, pub entrypoint: u32, } impl MscsbFile { pub fn open<P: AsRef<Path>>(path: P) -> Option<MscsbFile> { let mut buffer = vec![]; File::open(path).ok()?.read_to_end(&mut buffer).ok()?; Some(take_file(&buffer[..]).unwrap().1) } pub fn write_to_file<P: AsRef<Path>>(&self, path: P) -> std::io::Result<()> { let mut buffer = vec![]; self.write(&mut buffer); File::create(path)? .write_all(&buffer[..])?; Ok(()) } pub fn iter(&self) -> std::slice::Iter<Script> { self.scripts.iter() } pub fn get_script_from_loc(&self, loc: u32) -> Option<usize> { for i in 0..self.scripts.len() { if self.scripts[i].bounds.0 == loc { return Some(i); } } None } }