mod commands;
mod util;
use anyhow::Result;
use clap::{ColorChoice, Parser, Subcommand};
#[derive(Parser)]
#[command(name = "cargo")]
#[command(bin_name = "cargo")]
#[command(color = ColorChoice::Always)]
enum Cargo {
#[command(name = "winapp")]
Winapp(WinappArgs),
}
#[derive(Parser)]
#[command(
author,
version,
about = "Cargo subcommand for Windows app development with winapp CLI"
)]
struct WinappArgs {
#[arg(long, short, global = true)]
verbose: bool,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Build {
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
cargo_args: Vec<String>,
},
Run {
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
cargo_args: Vec<String>,
},
Pack {
#[arg(long, short = 'i', default_value = "dist-msix")]
input: String,
#[arg(long, short = 'o')]
output: Option<String>,
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
cargo_args: Vec<String>,
},
}
fn main() -> Result<()> {
let Cargo::Winapp(args) = Cargo::parse();
let verbose = args.verbose;
match args.command {
Commands::Build { cargo_args } => commands::build::run(cargo_args, verbose),
Commands::Run { cargo_args } => commands::run::run(cargo_args, verbose),
Commands::Pack {
input,
output,
cargo_args,
} => commands::pack::run(input, output, cargo_args, verbose),
}
}