use std::path::PathBuf;
use clap::Parser;
#[derive(Debug, PartialEq)]
pub enum ArgType {
Apk,
Axml,
Arsc
}
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
pub struct Args {
#[clap(flatten)]
pub target: Target,
#[arg(short, long)]
pub output: Option<PathBuf>,
}
#[derive(Debug, clap::Args)]
#[group(required = true, multiple = false)]
pub struct Target {
#[arg(short, long)]
apk: Option<PathBuf>,
#[arg(short, long)]
xml: Option<PathBuf>,
}
pub fn parse_args() -> Args {
Args::parse()
}
impl Args {
pub fn get_arg_type(&self) -> ArgType {
if self.target.apk.is_some() {
return ArgType::Apk;
}
if self.target.xml.is_some() {
return ArgType::Axml;
}
panic!("Will never happen");
}
pub fn get_arg_path(&self) -> PathBuf {
match self.get_arg_type() {
ArgType::Apk => { self.target.apk.clone().unwrap() },
ArgType::Axml => { self.target.xml.clone().unwrap() },
ArgType::Arsc => todo!()
}
}
pub fn get_output_path(&self) -> Option<PathBuf> {
self.output.clone()
}
}