Skip to main content

pimalaya_tui/
error.rs

1use std::{io, result};
2
3use inquire::InquireError;
4use thiserror::Error;
5
6#[derive(Debug, Error)]
7pub enum Error {
8    #[cfg(feature = "wizard")]
9    #[error("cannot create TOML config parent directory at {1}")]
10    CreateTomlConfigParentDirectoryError(#[source] std::io::Error, std::path::PathBuf),
11    #[cfg(feature = "wizard")]
12    #[error("cannot write TOML config at {1}")]
13    WriteTomlConfigError(#[source] std::io::Error, std::path::PathBuf),
14
15    #[cfg(feature = "config")]
16    #[error("cannot create TOML config from invalid or missing paths")]
17    CreateTomlConfigFromInvalidPathsError,
18    #[cfg(feature = "config")]
19    #[error("cannot create TOML config from wizard")]
20    CreateTomlConfigFromWizardError(#[source] color_eyre::eyre::Error),
21    #[error("cannot prompt unsigned integer (u16)")]
22    PromptU16Error(#[source] InquireError),
23    #[error("cannot prompt unsigned integer (usize)")]
24    PromptUsizeError(#[source] InquireError),
25    #[error("cannot prompt secret")]
26    PromptSecretError(#[source] InquireError),
27    #[error("cannot prompt password")]
28    PromptPasswordError(#[source] InquireError),
29    #[error("cannot prompt text")]
30    PromptTextError(#[source] InquireError),
31    #[error("cannot prompt boolean")]
32    PromptBoolError(#[source] InquireError),
33    #[error("cannot prompt item from list")]
34    PromptItemError(#[source] InquireError),
35    #[cfg(feature = "email")]
36    #[error("cannot prompt email")]
37    PromptEmailError(#[source] InquireError),
38    #[cfg(feature = "path")]
39    #[error("cannot prompt path")]
40    PromptPathError(#[source] InquireError),
41
42    #[cfg(feature = "oauth2")]
43    #[error(transparent)]
44    OAuth2Error(#[from] oauth::v2_0::Error),
45    #[cfg(feature = "imap")]
46    #[error(transparent)]
47    AccountError(#[from] email::account::Error),
48    #[cfg(feature = "imap")]
49    #[error(transparent)]
50    ImapError(#[from] email::imap::Error),
51    #[cfg(feature = "smtp")]
52    #[error(transparent)]
53    SmtpError(#[from] email::smtp::Error),
54    #[cfg(feature = "imap")]
55    #[error(transparent)]
56    SecretError(#[from] secret::Error),
57
58    #[cfg(feature = "wizard")]
59    #[error(transparent)]
60    JoinError(#[from] tokio::task::JoinError),
61
62    #[cfg(feature = "config")]
63    #[error("cannot read config file from empty paths")]
64    ReadTomlConfigFileFromEmptyPaths,
65    #[cfg(feature = "config")]
66    #[error("cannot read config file at {}", .1.display())]
67    ReadTomlConfigFile(#[source] std::io::Error, std::path::PathBuf),
68    #[cfg(feature = "config")]
69    #[error("cannot parse config file at {}", .1.display())]
70    ParseTomlConfigFile(#[source] toml::de::Error, std::path::PathBuf),
71    #[cfg(feature = "config")]
72    #[error("cannot merge config files: {0}")]
73    MergeTomlConfigFiles(serde_toml_merge::Error),
74    #[cfg(feature = "config")]
75    #[error("cannot get XDG config directory")]
76    GetXdgConfigDirectory,
77    #[cfg(feature = "config")]
78    #[error("cannot serialize TOML config")]
79    SerializeTomlConfigError(#[source] toml::ser::Error),
80    #[cfg(feature = "config")]
81    #[error("cannot parse serialized TOML config as document")]
82    ParseSerializedTomlConfigError(#[source] toml_edit::TomlError),
83    #[cfg(feature = "config")]
84    #[error("cannot build final configuration for account {0}")]
85    BuildAccountConfigError(String),
86    #[cfg(feature = "config")]
87    #[error("cannot find default account configuration")]
88    GetDefaultAccountConfigError,
89    #[cfg(feature = "config")]
90    #[error("cannot find configuration for account {0}")]
91    GetAccountConfigError(String),
92    #[cfg(all(feature = "config", feature = "himalaya"))]
93    #[error("cannot create config file {}", .1.display())]
94    CreateConfigFileError(#[source] std::io::Error, std::path::PathBuf),
95    #[cfg(all(feature = "config", feature = "himalaya"))]
96    #[error("cannot write config to file {}", .1.display())]
97    WriteConfigFileError(#[source] std::io::Error, std::path::PathBuf),
98}
99
100pub type Result<T> = result::Result<T, Error>;
101
102impl From<Error> for io::Error {
103    fn from(err: Error) -> Self {
104        io::Error::new(io::ErrorKind::InvalidInput, err)
105    }
106}