cull_gmail/
delete.rs

1use google_gmail1::api::BatchDeleteMessagesRequest;
2
3use crate::{MessageList, Result};
4
5/// Struct for deleting messages
6#[derive(Debug)]
7pub struct Delete {
8    message_list: MessageList,
9}
10
11impl Delete {
12    /// Create a new Delete struct
13    pub async fn new(credential: &str) -> Result<Self> {
14        let message_list = MessageList::new(credential).await?;
15        Ok(Delete { message_list })
16    }
17
18    /// return the message list struct
19    pub fn message_list(&mut self) -> &mut MessageList {
20        &mut self.message_list
21    }
22
23    /// Prepare the message list for delete to be completed on execute by batch_delete
24    pub async fn prepare(&mut self, pages: u32) -> Result<()> {
25        self.message_list.run(pages).await
26    }
27
28    /// Run the batch delete on the selected messages
29    pub async fn batch_delete(&self) -> Result<()> {
30        let ids = Some(self.message_list.message_ids());
31
32        let batch_request = BatchDeleteMessagesRequest { ids };
33
34        log::trace!("{batch_request:#?}");
35
36        let _res = self
37            .message_list
38            .hub()
39            .users()
40            .messages_batch_delete(batch_request, "me")
41            .add_scope("https://mail.google.com/")
42            .doit()
43            .await
44            .map_err(Box::new)?;
45
46        for m in self.message_list.messages() {
47            log::info!("Message with subject `{}` deleted.", m.subject());
48        }
49
50        Ok(())
51    }
52}