Skip to main content

conduit_cli/core/
error.rs

1use std::fmt;
2
3#[derive(Debug)]
4pub enum CoreError {
5    Io(std::io::Error),
6    Json(serde_json::Error),
7    TomlDe(toml::de::Error),
8    TomlSer(toml::ser::Error),
9    Reqwest(reqwest::Error),
10    MissingConfig,
11    MissingLocalDataDir,
12    NoCompatibleVersion { slug: String },
13    NoFilesForVersion { version: String },
14}
15
16impl fmt::Display for CoreError {
17    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18        match self {
19            CoreError::Io(e) => write!(f, "IO error: {e}"),
20            CoreError::Json(e) => write!(f, "JSON error: {e}"),
21            CoreError::TomlDe(e) => write!(f, "TOML decode error: {e}"),
22            CoreError::TomlSer(e) => write!(f, "TOML encode error: {e}"),
23            CoreError::Reqwest(e) => write!(f, "HTTP error: {e}"),
24            CoreError::MissingConfig => write!(f, "No conduit.json found"),
25            CoreError::MissingLocalDataDir => write!(f, "Could not find local data directory"),
26            CoreError::NoCompatibleVersion { slug } => {
27                write!(f, "No compatible version for {slug}")
28            }
29            CoreError::NoFilesForVersion { version } => {
30                write!(f, "No files available for version {version}")
31            }
32        }
33    }
34}
35
36impl std::error::Error for CoreError {}
37
38impl From<std::io::Error> for CoreError {
39    fn from(value: std::io::Error) -> Self {
40        Self::Io(value)
41    }
42}
43
44impl From<serde_json::Error> for CoreError {
45    fn from(value: serde_json::Error) -> Self {
46        Self::Json(value)
47    }
48}
49
50impl From<toml::de::Error> for CoreError {
51    fn from(value: toml::de::Error) -> Self {
52        Self::TomlDe(value)
53    }
54}
55
56impl From<toml::ser::Error> for CoreError {
57    fn from(value: toml::ser::Error) -> Self {
58        Self::TomlSer(value)
59    }
60}
61
62impl From<reqwest::Error> for CoreError {
63    fn from(value: reqwest::Error) -> Self {
64        Self::Reqwest(value)
65    }
66}
67
68pub type CoreResult<T> = Result<T, CoreError>;