chamber_cli/
errors.rs

1use std::fmt;
2
3#[derive(Debug)]
4pub enum CliError {
5    ConfigError(ConfigError),
6    IoError(std::io::Error),
7    RequestError(reqwest::Error),
8    PromptError(inquire::error::InquireError),
9    AtLeastOneArgError
10}
11
12impl std::error::Error for CliError {}
13impl fmt::Display for CliError {
14    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
15        match self {
16            Self::ConfigError(err) => write!(f, "Config error - {err}"),
17            Self::RequestError(err) => write!(f, "Error while using HTTP request: {err}"),
18            Self::PromptError(err) => write!(f, "Error while attempting to use prompt: {err}"),
19            Self::IoError(err) => write!(f, "Error during file I/O: {err}"),
20            Self::AtLeastOneArgError => write!(f, "You need at least one option filled."),
21        }
22    }
23}
24
25impl From<ConfigError> for CliError {
26    fn from(err: ConfigError) -> Self {
27        Self::ConfigError(err)
28    }
29}
30
31impl From<reqwest::Error> for CliError {
32    fn from(err: reqwest::Error) -> Self {
33        Self::RequestError(err)
34    }
35}
36
37impl From<inquire::error::InquireError> for CliError {
38    fn from(err: inquire::error::InquireError) -> Self {
39        Self::PromptError(err)
40    }
41}
42
43impl From<std::io::Error> for CliError {
44    fn from(err: std::io::Error) -> Self {
45        Self::IoError(err)
46    }
47}
48
49#[derive(Debug)]
50pub enum ConfigError {
51    Deserialization(toml::de::Error),
52    Serialization(toml::ser::Error),
53    IoError(std::io::Error),
54}
55
56impl std::fmt::Display for ConfigError {
57    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
58        match self {
59            Self::Deserialization(err) => write!(f, "Config error during deserialization: {err}"),
60            Self::Serialization(err) => write!(f, "Config error during serialization: {err}"),
61            Self::IoError(err) => write!(f, "Config error during file I/O: {err}"),
62        }
63    }
64}
65
66impl From<std::io::Error> for ConfigError {
67    fn from(err: std::io::Error) -> Self {
68        Self::IoError(err)
69    }
70}
71
72impl From<toml::de::Error> for ConfigError {
73    fn from(err: toml::de::Error) -> Self {
74        Self::Deserialization(err)
75    }
76}
77
78impl From<toml::ser::Error> for ConfigError {
79    fn from(err: toml::ser::Error) -> Self {
80        Self::Serialization(err)
81    }
82}