Skip to main content

eska_presentation/arguments/vcs/
status.rs

1//! Shared VCS argument metadata; repository execution stays in its process owner.
2
3use crate::localization::Localizer;
4use clap::{Args, ValueEnum};
5
6#[derive(Debug, Args)]
7pub struct StatusArgs {
8    #[arg(long, value_enum, default_value_t = OutputFormat::Human)]
9    pub format: OutputFormat,
10
11    #[arg(short = 'p', long)]
12    pub project: Vec<String>,
13
14    #[arg(long)]
15    pub workspace: bool,
16
17    #[arg(short, long, action = clap::ArgAction::Help)]
18    pub help: Option<bool>,
19}
20
21#[derive(Clone, Copy, Debug, Default, ValueEnum)]
22pub enum OutputFormat {
23    #[default]
24    Human,
25    Json,
26}
27
28/// Attach localized arguments without changing the command contract.
29#[must_use]
30pub fn localize(command: clap::Command, localizer: &Localizer) -> clap::Command {
31    command
32        .about(localizer.text("status-about"))
33        .override_usage(localizer.text("status-usage"))
34        .mut_arg("format", |argument| {
35            argument
36                .help(localizer.text("status-format-help"))
37                .value_name(localizer.text("status-format-value"))
38        })
39        .mut_arg("project", |argument| {
40            argument
41                .help(localizer.text("status-project-help"))
42                .value_name(localizer.text("status-project-value"))
43        })
44        .mut_arg("workspace", |argument| {
45            argument.help(localizer.text("status-workspace-help"))
46        })
47        .mut_arg("help", |argument| argument.help(localizer.text("cli-help")))
48}