use anyhow::Result;
use clap::Parser;
use std::{env, fs};
mod config;
mod dependency;
mod run;
use crate::{config::*, dependency::*, run::*};
#[derive(Parser, Debug, Clone)]
pub struct Cli {
#[clap(parse(try_from_str = parse_dependency))]
pub dependencies: Vec<Dependency>,
#[clap(long)]
pub lib: bool,
#[clap(long = "name")]
pub project_name: Option<String>,
#[clap(long = "worktree")]
pub worktree_branch: Option<Option<String>>,
#[clap(long)]
pub git: Option<String>,
#[clap(long)]
pub bench: Option<Option<String>>,
#[clap(long)]
pub edition: Option<u32>,
}
fn main() -> Result<()> {
env_logger::init();
let mut args = env::args().peekable();
let command = args.next();
args.next_if(|x| x.as_str() == "temp");
let cli = Cli::parse_from(command.into_iter().chain(args));
let config = Config::get_or_create()?;
let _ = fs::create_dir(&config.temporary_project_dir);
execute(cli, config)?;
Ok(())
}