bytes_radar/cli/
args.rs

1use clap::{Parser, ValueEnum};
2
3#[derive(Parser)]
4#[command(name = "bytes-radar")]
5#[command(about = "A tool for analyzing code statistics from remote repositories")]
6#[command(version)]
7#[command(long_about = "
8A professional code analysis tool for remote repositories.
9
10SUPPORTED PLATFORMS:
11  - GitHub (github.com)
12  - GitLab (gitlab.com, self-hosted)
13  - Bitbucket (bitbucket.org)
14  - Codeberg (codeberg.org)
15  - SourceForge (sourceforge.net)
16  - Direct tar.gz/tgz URLs
17
18USAGE EXAMPLES:
19  bytes-radar user/repo                    # GitHub repo (default branch)
20  bytes-radar user/repo@master             # GitHub repo with specific branch
21  bytes-radar user/repo@abc123             # GitHub repo with specific commit
22  bytes-radar https://github.com/user/repo # Full GitHub URL
23  bytes-radar https://gitlab.com/user/repo # GitLab URL
24  bytes-radar https://bitbucket.org/user/repo # Bitbucket URL
25  bytes-radar https://example.com/file.tar.gz # Direct tar.gz URL
26  bytes-radar -f json user/repo            # JSON output format
27  bytes-radar --token ghp_xxx user/repo    # With GitHub token for private repos
28")]
29pub struct Cli {
30    #[arg(help = "URL to analyze: user/repo, user/repo@branch, or full URL")]
31    pub url: Option<String>,
32
33    #[arg(short, long, help = "Output format", value_enum)]
34    pub format: Option<OutputFormat>,
35
36    #[arg(long, help = "Show detailed file-by-file statistics")]
37    pub detailed: bool,
38
39    #[arg(short = 'd', long = "debug", help = "Enable debug output")]
40    pub debug: bool,
41
42    #[arg(long, help = "GitHub token for private repositories")]
43    pub token: Option<String>,
44
45    #[arg(long, help = "Request timeout in seconds", default_value = "300")]
46    pub timeout: u64,
47
48    #[arg(long, help = "Allow insecure HTTP connections")]
49    pub allow_insecure: bool,
50
51    #[arg(long, help = "Disable progress bar")]
52    pub no_progress: bool,
53
54    #[arg(long, help = "Quiet mode - minimal output")]
55    pub quiet: bool,
56}
57
58#[derive(Clone, ValueEnum)]
59pub enum OutputFormat {
60    #[value(name = "table")]
61    Table,
62    #[value(name = "json")]
63    Json,
64    #[value(name = "csv")]
65    Csv,
66    #[value(name = "xml")]
67    Xml,
68}
69
70impl Default for OutputFormat {
71    fn default() -> Self {
72        Self::Table
73    }
74}