use std::fs;
use std::io;
use std::path::PathBuf;
use std::error::Error;
use structopt::{
StructOpt,
clap::{
AppSettings::{
ColoredHelp,
DontCollapseArgsInUsage,
ArgRequiredElseHelp,
},
},
};
use spritec::config::TaskConfig;
#[derive(Debug, StructOpt)]
#[structopt(author = "The ProtoArt Team <https://protoart.me>")]
#[structopt(global_settings = &[ColoredHelp, DontCollapseArgsInUsage, ArgRequiredElseHelp])]
pub struct AppArgs {
#[structopt(name = "config-file", default_value = "spritec.toml", parse(from_os_str))]
config_path: PathBuf,
}
impl AppArgs {
pub fn load_config(&self) -> Result<TaskConfig, Box<dyn Error>> {
Ok(toml::from_str(&fs::read_to_string(&self.config_path)?)?)
}
pub fn base_directory(&self) -> Result<PathBuf, io::Error> {
self.config_path.canonicalize().and_then(|p| p.parent().ok_or_else(|| io::Error::new(
io::ErrorKind::Other,
"No parent directory for configuration path",
)).map(|p| p.to_path_buf()))
}
}