gitlab_time_report_cli/
arguments.rs1use chrono::NaiveDate;
4use clap::{Args, Parser, Subcommand};
5use std::path::PathBuf;
6
7const BEFORE_HELP: &str = "\n
8gitlab-time-report exports time logs from Issues and Merge Requests of a GitLab repository \
9to create statistics and charts of your working hours. Use --help on commands to get more information. \
10If no subcommand is used, statistics will be printed directly to your console.";
11
12const AFTER_HELP: &str = "By default, validation of time logs is enabled. \
13It checks for excessive hours, future dates, duplicate time logs and missing summaries.
14If a time log violates any of these rules, it is printed to the console. \
15No automatic correction is performed. You can display the full validation results with --validation-details.";
16
17#[derive(Parser)]
18#[command(version, about, arg_required_else_help = true, before_help = BEFORE_HELP, after_help = AFTER_HELP
19)]
20pub(super) struct Arguments {
21 #[arg(value_name = "URL", env = "GITLAB_URL")]
23 pub(super) url: String,
24
25 #[arg(short, long, env = "GITLAB_TOKEN")]
28 pub(super) token: Option<String>,
29
30 #[arg(short, long, value_delimiter = ',', env = "GITLAB_LABELS")]
35 pub(super) labels: Vec<String>,
36
37 #[arg(long)]
39 pub(super) validation_details: bool,
40
41 #[arg(long, default_value = "10")]
43 pub(super) validation_max_hours: u16,
44
45 #[command(subcommand)]
47 pub(super) command: Option<Command>,
48}
49
50#[derive(Subcommand)]
51pub(super) enum Command {
52 Export {
54 #[arg(short, long, default_value = "timelogs.csv")]
57 output: PathBuf,
58 },
59 Charts {
63 #[command(flatten)]
64 chart_options: ChartOptionsArgs,
65 },
66 Dashboard {
68 #[command(flatten)]
69 chart_options: ChartOptionsArgs,
70 },
71}
72
73#[derive(Args)]
75#[clap(disable_help_flag = true)]
76pub(super) struct ChartOptionsArgs {
77 #[arg(short, long, default_value = "800")]
79 pub(super) width: u16,
80
81 #[arg(short, long, default_value = "480")]
83 pub(super) height: u16,
84
85 #[arg(long, value_name = "PATH_TO_THEME_JSON", env)]
89 pub(super) theme_json: Option<PathBuf>,
90
91 #[arg(short, long, default_value = "charts")]
94 pub(super) output: PathBuf,
95
96 #[arg(long, value_name = "NUMBER_OF_SPRINTS", env)]
99 pub(super) sprints: u16,
100
101 #[arg(long, env)]
103 pub(super) weeks_per_sprint: u16,
104
105 #[arg(long, env)]
107 pub(super) hours_per_person: f32,
108
109 #[arg(long, value_name = "YYYY-MM-DD")]
112 pub(super) start_date: Option<NaiveDate>,
113
114 #[clap(long, action = clap::ArgAction::HelpLong)]
117 help: Option<bool>,
118}