imap_client/tasks/tasks/
create.rs

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