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 prepare(&mut self, pages: u32) -> Result<()> {
25 self.message_list.run(pages).await?;
26
27 Ok(())
28 }
29
30 pub async fn batch_trash(&self) -> Result<()> {
32 self.batch_move_to_trash().await
33 }
34
35 async fn batch_move_to_trash(&self) -> Result<()> {
36 let add_label_ids = Some(Vec::from(["TRASH".to_string()]));
37 let ids = Some(self.message_list.message_ids());
38 let remove_label_ids = Some(self.message_list.label_ids());
39
40 let batch_request = BatchModifyMessagesRequest {
41 add_label_ids,
42 ids,
43 remove_label_ids,
44 };
45
46 log::trace!("{batch_request:#?}");
47
48 let _res = self
49 .message_list
50 .hub()
51 .users()
52 .messages_batch_modify(batch_request, "me")
53 .add_scope("https://www.googleapis.com/auth/gmail.modify")
54 .doit()
55 .await
56 .map_err(Box::new)?;
57
58 for m in self.message_list.messages() {
59 log::info!("Message with subject `{}` moved to trash.", m.subject());
60 }
61
62 Ok(())
63 }
64}