msc 0.5.4

A library for working with Smash 4's MotionScript bytecode
Documentation
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
    }
}