use crate::errors::*;
use std::io::stdout;
use std::path::PathBuf;
use structopt::clap::{AppSettings, Shell};
use structopt::StructOpt;
#[derive(StructOpt)]
#[structopt(global_settings = &[AppSettings::ColoredHelp])]
pub struct Args {
#[structopt(short, long, global = true)]
pub quiet: bool,
#[structopt(short, long, global = true, parse(from_occurrences))]
pub verbose: u8,
#[structopt(short = "C", long, global = true)]
pub colors: bool,
#[structopt(short = "D", long, global = true)]
pub data: Option<PathBuf>,
#[structopt(subcommand)]
pub subcommand: Option<SubCommand>,
}
#[derive(StructOpt)]
pub enum SubCommand {
Scan(Scan),
Scheduler(Scheduler),
Infections(Infections),
TestNotify,
DumpConfig,
Completions(Completions),
}
#[derive(StructOpt, Default)]
pub struct Scan {
pub paths: Vec<PathBuf>,
#[structopt(short = "j", long)]
pub concurrency: Option<usize>,
}
#[derive(StructOpt)]
pub struct Scheduler {}
#[derive(StructOpt)]
pub struct Infections {
#[structopt(short, long, group = "action")]
pub delete: bool,
#[structopt(long, group = "action")]
pub delete_all: bool,
}
#[derive(Debug, Clone, StructOpt)]
pub struct Completions {
#[structopt(possible_values=&Shell::variants())]
pub shell: Shell,
}
impl Completions {
pub fn gen_completions(&self) -> Result<()> {
Args::clap().gen_completions_to("libredefender", self.shell, &mut stdout());
Ok(())
}
}