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}