lettre/
error.rs

1//! Error type for email messages
2
3use std::{
4    error::Error as StdError,
5    fmt::{self, Display, Formatter},
6};
7
8// FIXME message-specific errors
9/// Error type for email content
10#[derive(Debug)]
11pub enum Error {
12    /// Missing from in envelope
13    MissingFrom,
14    /// Missing to in envelope
15    MissingTo,
16    /// Can only be one from in envelope
17    TooManyFrom,
18    /// Invalid email: missing at
19    EmailMissingAt,
20    /// Invalid email: missing local part
21    EmailMissingLocalPart,
22    /// Invalid email: missing domain
23    EmailMissingDomain,
24    /// Cannot parse filename for attachment
25    CannotParseFilename,
26    /// IO error
27    Io(std::io::Error),
28    /// Non-ASCII chars
29    NonAsciiChars,
30}
31
32impl Display for Error {
33    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), fmt::Error> {
34        match self {
35            Error::MissingFrom => f.write_str("missing source address, invalid envelope"),
36            Error::MissingTo => f.write_str("missing destination address, invalid envelope"),
37            Error::TooManyFrom => f.write_str("there can only be one source address"),
38            Error::EmailMissingAt => f.write_str("missing @ in email address"),
39            Error::EmailMissingLocalPart => f.write_str("missing local part in email address"),
40            Error::EmailMissingDomain => f.write_str("missing domain in email address"),
41            Error::CannotParseFilename => f.write_str("could not parse attachment filename"),
42            Error::NonAsciiChars => f.write_str("contains non-ASCII chars"),
43            Error::Io(e) => e.fmt(f),
44        }
45    }
46}
47
48impl From<std::io::Error> for Error {
49    fn from(err: std::io::Error) -> Error {
50        Error::Io(err)
51    }
52}
53
54impl StdError for Error {}