use std::path::PathBuf;
use bpaf::Bpaf;
#[must_use]
pub fn arguments() -> Cli {
let usage_prefix = "Usage: acorns {usage}";
cli().usage(usage_prefix).run()
}
#[derive(Clone, Debug, Bpaf)]
#[bpaf(options, version)]
pub struct Cli {
#[bpaf(short, long, switch, many, map(vec_len))]
pub verbose: usize,
#[bpaf(external(commands))]
pub command: Commands,
}
#[derive(Clone, Debug, Bpaf)]
pub enum Commands {
#[bpaf(command)]
Build {
#[bpaf(positional::<PathBuf>("DIR"), fallback(".".into()))]
project: PathBuf,
},
#[bpaf(command)]
Ticket {
#[bpaf(
short,
long,
argument("FILE"),
fallback("./acorns/trackers.yaml".into())
)]
config: PathBuf,
#[bpaf(short, long, argument("SECRET"))]
api_key: Option<String>,
#[bpaf(positional::<String>("SERVICE"))]
tracker: String,
#[bpaf(positional::<String>("ID"))]
id: String,
},
#[bpaf(command)]
Convert {
#[bpaf(
short,
long,
argument("FILE"),
fallback("./corn.yaml".into())
)]
legacy_config: PathBuf,
#[bpaf(
short,
long,
argument("FILE"),
fallback("./tickets.yaml".into())
)]
new_config: PathBuf,
},
#[bpaf(command)]
Init {
#[bpaf(
positional::<PathBuf>("DIR"),
fallback(".".into())
)]
directory: PathBuf,
},
}
#[allow(clippy::needless_pass_by_value)]
fn vec_len(vec: Vec<bool>) -> usize {
vec.iter().filter(|&b| *b).count()
}