use clap::Parser;
const ABOUT: &str = "Inspect a Radicle repository";
const LONG_ABOUT: &str = r#"Inspects the given path or RID. If neither is specified,
the current repository is inspected.
"#;
#[derive(Debug, Parser)]
#[group(multiple = false)]
pub(super) struct TargetArgs {
#[arg(long)]
pub(super) delegates: bool,
#[arg(long)]
pub(super) history: bool,
#[arg(long)]
pub(super) identity: bool,
#[arg(long)]
pub(super) payload: bool,
#[arg(long)]
pub(super) policy: bool,
#[arg(long)]
pub(super) refs: bool,
#[arg(long)]
pub(super) rid: bool,
#[arg(long)]
pub(super) sigrefs: bool,
#[arg(long)]
pub(super) visibility: bool,
}
pub(super) enum Target {
Delegates,
History,
Identity,
Payload,
Policy,
Refs,
RepoId,
Sigrefs,
Visibility,
}
impl From<TargetArgs> for Target {
fn from(args: TargetArgs) -> Self {
match (
args.delegates,
args.history,
args.identity,
args.payload,
args.policy,
args.refs,
args.rid,
args.sigrefs,
args.visibility,
) {
(true, false, false, false, false, false, false, false, false) => Target::Delegates,
(false, true, false, false, false, false, false, false, false) => Target::History,
(false, false, true, false, false, false, false, false, false) => Target::Identity,
(false, false, false, true, false, false, false, false, false) => Target::Payload,
(false, false, false, false, true, false, false, false, false) => Target::Policy,
(false, false, false, false, false, true, false, false, false) => Target::Refs,
(false, false, false, false, false, false, true, false, false)
| (false, false, false, false, false, false, false, false, false) => Target::RepoId,
(false, false, false, false, false, false, false, true, false) => Target::Sigrefs,
(false, false, false, false, false, false, false, false, true) => Target::Visibility,
_ => unreachable!(),
}
}
}
#[derive(Debug, Parser)]
#[command(about = ABOUT, long_about = LONG_ABOUT, disable_version_flag = true)]
pub struct Args {
#[arg(value_name = "RID|PATH")]
pub(super) repo: Option<String>,
#[clap(flatten)]
pub(super) target: TargetArgs,
}