From 209b8a6a466ea3d9314f549b65c90f783d961fb9 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 31 Oct 2025 14:36:15 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(cli):=20restructure=20rules=20?= =?UTF-8?q?config=20CLI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 【Refactor】Move label subcommands (add, list, remove) into separate modules for better organization - 【Refactor】Rename `LabelCli` to `ListLabelCli`, `AddCli` to `AddLabelCli`, and `RemoveCli` to `RemoveLabelCli` - 【Refactor】Rename `LabelCommands` to `List`, `Add`, and `Remove` - 【Refactor】Rename `remove-rule` alias to `rm-rule` and `remove-label` alias to `rm-label` - 【Feat】Add `ListLabelCli`, `AddLabelCli`, and `RemoveLabelCli` to handle label-related operations - 【Feat】Update `ConfigCli` to use the new label subcommands and modules - 【Remove】Remove the `label_cli.rs` file as its functionality is now distributed --- src/cli/rules_cli/config_cli.rs | 41 ++++++++++++------- .../add_cli.rs => add_label_cli.rs} | 4 +- src/cli/rules_cli/config_cli/label_cli.rs | 40 ------------------ .../list_cli.rs => list_label_cli.rs} | 4 +- .../remove_cli.rs => remove_label_cli.rs} | 4 +- 5 files changed, 32 insertions(+), 61 deletions(-) rename src/cli/rules_cli/config_cli/{label_cli/add_cli.rs => add_label_cli.rs} (91%) delete mode 100644 src/cli/rules_cli/config_cli/label_cli.rs rename src/cli/rules_cli/config_cli/{label_cli/list_cli.rs => list_label_cli.rs} (93%) rename src/cli/rules_cli/config_cli/{label_cli/remove_cli.rs => remove_label_cli.rs} (90%) diff --git a/src/cli/rules_cli/config_cli.rs b/src/cli/rules_cli/config_cli.rs index e643837..2cad7f3 100644 --- a/src/cli/rules_cli/config_cli.rs +++ b/src/cli/rules_cli/config_cli.rs @@ -1,31 +1,40 @@ use clap::{Parser, Subcommand}; mod action_rule_cli; +mod add_label_cli; mod add_rule_cli; -mod label_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 label_cli::LabelCli; +use list_label_cli::ListLabelCli; +use remove_label_cli::RemoveLabelCli; #[derive(Subcommand, Debug)] enum SubCmds { /// List the rules configured and saved in the config file - #[clap(name = "list")] - List, + #[clap(name = "list-rules")] + ListRules, /// Add a rules to the config file #[clap(name = "add-rule")] - Add(add_rule_cli::AddRuleCli), + AddRule(add_rule_cli::AddRuleCli), /// Remove a rule from the config file - #[clap(name = "remove-rule", alias = "rm")] - Remove(rm_rule_cli::RmRuleCli), - /// Add or remove Label from rule - #[clap(name = "label")] - Label(LabelCli), - /// Set action on a specific rule + #[clap(name = "remove-rule", alias = "rm-rule")] + RemoveRule(rm_rule_cli::RmRuleCli), #[clap(name = "set-action-on-rule")] - Action(ActionRuleCli), + ActionRule(ActionRuleCli), + /// List the labels associated with a rule + #[clap(name = "list-labels")] + List(ListLabelCli), + /// Add label to rule + #[clap(name = "add-label")] + Add(AddLabelCli), + /// Remove a label from a + #[clap(name = "remove-label", alias = "rm-label")] + Remove(RemoveLabelCli), } #[derive(Parser, Debug)] @@ -39,9 +48,11 @@ pub struct ConfigCli { impl ConfigCli { pub fn run(&self, rules: Rules) -> Result<()> { match &self.sub_command { - SubCmds::Label(label_cli) => label_cli.run(rules), - SubCmds::Action(action_cli) => action_cli.run(rules), - SubCmds::List => rules.list_rules(), + 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), } diff --git a/src/cli/rules_cli/config_cli/label_cli/add_cli.rs b/src/cli/rules_cli/config_cli/add_label_cli.rs similarity index 91% rename from src/cli/rules_cli/config_cli/label_cli/add_cli.rs rename to src/cli/rules_cli/config_cli/add_label_cli.rs index dd57fe6..180079e 100644 --- a/src/cli/rules_cli/config_cli/label_cli/add_cli.rs +++ b/src/cli/rules_cli/config_cli/add_label_cli.rs @@ -3,7 +3,7 @@ use clap::Parser; use cull_gmail::{Error, Result, Rules}; #[derive(Debug, Parser)] -pub struct AddCli { +pub struct AddLabelCli { /// Id of the rule on which action applies #[clap(short, long)] id: usize, @@ -12,7 +12,7 @@ pub struct AddCli { label: String, } -impl AddCli { +impl AddLabelCli { pub fn run(&self, mut config: Rules) -> Result<()> { if config.get_rule(self.id).is_none() { return Err(Error::RuleNotFound(self.id)); diff --git a/src/cli/rules_cli/config_cli/label_cli.rs b/src/cli/rules_cli/config_cli/label_cli.rs deleted file mode 100644 index 90c720e..0000000 --- a/src/cli/rules_cli/config_cli/label_cli.rs +++ /dev/null @@ -1,40 +0,0 @@ -use clap::{Parser, Subcommand}; -use cull_gmail::{Error, Rules}; - -mod add_cli; -mod list_cli; -mod remove_cli; - -use add_cli::AddCli; -use list_cli::ListCli; -use remove_cli::RemoveCli; - -#[derive(Debug, Subcommand)] -pub enum LabelCommands { - /// List the labels associated with a rule - #[clap(name = "list")] - List(ListCli), - /// Add label to rule - #[clap(name = "add")] - Add(AddCli), - /// Remove a label from a - #[clap(name = "remove", alias = "rm")] - Remove(RemoveCli), -} - -#[derive(Debug, Parser)] -pub struct LabelCli { - /// Configuration commands - #[command(subcommand)] - command: LabelCommands, -} - -impl LabelCli { - pub fn run(&self, config: Rules) -> Result<(), Error> { - match &self.command { - LabelCommands::List(list_cli) => list_cli.run(config), - LabelCommands::Add(add_cli) => add_cli.run(config), - LabelCommands::Remove(rm_cli) => rm_cli.run(config), - } - } -} diff --git a/src/cli/rules_cli/config_cli/label_cli/list_cli.rs b/src/cli/rules_cli/config_cli/list_label_cli.rs similarity index 93% rename from src/cli/rules_cli/config_cli/label_cli/list_cli.rs rename to src/cli/rules_cli/config_cli/list_label_cli.rs index 38f50cb..c7b2c0b 100644 --- a/src/cli/rules_cli/config_cli/label_cli/list_cli.rs +++ b/src/cli/rules_cli/config_cli/list_label_cli.rs @@ -3,13 +3,13 @@ use clap::Parser; use cull_gmail::{Error, Result, Rules}; #[derive(Debug, Parser)] -pub struct ListCli { +pub struct ListLabelCli { /// Id of the rule on which action applies #[clap(short, long)] id: usize, } -impl ListCli { +impl ListLabelCli { pub fn run(&self, config: Rules) -> Result<()> { let Some(rule) = config.get_rule(self.id) else { return Err(Error::RuleNotFound(self.id)); diff --git a/src/cli/rules_cli/config_cli/label_cli/remove_cli.rs b/src/cli/rules_cli/config_cli/remove_label_cli.rs similarity index 90% rename from src/cli/rules_cli/config_cli/label_cli/remove_cli.rs rename to src/cli/rules_cli/config_cli/remove_label_cli.rs index 6e441b0..b2a5c32 100644 --- a/src/cli/rules_cli/config_cli/label_cli/remove_cli.rs +++ b/src/cli/rules_cli/config_cli/remove_label_cli.rs @@ -3,7 +3,7 @@ use clap::Parser; use cull_gmail::{Error, Result, Rules}; #[derive(Debug, Parser)] -pub struct RemoveCli { +pub struct RemoveLabelCli { /// Id of the rule on which action applies #[clap(short, long)] id: usize, @@ -12,7 +12,7 @@ pub struct RemoveCli { label: String, } -impl RemoveCli { +impl RemoveLabelCli { pub fn run(&self, mut config: Rules) -> Result<()> { if config.get_rule(self.id).is_none() { return Err(Error::RuleNotFound(self.id));