war-cli 0.1.1

A viewer/editor for Darksiders saves, worlds, and scripts
use crate::utils::fs::create_dir_if_not_exists;
use failure::Error;
use std::{fs, io, path::PathBuf};
use structopt::StructOpt;
use war::{worlds, Lossy};

#[derive(StructOpt)]
pub struct Command {
    input_path: PathBuf,
    output_path: PathBuf,
}

impl Command {
    pub fn run(self) -> Result<(), Error> {
        let mut file = io::BufReader::new(fs::File::open(&self.input_path)?);
        let worlds = worlds::read(&mut file)?;
        drop(file);

        for (path, object) in &worlds {
            let path = self.output_path.join(format!("{}{}", path, ".json"));
            create_dir_if_not_exists(path.parent().unwrap())?;
            let mut file = io::BufWriter::new(fs::File::create(&path)?);
            serde_json::to_writer_pretty(&mut file, &Lossy(object))?;
        }

        println!("Wrote to {:?}.", self.output_path);
        Ok(())
    }
}