imap-rs-client 0.2.1

Async IMAP session state machine, command pipelining, and credential management. Client layer of imap-rs.
Documentation
use std::fmt;

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Flag {
    Seen,
    Answered,
    Flagged,
    Deleted,
    Draft,
    Recent,
    Custom(String),
}

impl fmt::Display for Flag {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Flag::Seen => write!(f, "\\Seen"),
            Flag::Answered => write!(f, "\\Answered"),
            Flag::Flagged => write!(f, "\\Flagged"),
            Flag::Deleted => write!(f, "\\Deleted"),
            Flag::Draft => write!(f, "\\Draft"),
            Flag::Recent => write!(f, "\\Recent"),
            Flag::Custom(s) => write!(f, "{}", s),
        }
    }
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum StoreAction {
    Add,
    Remove,
    Set,
}

impl StoreAction {
    pub fn to_imap_prefix(&self, silent: bool) -> &str {
        match self {
            StoreAction::Add => {
                if silent {
                    "+FLAGS.SILENT"
                } else {
                    "+FLAGS"
                }
            }
            StoreAction::Remove => {
                if silent {
                    "-FLAGS.SILENT"
                } else {
                    "-FLAGS"
                }
            }
            StoreAction::Set => {
                if silent {
                    "FLAGS.SILENT"
                } else {
                    "FLAGS"
                }
            }
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_flag_display() {
        assert_eq!(Flag::Seen.to_string(), "\\Seen");
        assert_eq!(Flag::Answered.to_string(), "\\Answered");
        assert_eq!(Flag::Flagged.to_string(), "\\Flagged");
        assert_eq!(Flag::Deleted.to_string(), "\\Deleted");
        assert_eq!(Flag::Draft.to_string(), "\\Draft");
        assert_eq!(Flag::Recent.to_string(), "\\Recent");
        assert_eq!(Flag::Custom("MyFlag".into()).to_string(), "MyFlag");
    }

    #[test]
    fn test_store_action_prefix() {
        assert_eq!(StoreAction::Add.to_imap_prefix(false), "+FLAGS");
        assert_eq!(StoreAction::Add.to_imap_prefix(true), "+FLAGS.SILENT");
        assert_eq!(StoreAction::Remove.to_imap_prefix(false), "-FLAGS");
        assert_eq!(StoreAction::Remove.to_imap_prefix(true), "-FLAGS.SILENT");
        assert_eq!(StoreAction::Set.to_imap_prefix(false), "FLAGS");
        assert_eq!(StoreAction::Set.to_imap_prefix(true), "FLAGS.SILENT");
    }
}