use crate::cli::command::rules::add::RulesAddArgs;
use crate::cli::command::rules::list::RulesListArgs;
use crate::cli::command::rules::remove::RulesRemoveArgs;
use arbitrary::Arbitrary;
use facet::Facet;
use figue::{self as args};
#[derive(Facet, Arbitrary, PartialEq, Eq, Debug, Default)]
#[repr(u8)]
#[facet(rename_all = "kebab-case")]
pub enum RulesMutationDirective {
#[default]
Include,
Exclude,
DefaultInclude,
DefaultExclude,
}
#[derive(Facet, Arbitrary, PartialEq, Debug)]
pub struct RuleArgs {
#[facet(args::subcommand)]
pub command: RulesCommand,
}
#[derive(Facet, Arbitrary, PartialEq, Debug)]
#[repr(u8)]
#[facet(rename_all = "kebab-case")]
pub enum RulesCommand {
Add(RulesAddArgs),
List(RulesListArgs),
Remove(RulesRemoveArgs),
}
impl RuleArgs {
pub fn invoke(self) -> eyre::Result<()> {
match self.command {
RulesCommand::Add(args) => args.invoke(),
RulesCommand::List(args) => args.invoke(),
RulesCommand::Remove(args) => args.invoke(),
}
}
}