1use google_gmail1::api::BatchModifyMessagesRequest;
2
3use crate::{MessageList, Result};
4
5#[derive(Debug)]
7pub struct Trash {
8 message_list: MessageList,
9}
10
11impl Trash {
12 pub async fn new(credential: &str) -> Result<Self> {
14 let message_list = MessageList::new(credential).await?;
15 Ok(Trash { message_list })
16 }
17
18 pub fn message_list(&mut self) -> &mut MessageList {
20 &mut self.message_list
21 }
22
23 pub async fn run(&mut self, pages: u32) -> Result<()> {
25 self.message_list.run(pages).await?;
26 self.batch_move_to_trash().await?;
27
28 Ok(())
29 }
30
31 async fn batch_move_to_trash(&self) -> Result<()> {
32 let add_label_ids = Some(Vec::from(["TRASH".to_string()]));
33 let ids = Some(self.message_list.message_ids());
34 let remove_label_ids = Some(self.message_list.label_ids());
35
36 let batch_request = BatchModifyMessagesRequest {
37 add_label_ids,
38 ids,
39 remove_label_ids,
40 };
41
42 log::trace!("{batch_request:#?}");
43
44 let _res = self
45 .message_list
46 .hub()
47 .users()
48 .messages_batch_modify(batch_request, "me")
49 .add_scope("https://www.googleapis.com/auth/gmail.modify")
50 .doit()
51 .await
52 .map_err(Box::new)?;
53
54 for m in self.message_list.messages() {
55 log::info!("Message with subject `{}` moved to trash.", m.subject());
56 }
57
58 Ok(())
59 }
60}