openstack_cli_core/
error.rs1use indicatif;
17use reqwest;
18use thiserror::Error;
19
20#[derive(Debug, Error)]
22#[non_exhaustive]
23pub enum OpenStackCliError {
24 #[error("failed to serialize data to json: {}", source)]
26 SerializeJson {
27 #[from]
29 source: serde_json::Error,
30 },
31
32 #[error(
34 "failed to deserialize data to json. Try using `-o json` to still see the data. \n\t{}",
35 data
36 )]
37 DeserializeJson {
38 source: serde_json::Error,
40 data: String,
42 },
43
44 #[error("authentication error")]
46 Auth {
47 source: openstack_sdk_core::OpenStackError,
49 },
50 #[error("error changing scope to {:?}", scope)]
52 ReScope {
53 scope: openstack_sdk_auth_core::authtoken_scope::AuthTokenScope,
55 source: openstack_sdk_core::OpenStackError,
57 },
58
59 #[error(transparent)]
61 OpenStackSDK {
62 #[from]
64 source: openstack_sdk_core::OpenStackError,
65 },
66 #[error(transparent)]
68 OpenStackApi {
69 #[from]
71 source: openstack_sdk_core::api::ApiError<openstack_sdk_core::RestError>,
72 },
73
74 #[error(transparent)]
76 CliConfig {
77 #[from]
79 source: crate::config::ConfigError,
80 },
81
82 #[error(transparent)]
84 CloudConfig {
85 #[from]
87 source: openstack_sdk_core::config::ConfigError,
88 },
89
90 #[error(transparent)]
92 OpenStackCatalog {
93 #[from]
95 source: openstack_sdk_core::catalog::CatalogError,
96 },
97
98 #[error("command has no subcommands")]
100 NoSubcommands,
101
102 #[error("resource not found")]
104 ResourceNotFound,
105
106 #[error("cannot find resource by identifier")]
108 IdNotUnique,
109
110 #[error("cannot find resource attribute {0}")]
112 ResourceAttributeMissing(String),
113
114 #[error("resource attribute {0} is not a string")]
116 ResourceAttributeNotString(String),
117
118 #[error("IO error: {}", source)]
120 IO {
121 #[from]
123 source: std::io::Error,
124 },
125 #[error("reqwest error: {}", source)]
127 Reqwest {
128 #[from]
130 source: reqwest::Error,
131 },
132 #[error("argument parsing error: {}", source)]
134 Clap {
135 #[from]
137 source: clap::error::Error,
138 },
139 #[error("indicativ error: {}", source)]
141 Idinticatif {
142 #[from]
144 source: indicatif::style::TemplateError,
145 },
146 #[error("OpenStackSDK endpoint builder error: `{0}`")]
148 EndpointBuild(String),
149
150 #[error("cloud connection `{0:?}` cannot be found")]
152 ConnectionNotFound(String),
153
154 #[error("invalid header name `{}`", source)]
156 InvalidHeaderName {
157 #[from]
159 source: http::header::InvalidHeaderName,
160 },
161
162 #[error("invalid header value `{}`", source)]
164 InvalidHeaderValue {
165 #[from]
167 source: http::header::InvalidHeaderValue,
168 },
169
170 #[error("invalid url: {}", source)]
172 InvalidUri {
173 #[from]
175 source: http::uri::InvalidUri,
176 },
177
178 #[error("dialoguer error `{}`", source)]
180 DialoguerError {
181 #[from]
183 source: dialoguer::Error,
184 },
185
186 #[error("input parameters error: {0}")]
188 InputParameters(String),
189
190 #[error(transparent)]
192 Base64Decode(#[from] base64::DecodeError),
193
194 #[error("valid authentication is missing to be able to rescope the session")]
196 MissingValidAuthenticationForRescope,
197
198 #[error(transparent)]
200 UrlParse {
201 #[from]
203 source: url::ParseError,
204 },
205
206 #[error(transparent)]
208 Other(#[from] eyre::Report),
209}
210
211impl OpenStackCliError {
212 pub fn deserialize(error: serde_json::Error, data: String) -> Self {
214 Self::DeserializeJson {
215 source: error,
216 data,
217 }
218 }
219}