use std::process::{Command, Stdio};
use crate::error::{CliError, CliResult};
use super::toolchain;
pub struct RunOptions {
pub args: Vec<String>,
pub no_bootstrap: bool,
}
pub fn run(opts: RunOptions) -> CliResult<()> {
toolchain::ensure_toolchain(opts.no_bootstrap)?;
let mut cmd = Command::new("just");
if opts.args.is_empty() {
cmd.arg("--list");
} else {
cmd.args(&opts.args);
}
cmd.stdin(Stdio::inherit())
.stdout(Stdio::inherit())
.stderr(Stdio::inherit());
let status = cmd.status().map_err(|err| {
if err.kind() == std::io::ErrorKind::NotFound {
CliError::Anyhow(anyhow::anyhow!(
"`just` not found on PATH — run `nestrs run` again to bootstrap it, or install it with `cargo install --locked just`"
))
} else {
CliError::Io(err)
}
})?;
if !status.success() {
std::process::exit(status.code().unwrap_or(1));
}
Ok(())
}