use clap::{Parser, Subcommand};
use envful::checker;
use envful::runner;
use std::path::PathBuf;
#[derive(Parser, Debug)]
#[clap(version, about, long_about = None)]
struct Args {
#[clap(short, long, parse(from_os_str), global = true)]
file: Option<PathBuf>,
#[clap(short, long, parse(from_os_str), global = true)]
manifest: Option<PathBuf>,
#[clap(long, global = true)]
show_optional: bool,
#[clap(long, global = true)]
show_undeclared: bool,
#[clap(subcommand)]
command: Commands,
}
#[derive(Subcommand, Debug)]
enum Commands {
Check,
#[clap(external_subcommand)]
Other(Vec<String>),
}
fn main() {
let args = Args::parse();
let env_file = args.file;
let env_manifest = args
.manifest
.unwrap_or_else(|| PathBuf::from(".env.example"));
match args.command {
Commands::Check => checker::check_command(env_file, &env_manifest, false, true, true),
Commands::Other(extra_args) => runner::run_command(
env_file,
&env_manifest,
&extra_args,
args.show_undeclared,
args.show_optional,
),
}
}