#![allow(dead_code)]
use clap::Parser;
use qn::cli::Cli;
use qn::errors::{exit_code_for, render};
pub struct RunOutput {
pub stdout: String,
pub stderr: String,
pub exit_code: i32,
}
pub async fn run_qn(base_url: &str, extra_args: &[&str]) -> RunOutput {
let mut argv: Vec<String> = vec![
"qn".to_string(),
"--api-key".to_string(),
"test".to_string(),
"--base-url".to_string(),
base_url.to_string(),
"--no-input".to_string(),
"--no-color".to_string(),
];
argv.extend(extra_args.iter().map(|s| s.to_string()));
let cli = match Cli::try_parse_from(&argv) {
Ok(c) => c,
Err(e) => {
let exit = if e.use_stderr() { 2 } else { 0 };
return RunOutput {
stdout: String::new(),
stderr: e.to_string(),
exit_code: exit,
};
}
};
let verbose = cli.verbose;
match cli.run().await {
Ok(()) => RunOutput {
stdout: String::new(),
stderr: String::new(),
exit_code: 0,
},
Err(e) => RunOutput {
stdout: String::new(),
stderr: render(&e, verbose),
exit_code: exit_code_for(&e),
},
}
}
pub fn parse(extra_args: &[&str]) -> Result<Cli, clap::Error> {
let mut argv: Vec<String> = vec!["qn".to_string()];
argv.extend(extra_args.iter().map(|s| s.to_string()));
Cli::try_parse_from(&argv)
}