use crate::{GlobalArgs, Subcommand, commands::request::BuildRequestCommand};
use clap::{Parser, ValueEnum};
use std::process::ExitCode;
#[derive(Clone, Debug, Parser)]
#[clap(visible_alias = "gen")]
pub struct GenerateCommand {
format: GenerateFormat,
#[clap(flatten)]
build_request: BuildRequestCommand,
#[clap(long)]
execute_triggers: bool,
}
#[derive(Clone, Debug, ValueEnum)]
pub enum GenerateFormat {
Curl,
}
impl Subcommand for GenerateCommand {
async fn execute(self, global: GlobalArgs) -> anyhow::Result<ExitCode> {
match self.format {
GenerateFormat::Curl => {
let (_, http_engine, seed, template_context) = self
.build_request
.build_seed(global, self.execute_triggers)?;
let command = http_engine
.build_curl(seed, &template_context)
.await
.map_err(|error| {
if error.has_trigger_disabled_error() {
anyhow::Error::from(error.error).context(
"Triggered requests are disabled by default; \
pass `--execute-triggers` to enable",
)
} else {
error.error.into()
}
})?;
println!("{command}");
}
}
Ok(ExitCode::SUCCESS)
}
}