use clap::Args;
use microsandbox::sandbox::Sandbox;
use crate::ui;
#[derive(Debug, Args)]
pub struct RemoveArgs {
#[arg(required = true)]
pub names: Vec<String>,
#[arg(short, long)]
pub force: bool,
#[arg(short, long)]
pub quiet: bool,
}
pub async fn run(args: RemoveArgs) -> anyhow::Result<()> {
let mut failed = false;
for name in &args.names {
if args.force {
if let Ok(mut handle) = Sandbox::get(name).await {
let _ = handle.kill().await;
}
}
let spinner = if args.quiet {
ui::Spinner::quiet()
} else {
ui::Spinner::start("Removing", name)
};
match Sandbox::remove(name).await {
Ok(()) => {
spinner.finish_success("Removed");
}
Err(e) => {
spinner.finish_clear();
if !args.quiet {
ui::error(&format!("{e}"));
}
failed = true;
}
}
}
if failed {
std::process::exit(1);
}
Ok(())
}