#![allow(missing_docs, clippy::missing_docs_in_private_items)]
use std::path::PathBuf;
use clap::{ArgGroup, Args, Parser, Subcommand, ValueEnum};
use clap_complete::Shell;
#[derive(Debug, Parser)]
#[command(author, version, about, long_about = None)]
pub struct Opts {
#[command(flatten)]
pub shared: Shared,
#[command(subcommand)]
pub command: Command,
}
#[derive(Debug, Args)]
#[command(
group(
ArgGroup::new("verbosity")
.required(false)
.args(["verbose", "quite"]),
)
)]
pub struct Shared {
#[arg(short, long, action = clap::ArgAction::Count)]
pub verbose: u8,
#[arg(short, long)]
pub quite: bool,
}
#[derive(Debug, Args)]
pub struct OutputShared {
#[arg(long)]
pub json_output: Option<PathBuf>,
#[arg(long)]
pub yaml_output: Option<PathBuf>,
}
#[derive(Debug, Subcommand)]
pub enum Command {
Deploy(Deploy),
Render(Render),
Verify(Verify),
Diff(Diff),
Man(Man),
Completions(Completions),
}
#[derive(Debug, Args)]
pub struct RepoShared {
#[arg(short, long, env = super::PUNKTF_SOURCE_ENVVAR)]
pub source: PathBuf,
#[arg(short, long, env = super::PUNKTF_PROFILE_ENVVAR)]
pub profile: String,
}
#[derive(Debug, Parser)]
pub struct Deploy {
#[command(flatten)]
pub shared: RepoShared,
#[arg(short, long)]
pub target: Option<PathBuf>,
#[arg(short, long)]
pub dry_run: bool,
#[command(flatten)]
pub output: OutputShared,
}
#[derive(Debug, Parser)]
pub struct Render {
#[command(flatten)]
pub shared: RepoShared,
pub dotfile: PathBuf,
}
#[derive(Debug, Parser)]
pub struct Verify {
#[command(flatten)]
pub shared: RepoShared,
#[command(flatten)]
pub output: OutputShared,
}
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum DiffFormat {
#[default]
Pretty,
Unified,
}
#[derive(Debug, Parser)]
pub struct Diff {
#[command(flatten)]
pub shared: RepoShared,
#[arg(value_enum, short, long, default_value_t = DiffFormat::Pretty)]
pub format: DiffFormat,
}
#[derive(Debug, Parser)]
pub struct Man {
#[arg(short, long, default_value = ".")]
pub output: PathBuf,
}
#[derive(Debug, Parser)]
pub struct Completions {
pub shell: Shell,
#[arg(short, long, default_value = ".")]
pub output: PathBuf,
}