use clap::Parser;
use crate::{account::context::Account, email::mailbox::MailboxRole};
#[derive(Clone, Debug, Default, Parser)]
pub struct MailboxArg {
#[arg(short = 'm', long = "mailbox", value_name = "NAME")]
pub inner: Option<String>,
}
impl MailboxArg {
pub fn resolve(&self, account: &Account) -> String {
resolve_mailbox_or_default(account, self.inner.as_deref())
}
}
pub fn resolve_mailbox_or_default(account: &Account, name: Option<&str>) -> String {
let name = name.unwrap_or(MailboxRole::Inbox.as_str());
account.resolve_mailbox(name).to_string()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::config::{Config, MailboxConfig};
#[test]
fn omitted_mailbox_is_the_inbox_alias_else_the_inbox_role() {
let bare = Account::from(Config::default());
assert_eq!(resolve_mailbox_or_default(&bare, None), "inbox");
let aliased = Account::from(Config {
mailbox: MailboxConfig {
aliases: [("inbox".to_string(), "raw-id".to_string())].into(),
..MailboxConfig::default()
},
..Config::default()
});
assert_eq!(resolve_mailbox_or_default(&aliased, None), "raw-id");
assert_eq!(resolve_mailbox_or_default(&aliased, Some("Sent")), "Sent");
}
}