summaryrefslogtreecommitdiffstats
path: root/internals/src/mail_type.rs
blob: 96f9358f692c0e6591e6414f3d9103f326519fad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/// Specifies what kind of mail we want to create.
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
pub enum MailType {
    /// A 7-bit us-ascii mail.
    Ascii,

    /// A us-ascii mail, but the body can contain 8bit values.
    ///
    /// This for example allows sending a mail with an utf-8
    /// formatted body. But be aware that aspects like line
    /// length limit still count an the ascii bytes for "\r\n"
    /// still count as newlines. So using this for any non-us-ascii
    /// compatible encoding (e.g. utf-16) isn't a good idea.
    /// Neither is it suited for directly containing resources
    /// like images.
    Mime8BitEnabled,

    /// A internationalized mail.
    ///
    /// Internationalized mails extend multiple grammar parts
    /// to allow any non us-ascii utf-8 code point additionally
    /// to the already allowed utf-8 code points. Internationalized
    /// mails are required for any mail containing a mailbox with
    /// an non us-ascii local/user part (the part before the `@`).
    /// They also strongly simplify non ascii utf-8 in all other
    /// places like e.g. the `Subject` header.
    Internationalized
}

impl MailType {

    /// Returns true if the self is equal to `Internationalized`
    #[inline]
    pub fn is_internationalized(&self) -> bool {
        *self == MailType::Internationalized
    }

    /// Returns true if self is either `Internationalized` or `Mime8BitEnabled`
    pub fn supports_8bit_bodies( &self ) -> bool {
        use self::MailType::*;
        match *self {
            Ascii => false,
            Mime8BitEnabled => true,
            Internationalized => true
        }
    }
}