use alloc::{string::String, vec::Vec};
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
pub struct Mailbox {
pub id: String,
pub name: String,
#[cfg_attr(feature = "serde", serde(default))]
pub total: Option<u64>,
#[cfg_attr(feature = "serde", serde(default))]
pub unread: Option<u64>,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
pub enum MailboxRole {
Inbox,
Archive,
Drafts,
Flagged,
Important,
Junk,
Sent,
Trash,
Other(String),
}
impl MailboxRole {
pub fn parse(raw: &str) -> Self {
match raw.trim_start_matches('\\').to_ascii_lowercase().as_str() {
"inbox" => Self::Inbox,
"archive" => Self::Archive,
"drafts" => Self::Drafts,
"flagged" => Self::Flagged,
"important" => Self::Important,
"junk" | "spam" => Self::Junk,
"sent" => Self::Sent,
"trash" => Self::Trash,
_ => Self::Other(raw.into()),
}
}
}
#[derive(Clone, Debug)]
pub enum MailboxDiff {
Unchanged { new_state: Vec<u8> },
Changed { new_state: Option<Vec<u8>> },
}