Skip to main content

imap_client/tasks/tasks/
delete.rs

1use imap_next::imap_types::{
2    command::CommandBody,
3    mailbox::Mailbox,
4    response::{StatusBody, StatusKind},
5};
6
7use super::TaskError;
8use crate::tasks::Task;
9
10#[derive(Clone, Debug)]
11pub struct DeleteTask {
12    mailbox: Mailbox<'static>,
13}
14
15impl DeleteTask {
16    pub fn new(mailbox: Mailbox<'static>) -> Self {
17        Self { mailbox }
18    }
19}
20
21impl Task for DeleteTask {
22    type Output = Result<(), TaskError>;
23
24    fn command_body(&self) -> CommandBody<'static> {
25        CommandBody::Delete {
26            mailbox: self.mailbox.clone(),
27        }
28    }
29
30    fn process_tagged(self, status_body: StatusBody<'static>) -> Self::Output {
31        match status_body.kind {
32            StatusKind::Ok => Ok(()),
33            StatusKind::No => Err(TaskError::UnexpectedNoResponse(status_body)),
34            StatusKind::Bad => Err(TaskError::UnexpectedBadResponse(status_body)),
35        }
36    }
37}