io_email/mailbox/m2dir/
create.rs1use std::path::PathBuf;
14
15use io_m2dir::{
16 coroutine::*,
17 m2dir::create::{
18 M2dirCreate as InnerCreate, M2dirCreateError as InnerErr, M2dirCreateOptions as InnerOpts,
19 },
20 store::M2dirStoreError,
21};
22use log::trace;
23use thiserror::Error;
24
25use crate::m2dir::convert::store_from_root;
26
27#[derive(Debug, Error)]
29pub enum M2dirMailboxCreateError {
30 #[error(transparent)]
31 Create(#[from] InnerErr),
32 #[error(transparent)]
33 InvalidMailbox(#[from] M2dirStoreError),
34}
35
36pub struct M2dirMailboxCreate {
38 inner: InnerCreate,
39}
40
41impl M2dirMailboxCreate {
42 pub fn new(root: impl Into<PathBuf>, name: &str) -> Result<Self, M2dirMailboxCreateError> {
43 trace!("prepare m2dir mailbox create");
44 let store = store_from_root(root);
45 let inner = InnerCreate::new(&store, name, InnerOpts::default())?;
46 Ok(Self { inner })
47 }
48}
49
50impl M2dirCoroutine for M2dirMailboxCreate {
51 type Yield = M2dirYield;
52 type Return = Result<(), M2dirMailboxCreateError>;
53
54 fn resume(&mut self, arg: Option<M2dirArg>) -> M2dirCoroutineState<Self::Yield, Self::Return> {
55 match self.inner.resume(arg) {
56 M2dirCoroutineState::Yielded(y) => M2dirCoroutineState::Yielded(y),
57 M2dirCoroutineState::Complete(Ok(_m2dir)) => M2dirCoroutineState::Complete(Ok(())),
58 M2dirCoroutineState::Complete(Err(err)) => {
59 M2dirCoroutineState::Complete(Err(err.into()))
60 }
61 }
62 }
63}