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}