macro_rules! map_error {
($this:expr) => {{
let log_prefix = &$this.log_prefix;
let account = $this.account.as_mut();
let selected = $this.selected.as_ref();
move |e| {
let selected_ok = account.map_or(
true, |account| selected.map_or(
true, |s| account.is_usable_mailbox(s)));
catch_all_error_handling(selected_ok, log_prefix, e)
}
}};
(log_prefix = $log_prefix:expr,
$($($kind:ident)|+ => ($cond:ident, $code:expr),)+) => {{
let log_prefix = $log_prefix;
move |e| match e {
$($(Error::$kind)|* => s::Response::Cond(s::CondResponse {
cond: s::RespCondType::$cond,
code: $code,
quip: Some(Cow::Owned(e.to_string())),
}),)*
e => {
catch_all_error_handling(true, log_prefix, e)
}
}
}};
($this:expr, $($($kind:ident)|+ => ($cond:ident, $code:expr),)+) => {{
let log_prefix = &$this.log_prefix;
let account = $this.account.as_mut();
let selected = $this.selected.as_ref();
move |e| match e {
$($(Error::$kind)|* => s::Response::Cond(s::CondResponse {
cond: s::RespCondType::$cond,
code: $code,
quip: Some(Cow::Owned(e.to_string())),
}),)*
e => {
let selected_ok = account.map_or(
true, |account| selected.map_or(
true, |s| account.is_usable_mailbox(s)));
catch_all_error_handling(selected_ok, log_prefix, e)
}
}
}};
}
macro_rules! account {
($this:expr) => {
$this.account.as_mut().ok_or_else(|| {
s::Response::Cond(s::CondResponse {
cond: s::RespCondType::Bad,
code: None,
quip: Some(Cow::Borrowed("Not logged in")),
})
})
};
}
macro_rules! selected {
($this:expr) => {
$this.selected.as_mut().ok_or_else(|| {
s::Response::Cond(s::CondResponse {
cond: s::RespCondType::Bad,
code: None,
quip: Some(Cow::Borrowed("No mailbox selected")),
})
})
};
}
mod auth;
mod commands;
mod defs;
mod fetch;
mod flags;
mod mailboxes;
mod messages;
mod search;
mod smtp_out;
mod user_config;
pub use self::defs::CommandProcessor;