Skip to main content

io_gmail/v1/rest/settings/delegates/
delete.rs

1//! Delete a Gmail delegate (`users.settings.delegates.delete`).
2//!
3//! <https://developers.google.com/gmail/api/reference/rest/v1/users.settings.delegates/delete>
4
5use alloc::format;
6
7use io_http::rfc6750::bearer::HttpAuthBearer;
8use log::{debug, trace};
9use url::Url;
10
11use crate::{
12    coroutine::*,
13    gmail_try,
14    v1::send::{GMAIL_API_BASE, GmailNoResponse, GmailSend, GmailSendError, GmailSendOutput},
15};
16
17/// I/O-free coroutine deleting a delegate from a Gmail account
18/// (`users.settings.delegates.delete`).
19pub struct GmailDelegateDelete {
20    send: GmailSend<GmailNoResponse>,
21}
22
23impl GmailDelegateDelete {
24    /// Builds the `users.settings.delegates.delete` request for the given
25    /// delegate email.
26    pub fn new(
27        auth: &HttpAuthBearer,
28        user_id: &str,
29        delegate_email: &str,
30    ) -> Result<Self, GmailSendError> {
31        debug!("prepare gmail delegate deletion");
32        trace!("delegate_email: {delegate_email:?}");
33
34        let url = Url::parse(GMAIL_API_BASE)?.join(&format!(
35            "users/{user_id}/settings/delegates/{delegate_email}"
36        ))?;
37        let send = GmailSend::delete(auth, url);
38
39        Ok(Self { send })
40    }
41}
42
43impl GmailCoroutine for GmailDelegateDelete {
44    type Yield = GmailYield;
45    type Return = Result<GmailSendOutput<GmailNoResponse>, GmailSendError>;
46
47    fn resume(&mut self, arg: Option<&[u8]>) -> GmailCoroutineState<Self::Yield, Self::Return> {
48        let out = gmail_try!(&mut self.send, arg);
49        debug!("delegate deleted");
50        trace!("out: {out:?}");
51        GmailCoroutineState::Complete(Ok(out))
52    }
53}