use clap::{Arg, Command};
use color_eyre::Result;
use crate::busybox::groupdel::{GroupDelOptions, run as run_groupdel};
#[derive(Debug, Clone)]
pub struct DelGroupCmd {
pub options: GroupDelOptions,
pub system: bool,
}
pub fn parse_options(matches: &clap::ArgMatches) -> Result<DelGroupCmd> {
let system = matches.get_flag("system");
let name = matches
.get_one::<String>("group")
.expect("group name is required")
.clone();
let options = GroupDelOptions {
force: false,
root: None,
prefix: None,
name,
};
Ok(DelGroupCmd { options, system })
}
pub fn command() -> Command {
Command::new("delgroup")
.about("Debian-compatible delgroup (minimal subset)")
.arg(
Arg::new("quiet")
.long("quiet")
.help("Suppress most messages")
.action(clap::ArgAction::SetTrue),
)
.arg(
Arg::new("system")
.long("system")
.help("Restrict to system groups (ignored here)")
.action(clap::ArgAction::SetTrue),
)
.arg(
Arg::new("only_if_empty")
.long("only-if-empty")
.help("Fail if group is not empty")
.action(clap::ArgAction::SetTrue),
)
.arg(
Arg::new("group")
.required(true)
.value_name("GROUP")
.help("Group name"),
)
}
pub fn run(cmd: DelGroupCmd) -> Result<()> {
let _ = cmd.system;
run_groupdel(cmd.options)?;
Ok(())
}