use clap::{Parser as _, ValueEnum};
use inquisitor_core::time::parse_duration;
use inquisitor_core::{Config, Method, Result, MAX_CONNS};
use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Copy, Clone, PartialEq, Eq, ValueEnum)]
enum CliMethod {
Get,
Post,
}
impl From<CliMethod> for Method {
fn from(method: CliMethod) -> Self {
match method {
CliMethod::Get => Method::Get,
CliMethod::Post => Method::Post,
}
}
}
#[derive(clap::Parser)]
#[command(about, version, disable_colored_help = true)]
struct Cli {
#[clap(value_parser)]
url: String,
#[clap(long, short = 'n', value_parser)]
iterations: Option<usize>,
#[clap(long, short = 'c', default_value_t = MAX_CONNS, value_parser)]
connections: usize,
#[clap(long, action)]
print_response: bool,
#[clap(long, value_parser)]
failed_body: Option<String>,
#[clap(long, short = 'k', action)]
insecure: bool,
#[clap(long, default_value_t = CliMethod::Get, value_enum)]
method: CliMethod,
#[clap(long, short = 'b', value_parser)]
request_body: Option<String>,
#[clap(long, short = 'H', value_parser)]
header: Vec<String>,
#[clap(long, action)]
hide_errors: bool,
#[clap(long, short = 'd', value_parser = parse_duration)]
duration: Option<Duration>,
#[clap(long, value_parser)]
ca_cert: Option<PathBuf>,
}
impl From<Cli> for Config {
fn from(cli: Cli) -> Self {
Self {
ca_cert: cli.ca_cert,
connections: cli.connections,
duration: cli.duration,
failed_body: cli.failed_body,
header: cli.header,
hide_errors: cli.hide_errors,
insecure: cli.insecure,
iterations: cli.iterations,
method: cli.method.into(),
print_response: cli.print_response,
request_body: cli.request_body,
url: cli.url,
}
}
}
fn main() -> Result<()> {
let config = Cli::parse();
inquisitor_core::run(config)
}