bytes_radar/cli/
args.rs

1use clap::{Parser, ValueEnum};
2
3#[derive(Parser)]
4#[command(name = "bradar")]
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  bradar user/repo                    # GitHub repo (default branch)
20  bradar user/repo@master             # GitHub repo with specific branch
21  bradar user/repo@abc123             # GitHub repo with specific commit
22  bradar https://github.com/user/repo # Full GitHub URL
23  bradar https://gitlab.com/user/repo # GitLab URL
24  bradar https://bitbucket.org/user/repo # Bitbucket URL
25  bradar https://example.com/file.tar.gz # Direct tar.gz URL
26  bradar -f json user/repo            # JSON output format
27  bradar --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    #[arg(long, help = "Enable aggressive filtering for maximum performance")]
58    pub aggressive_filter: bool,
59
60    #[arg(
61        long,
62        help = "Maximum file size to process in KB",
63        default_value = "1024"
64    )]
65    pub max_file_size: u64,
66
67    #[arg(long, help = "Include test directories")]
68    pub include_tests: bool,
69
70    #[arg(long, help = "Include documentation directories")]
71    pub include_docs: bool,
72}
73
74#[derive(Clone, ValueEnum)]
75pub enum OutputFormat {
76    #[value(name = "table")]
77    Table,
78    #[value(name = "json")]
79    Json,
80    #[value(name = "csv")]
81    Csv,
82    #[value(name = "xml")]
83    Xml,
84}
85
86impl Default for OutputFormat {
87    fn default() -> Self {
88        Self::Table
89    }
90}