From fb7154f75274cb16e35d4d8e3089386bab80f242 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 10 Oct 2025 12:42:27 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(cli):=20implement=20rule=20exe?= =?UTF-8?q?cution=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add logic to iterate through labels and execute associated rules - retrieve rules based on label and perform actions like trashing/deleting messages - log warnings for missing rules or invalid actions --- src/cli/run_cli.rs | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/cli/run_cli.rs b/src/cli/run_cli.rs index e070aea..fffc5bc 100644 --- a/src/cli/run_cli.rs +++ b/src/cli/run_cli.rs @@ -1,11 +1,32 @@ use clap::Parser; -use cull_gmail::Result; +use cull_gmail::{Config, EolAction, Result}; #[derive(Debug, Parser)] pub struct RunCli {} impl RunCli { - pub async fn run(&self, _credential: &str) -> Result<()> { + pub async fn run(&self, config: Config) -> Result<()> { + let rules = config.get_rules_by_label(); + + for label in config.labels() { + let Some(rule) = rules.get(&label) else { + log::warn!("no rule found for label `{label}`"); + continue; + }; + + log::info!("Executing rule `#{}` for label `{label}`", rule.describe()); + + let Some(action) = rule.action() else { + log::warn!("no valid action specified for rule #{}", rule.id()); + continue; + }; + + match action { + EolAction::Trash => log::info!("trashing older messages"), + EolAction::Delete => log::info!("deleting older messages"), + } + } + Ok(()) } }