use clap::Parser;
mod cli;
const CONFIG_FILE: &str = "rpick.yml";
#[derive(Parser)]
struct CliArgs {
category: String,
#[clap(short, long, env = "RPICK_CONFIG")]
config: Option<String>,
#[clap(short, long)]
verbose: bool,
}
fn main() {
let args = CliArgs::parse();
let config_path = get_config_file_path(&args);
let config = rpick::config::read_config(&config_path);
match config {
Ok(config) => {
let mut config = config;
let ui = cli::Cli::new(args.verbose);
let mut engine = rpick::engine::Engine::new(&ui);
match engine.pick(&mut config, args.category) {
Ok(_) => match rpick::config::write_config(&config_path, config) {
Ok(_) => {}
Err(error) => {
println!("{}", error);
std::process::exit(1);
}
},
Err(error) => {
println!("{}", error);
std::process::exit(1);
}
}
}
Err(error) => {
println!("Error reading config file at {}: {}", config_path, error);
std::process::exit(1);
}
}
}
fn get_config_file_path(args: &CliArgs) -> String {
match &args.config {
Some(config) => config.clone(),
None => {
let config_dir = dirs_next::config_dir().expect("Unable to find config dir.");
let config_file = config_dir.join(CONFIG_FILE);
String::from(config_file.to_str().expect("Unable to determine config."))
}
}
}