pub use lettre::address::AddressError;
use lettre::{
error::Error as LettreError,
message::header::ContentTypeErr,
transport::smtp::{self},
};
use thiserror::Error;
use toml::{de::Error as DerTomlError, ser::Error as SerTomlError};
#[derive(Error, Debug)]
pub enum HomeDirError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error("Failed to find home directory")]
HomeDirNotFound,
}
#[derive(Error, Debug)]
pub enum ConfigError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
TomlSerialization(#[from] SerTomlError),
#[error(transparent)]
TomlDeserialization(#[from] DerTomlError),
#[error("Attachment not found")]
AttachmentNotFound,
#[error(transparent)]
ConfigFile(#[from] HomeDirError),
}
#[derive(Error, Debug)]
pub enum TimerError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
TomlSerialization(#[from] SerTomlError),
#[error(transparent)]
TomlDeserialization(#[from] DerTomlError),
#[error(transparent)]
Config(#[from] ConfigError),
#[error(transparent)]
ConfigFile(#[from] HomeDirError),
#[error("System time error: {0}")]
SystemTime(#[from] std::time::SystemTimeError),
}
#[derive(Error, Debug)]
pub enum EmailError {
#[error(transparent)]
TlsError(#[from] smtp::Error),
#[error(transparent)]
EmailError(#[from] AddressError),
#[error(transparent)]
BuilderError(#[from] LettreError),
#[error(transparent)]
IoError(#[from] std::io::Error),
#[error(transparent)]
InvalidContent(#[from] ContentTypeErr),
#[error(transparent)]
AttachmentPath(#[from] ConfigError),
#[error("timeout")]
Timeout,
#[error("disconnected")]
Disconnected,
#[error("smtp error: {0}")]
SmtpError(smtp::Error),
}
#[derive(Error, Debug)]
pub enum TuiError {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Config(#[from] ConfigError),
#[error(transparent)]
Email(#[from] EmailError),
#[error(transparent)]
Timer(#[from] TimerError),
}