From f0a268861fb036ec28150d395e158a3b5c094514 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Oct 2025 15:59:12 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(trash):=20refacto?= =?UTF-8?q?r=20trash=20module=20to=20trait=20implementation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - remove the `Trash` struct - implement `Trash` as a trait for `GmailClient` - move `batch_move_to_trash` and `batch_trash` functions to the `Trash` trait implementation - update function calls to use the new trait implementation --- src/trash.rs | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/src/trash.rs b/src/trash.rs index a826821..df7f496 100644 --- a/src/trash.rs +++ b/src/trash.rs @@ -1,41 +1,28 @@ use google_gmail1::api::BatchModifyMessagesRequest; -use crate::{GmailClient, MessageList, Result}; +use crate::{GmailClient, Result, message_list::MessageList}; -/// Struct for trashing messages -#[derive(Debug)] -pub struct Trash { - message_list: MessageList, +// /// Struct for trashing messages +// #[derive(Debug)] +// pub struct Trash { +// message_list: MessageList, +// } + +pub(crate) trait Trash { + async fn batch_move_to_trash(&self) -> Result<()>; + async fn batch_trash(&self) -> Result<()>; } -impl Trash { - /// Create a new Trash struct - pub async fn new(client: &GmailClient) -> Result { - let message_list = MessageList::new(client).await?; - Ok(Trash { message_list }) - } - - /// return the message list struct - pub fn message_list(&mut self) -> &mut MessageList { - &mut self.message_list - } - - /// Prepare the trash cli - pub async fn prepare(&mut self, pages: u32) -> Result<()> { - self.message_list.run(pages).await?; - - Ok(()) - } - +impl Trash for GmailClient { /// Move the messages to trash - pub async fn batch_trash(&self) -> Result<()> { + async fn batch_trash(&self) -> Result<()> { self.batch_move_to_trash().await } async fn batch_move_to_trash(&self) -> Result<()> { let add_label_ids = Some(Vec::from(["TRASH".to_string()])); - let ids = Some(self.message_list.message_ids()); - let remove_label_ids = Some(self.message_list.label_ids()); + let ids = Some(self.message_ids()); + let remove_label_ids = Some(self.label_ids()); let batch_request = BatchModifyMessagesRequest { add_label_ids, @@ -46,7 +33,6 @@ impl Trash { log::trace!("{batch_request:#?}"); let _res = self - .message_list .hub() .users() .messages_batch_modify(batch_request, "me") @@ -55,7 +41,7 @@ impl Trash { .await .map_err(Box::new)?; - for m in self.message_list.messages() { + for m in self.messages() { log::info!("Message with subject `{}` moved to trash.", m.subject()); }