io_email/message/m2dir/
delete.rs1use std::path::PathBuf;
14
15use io_m2dir::{
16 coroutine::*,
17 entry::delete::{
18 M2dirEntryDelete as InnerDelete, M2dirEntryDeleteError as InnerErr,
19 M2dirEntryDeleteOptions as InnerOpts,
20 },
21};
22use log::trace;
23use thiserror::Error;
24
25use crate::m2dir::convert::{InvalidMailboxName, resolve_mailbox};
26
27#[derive(Debug, Error)]
29pub enum M2dirMessageDeleteError {
30 #[error(transparent)]
31 Delete(#[from] InnerErr),
32 #[error(transparent)]
33 InvalidMailbox(#[from] InvalidMailboxName),
34}
35
36pub struct M2dirMessageDelete {
38 inner: InnerDelete,
39}
40
41impl M2dirMessageDelete {
42 pub fn new(
43 root: impl Into<PathBuf>,
44 mailbox: &str,
45 id: &str,
46 ) -> Result<Self, M2dirMessageDeleteError> {
47 trace!("prepare m2dir message delete");
48 let m2dir = resolve_mailbox(root, mailbox)?;
49 Ok(Self {
50 inner: InnerDelete::new(m2dir, id, InnerOpts::default()),
51 })
52 }
53}
54
55impl M2dirCoroutine for M2dirMessageDelete {
56 type Yield = M2dirYield;
57 type Return = Result<(), M2dirMessageDeleteError>;
58
59 fn resume(&mut self, arg: Option<M2dirArg>) -> M2dirCoroutineState<Self::Yield, Self::Return> {
60 match self.inner.resume(arg) {
61 M2dirCoroutineState::Yielded(y) => M2dirCoroutineState::Yielded(y),
62 M2dirCoroutineState::Complete(r) => {
63 M2dirCoroutineState::Complete(r.map_err(Into::into))
64 }
65 }
66 }
67}