imap_client/tasks/tasks/
move.rs1use imap_next::imap_types::{
2 command::CommandBody,
3 mailbox::Mailbox,
4 response::{StatusBody, StatusKind},
5 sequence::SequenceSet,
6};
7
8use super::TaskError;
9use crate::tasks::Task;
10
11pub struct MoveTask {
12 sequence_set: SequenceSet,
13 mailbox: Mailbox<'static>,
14 uid: bool,
15}
16
17impl MoveTask {
18 pub fn new(sequence_set: SequenceSet, mailbox: Mailbox<'static>) -> Self {
19 Self {
20 sequence_set,
21 mailbox,
22 uid: true,
23 }
24 }
25
26 pub fn set_uid(&mut self, uid: bool) {
27 self.uid = uid;
28 }
29
30 pub fn with_uid(mut self, uid: bool) -> Self {
31 self.set_uid(uid);
32 self
33 }
34}
35
36impl Task for MoveTask {
37 type Output = Result<(), TaskError>;
38
39 fn command_body(&self) -> CommandBody<'static> {
40 CommandBody::Move {
41 sequence_set: self.sequence_set.clone(),
42 mailbox: self.mailbox.clone(),
43 uid: self.uid,
44 }
45 }
46
47 fn process_tagged(self, status_body: StatusBody<'static>) -> Self::Output {
48 match status_body.kind {
49 StatusKind::Ok => Ok(()),
50 StatusKind::No => Err(TaskError::UnexpectedNoResponse(status_body)),
51 StatusKind::Bad => Err(TaskError::UnexpectedBadResponse(status_body)),
52 }
53 }
54}