Skip to main content

imap_client/
flags.rs

1use std::fmt;
2
3#[derive(Debug, Clone, PartialEq, Eq)]
4pub enum Flag {
5    Seen,
6    Answered,
7    Flagged,
8    Deleted,
9    Draft,
10    Recent,
11    Custom(String),
12}
13
14impl fmt::Display for Flag {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            Flag::Seen => write!(f, "\\Seen"),
18            Flag::Answered => write!(f, "\\Answered"),
19            Flag::Flagged => write!(f, "\\Flagged"),
20            Flag::Deleted => write!(f, "\\Deleted"),
21            Flag::Draft => write!(f, "\\Draft"),
22            Flag::Recent => write!(f, "\\Recent"),
23            Flag::Custom(s) => write!(f, "{}", s),
24        }
25    }
26}
27
28#[derive(Debug, Clone, PartialEq, Eq)]
29pub enum StoreAction {
30    Add,
31    Remove,
32    Set,
33}
34
35impl StoreAction {
36    pub fn to_imap_prefix(&self, silent: bool) -> &str {
37        match self {
38            StoreAction::Add => {
39                if silent {
40                    "+FLAGS.SILENT"
41                } else {
42                    "+FLAGS"
43                }
44            }
45            StoreAction::Remove => {
46                if silent {
47                    "-FLAGS.SILENT"
48                } else {
49                    "-FLAGS"
50                }
51            }
52            StoreAction::Set => {
53                if silent {
54                    "FLAGS.SILENT"
55                } else {
56                    "FLAGS"
57                }
58            }
59        }
60    }
61}
62
63#[cfg(test)]
64mod tests {
65    use super::*;
66
67    #[test]
68    fn test_flag_display() {
69        assert_eq!(Flag::Seen.to_string(), "\\Seen");
70        assert_eq!(Flag::Answered.to_string(), "\\Answered");
71        assert_eq!(Flag::Flagged.to_string(), "\\Flagged");
72        assert_eq!(Flag::Deleted.to_string(), "\\Deleted");
73        assert_eq!(Flag::Draft.to_string(), "\\Draft");
74        assert_eq!(Flag::Recent.to_string(), "\\Recent");
75        assert_eq!(Flag::Custom("MyFlag".into()).to_string(), "MyFlag");
76    }
77
78    #[test]
79    fn test_store_action_prefix() {
80        assert_eq!(StoreAction::Add.to_imap_prefix(false), "+FLAGS");
81        assert_eq!(StoreAction::Add.to_imap_prefix(true), "+FLAGS.SILENT");
82        assert_eq!(StoreAction::Remove.to_imap_prefix(false), "-FLAGS");
83        assert_eq!(StoreAction::Remove.to_imap_prefix(true), "-FLAGS.SILENT");
84        assert_eq!(StoreAction::Set.to_imap_prefix(false), "FLAGS");
85        assert_eq!(StoreAction::Set.to_imap_prefix(true), "FLAGS.SILENT");
86    }
87}