use std::env;
use std::path::PathBuf;
use clap::{Parser, Subcommand};
use lazy_static::lazy_static;
use crate::{panic_error};
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
pub struct Args {
#[arg(short, long)]
pub directory: Option<PathBuf>,
#[command(subcommand)]
pub command: Option<Command>,
#[arg(long, default_value_t = false)]
pub dry_run: bool,
}
#[derive(Debug, Subcommand, PartialEq)]
pub enum Command {
Import(ImportArgs),
}
#[derive(Debug, clap::Args, PartialEq)]
pub struct ImportArgs {
pub path: PathBuf,
#[arg(long)]
pub max_depth: Option<u16>,
}
pub struct ParsedArgs {
pub directory: PathBuf,
pub is_directory_from_env: bool,
pub command: Option<Command>,
pub should_save: bool
}
lazy_static! {
pub static ref ARGS: ParsedArgs = {
let args = Args::parse();
let (directory, is_directory_from_env) = match args.directory {
Some(arg_directory) => (arg_directory, false),
None => match env::var("ATAC_MAIN_DIR") {
Ok(env_directory) => (PathBuf::from(env_directory), true),
Err(_) => panic_error("No directory provided, provide one either with `--directory <dir>` or via the environment variable `ATAC_MAIN_DIR`")
}
};
ParsedArgs {
directory,
is_directory_from_env,
command: args.command,
should_save: !args.dry_run
}
};
}