1use clap::Parser;
2
3use crate::{
4 constants,
5 error::{WtgError, WtgResult},
6 parse_input::{ParsedInput, try_parse_input},
7};
8
9#[derive(Parser, Debug)]
10#[command(
11 name = "wtg",
12 version,
13 about = constants::DESCRIPTION,
14 disable_help_flag = true,
15)]
16pub struct Cli {
17 #[arg(value_name = "COMMIT|ISSUE|FILE|TAG|URL")]
19 pub input: Option<String>,
20
21 #[arg(short = 'r', long, value_name = "URL")]
23 pub repo: Option<String>,
24
25 #[arg(long)]
30 pub fetch: bool,
31
32 #[arg(short, long, action = clap::ArgAction::Help)]
34 help: Option<bool>,
35}
36
37impl Cli {
38 pub(crate) fn parse_input(&self) -> WtgResult<ParsedInput> {
40 let input = self.input.as_ref().ok_or_else(|| WtgError::EmptyInput)?;
41
42 try_parse_input(input, self.repo.as_deref())
43 }
44}