1pub use lettre::address::AddressError;
2use lettre::{
3 error::Error as LettreError,
4 message::header::ContentTypeErr,
5 transport::smtp::{self},
6};
7use thiserror::Error;
8use toml::{de::Error as DerTomlError, ser::Error as SerTomlError};
9
10#[derive(Error, Debug)]
12pub enum HomeDirError {
13 #[error(transparent)]
15 Io(#[from] std::io::Error),
16
17 #[error("Failed to find home directory")]
19 HomeDirNotFound,
20}
21
22#[derive(Error, Debug)]
24pub enum ConfigError {
25 #[error(transparent)]
27 Io(#[from] std::io::Error),
28
29 #[error(transparent)]
31 TomlSerialization(#[from] SerTomlError),
32
33 #[error(transparent)]
35 TomlDeserialization(#[from] DerTomlError),
36
37 #[error("Attachment not found")]
39 AttachmentNotFound,
40
41 #[error(transparent)]
43 ConfigFile(#[from] HomeDirError),
44}
45
46#[derive(Error, Debug)]
48pub enum TimerError {
49 #[error(transparent)]
51 Io(#[from] std::io::Error),
52
53 #[error(transparent)]
55 TomlSerialization(#[from] SerTomlError),
56
57 #[error(transparent)]
59 TomlDeserialization(#[from] DerTomlError),
60
61 #[error(transparent)]
63 Config(#[from] ConfigError),
64
65 #[error(transparent)]
67 ConfigFile(#[from] HomeDirError),
68
69 #[error("System time error: {0}")]
71 SystemTime(#[from] std::time::SystemTimeError),
72}
73
74#[derive(Error, Debug)]
76pub enum EmailError {
77 #[error(transparent)]
79 TlsError(#[from] smtp::Error),
80
81 #[error(transparent)]
83 EmailError(#[from] AddressError),
84
85 #[error(transparent)]
87 BuilderError(#[from] LettreError),
88
89 #[error(transparent)]
91 IoError(#[from] std::io::Error),
92
93 #[error(transparent)]
95 InvalidContent(#[from] ContentTypeErr),
96
97 #[error(transparent)]
99 AttachmentPath(#[from] ConfigError),
100
101 #[error("timeout")]
103 Timeout,
104
105 #[error("disconnected")]
107 Disconnected,
108
109 #[error("smtp error: {0}")]
110 SmtpError(smtp::Error),
111}
112
113#[derive(Error, Debug)]
115pub enum TuiError {
116 #[error(transparent)]
118 Io(#[from] std::io::Error),
119
120 #[error(transparent)]
122 Config(#[from] ConfigError),
123
124 #[error(transparent)]
126 Email(#[from] EmailError),
127
128 #[error(transparent)]
130 Timer(#[from] TimerError),
131}