1
#[cfg(feature = "server")]
2
use lettre::message::Mailbox;
3
use serde::{Deserialize, Serialize};
4

            
5
#[derive(Clone, Debug, Default, Deserialize, Hash, PartialEq, Eq, Serialize)]
6
pub struct Email {
7
    #[serde(default)]
8
    pub address: String,
9
    #[serde(default)]
10
    pub code: Option<u32>,
11
    #[serde(default)]
12
    pub username: String,
13
    #[serde(default)]
14
    pub verified: bool,
15
}
16

            
17
impl Email {
18
    #[cfg(feature = "server")]
19
    #[must_use]
20
    pub fn to_mailbox(&self) -> Option<Mailbox> {
21
        Some(Mailbox::new(
22
            Some(self.username.clone()),
23
            self.address.parse().ok()?,
24
        ))
25
    }
26

            
27
    #[must_use]
28
    pub fn tx(&self) -> String {
29
        // Note: We use a FIGURE SPACE to separate the username from the address so
30
        // .split_ascii_whitespace() does not treat it as a space.
31
        format!("{} <{}>", self.username, self.address)
32
    }
33
}