1use crate::config::{HttpMethod, OutputFormat};
2use clap::{Parser, Subcommand};
3use clap_complete::Shell;
4
5#[derive(Parser)]
7#[command(name = "thundra")]
8#[command(version, about = "Thundra is an API benchmark tool built with Rust")]
9pub struct Cli {
10 #[command(subcommand)]
11 pub command: Option<Commands>,
12
13 pub url: Option<String>,
15
16 #[arg(short, long, value_enum, default_value = "get")]
18 pub method: HttpMethod,
19
20 #[arg(short, long, default_value_t = 10)]
22 pub concurrency: usize,
23
24 #[arg(short = 'n', long, conflicts_with = "duration")]
26 pub requests: Option<usize>,
27
28 #[arg(short, long, conflicts_with = "requests")]
30 pub duration: Option<String>,
31
32 #[arg(short = 'H', long = "header")]
34 pub headers: Vec<String>,
35
36 #[arg(short, long)]
38 pub body: Option<String>,
39
40 #[arg(short, long, default_value_t = 30)]
42 pub timeout: u64,
43
44 #[arg(short = 'r', long)]
46 pub rate: Option<u64>,
47
48 #[arg(short = 'k', long)]
50 pub insecure: bool,
51
52 #[arg(short = 'o', long, value_enum, default_value_t = OutputFormat::Text)]
54 pub output: OutputFormat,
55}
56
57#[derive(Subcommand)]
58pub enum Commands {
59 Completions {
61 #[arg(value_enum)]
63 shell: Shell,
64 },
65}