io_gmail/v1/rest/messages/
batch_delete.rs1use alloc::{format, string::String};
6
7use io_http::rfc6750::bearer::HttpAuthBearer;
8use log::{debug, trace};
9use serde::Serialize;
10use url::Url;
11
12use crate::{
13 coroutine::*,
14 gmail_try,
15 v1::send::{GMAIL_API_BASE, GmailNoResponse, GmailSend, GmailSendError, GmailSendOutput},
16};
17
18#[derive(Debug, Serialize)]
19struct GmailMessageBatchDeleteRequest<'a> {
20 ids: &'a [String],
21}
22
23pub struct GmailMessagesBatchDelete {
25 send: GmailSend<GmailNoResponse>,
26}
27
28impl GmailMessagesBatchDelete {
29 pub fn new(
32 auth: &HttpAuthBearer,
33 user_id: &str,
34 ids: &[String],
35 ) -> Result<Self, GmailSendError> {
36 debug!("prepare gmail messages batch deletion");
37 trace!("ids: {ids:?}");
38
39 let url =
40 Url::parse(GMAIL_API_BASE)?.join(&format!("users/{user_id}/messages/batchDelete"))?;
41 let body = GmailMessageBatchDeleteRequest { ids };
42 let send = GmailSend::post_json(auth, url, &body)?;
43
44 Ok(Self { send })
45 }
46}
47
48impl GmailCoroutine for GmailMessagesBatchDelete {
49 type Yield = GmailYield;
50 type Return = Result<GmailSendOutput<GmailNoResponse>, GmailSendError>;
51
52 fn resume(&mut self, arg: Option<&[u8]>) -> GmailCoroutineState<Self::Yield, Self::Return> {
53 let out = gmail_try!(&mut self.send, arg);
54 debug!("messages batch deleted");
55 trace!("out: {out:?}");
56 GmailCoroutineState::Complete(Ok(out))
57 }
58}