eska_presentation/arguments/project/
version.rs1use crate::localization::Localizer;
4use clap::{Args, Subcommand, ValueEnum};
5use eska_project_core::project::version::BumpKind;
6
7#[derive(Debug, Args)]
8pub struct VersionArgs {
9 #[command(subcommand)]
10 pub command: Option<VersionCommand>,
11
12 #[arg(long, global = true, value_enum, default_value_t = OutputFormat::Human)]
13 pub format: OutputFormat,
14
15 #[arg(short = 'p', long, global = true)]
16 pub project: Vec<String>,
17
18 #[arg(long, global = true)]
19 pub workspace: bool,
20
21 #[arg(short, long, action = clap::ArgAction::Help)]
22 pub help: Option<bool>,
23}
24
25#[derive(Debug, Subcommand)]
26pub enum VersionCommand {
27 #[command(disable_help_flag = true)]
28 Bump(VersionBumpArgs),
29}
30
31#[derive(Debug, Args)]
32pub struct VersionBumpArgs {
33 #[arg(value_enum)]
34 pub kind: Bump,
35
36 #[arg(short, long, action = clap::ArgAction::Help)]
37 pub help: Option<bool>,
38}
39
40#[derive(Clone, Copy, Debug, ValueEnum)]
41pub enum Bump {
42 Patch,
43 Minor,
44 Major,
45}
46
47#[derive(Clone, Copy, Debug, Default, ValueEnum)]
48pub enum OutputFormat {
49 #[default]
50 Human,
51 Json,
52}
53
54#[must_use]
56pub fn localize(command: clap::Command, localizer: &Localizer) -> clap::Command {
57 command
58 .about(localizer.text("version-about"))
59 .override_usage(localizer.text("version-usage"))
60 .mut_arg("format", |argument| {
61 argument
62 .help(localizer.text("version-format-help"))
63 .value_name(localizer.text("version-format-value"))
64 })
65 .mut_arg("project", |argument| {
66 argument
67 .help(localizer.text("version-project-help"))
68 .value_name(localizer.text("version-project-value"))
69 })
70 .mut_arg("workspace", |argument| {
71 argument.help(localizer.text("version-workspace-help"))
72 })
73 .mut_arg("help", |argument| argument.help(localizer.text("cli-help")))
74 .mut_subcommand("bump", |command| {
75 command
76 .about(localizer.text("version-bump-about"))
77 .override_usage(localizer.text("version-bump-usage"))
78 .mut_arg("kind", |argument| {
79 argument
80 .help(localizer.text("version-bump-kind-help"))
81 .value_name(localizer.text("version-bump-kind-value"))
82 })
83 .mut_arg("help", |argument| argument.help(localizer.text("cli-help")))
84 })
85}
86
87impl From<Bump> for BumpKind {
88 fn from(value: Bump) -> Self {
90 match value {
91 Bump::Patch => Self::Patch,
92 Bump::Minor => Self::Minor,
93 Bump::Major => Self::Major,
94 }
95 }
96}