use clap::{Parser, Subcommand};
mod action_rule_cli;
mod add_label_cli;
mod add_rule_cli;
mod list_label_cli;
mod remove_label_cli;
mod rm_rule_cli;
use action_rule_cli::ActionRuleCli;
use add_label_cli::AddLabelCli;
use cull_gmail::{Result, Rules};
use list_label_cli::ListLabelCli;
use remove_label_cli::RemoveLabelCli;
#[derive(Subcommand, Debug)]
enum SubCmds {
#[clap(name = "list-rules")]
ListRules,
#[clap(name = "add-rule")]
AddRule(add_rule_cli::AddRuleCli),
#[clap(name = "remove-rule", alias = "rm-rule")]
RemoveRule(rm_rule_cli::RmRuleCli),
#[clap(name = "set-action-on-rule")]
ActionRule(ActionRuleCli),
#[clap(name = "list-labels")]
List(ListLabelCli),
#[clap(name = "add-label")]
Add(AddLabelCli),
#[clap(name = "remove-label", alias = "rm-label")]
Remove(RemoveLabelCli),
}
#[derive(Parser, Debug)]
pub struct ConfigCli {
#[command(subcommand)]
sub_command: SubCmds,
}
impl ConfigCli {
pub fn run(&self, rules: Rules) -> Result<()> {
match &self.sub_command {
SubCmds::ActionRule(action_cli) => action_cli.run(rules),
SubCmds::ListRules => rules.list_rules(),
SubCmds::AddRule(add_cli) => add_cli.run(rules),
SubCmds::RemoveRule(rm_cli) => rm_cli.run(rules),
SubCmds::List(list_cli) => list_cli.run(rules),
SubCmds::Add(add_cli) => add_cli.run(rules),
SubCmds::Remove(rm_cli) => rm_cli.run(rules),
}
}
}