1use std::{
4    error::Error as StdError,
5    fmt::{self, Display, Formatter},
6};
7
8#[derive(Debug)]
11pub enum Error {
12    MissingFrom,
14    MissingTo,
16    TooManyFrom,
18    EmailMissingAt,
20    EmailMissingLocalPart,
22    EmailMissingDomain,
24    CannotParseFilename,
26    Io(std::io::Error),
28    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 {}