use light_fw_cli_core::dev::{parse_dev_command, run as run_dev};
#[derive(clap::Args, Debug)]
pub struct DevArgs {
pub package: Option<String>,
#[arg(long, default_value_t = false)]
pub verbose: bool,
#[arg(long, default_value_t = false)]
pub clean: bool,
#[arg(long, default_value_t = false)]
pub preserve_state: bool,
#[arg(long, default_value_t = false)]
pub agent: bool,
#[arg(trailing_var_arg = true)]
pub extra_cargo_args: Vec<String>,
}
pub fn run(args: DevArgs) -> anyhow::Result<i32> {
let verbose = args.verbose;
let mut raw: Vec<String> = Vec::new();
if let Some(package) = &args.package {
raw.push(package.clone());
}
if verbose {
raw.push("--verbose".into());
}
if args.clean {
raw.push("--clean".into());
}
if args.preserve_state {
raw.push("--preserve-state".into());
}
if args.agent {
raw.push("--agent".into());
}
raw.extend(args.extra_cargo_args);
let parsed = parse_dev_command(&raw);
eprintln!(
"light dev: запускаю `cargo run{} --features dev-mode {}`",
parsed
.package
.as_ref()
.map(|p| format!(" -p {p}"))
.unwrap_or_default(),
parsed.extra_cargo_args.join(" "),
);
match run_dev(&parsed) {
Ok(code) => Ok(code),
Err(e) => Err(anyhow::anyhow!("{e}")),
}
}