fuelcheck_cli/
exit_codes.rs1use fuelcheck_core::errors::CliError;
2use fuelcheck_core::model::ErrorKind;
3
4pub fn exit_code_for_error(err: &anyhow::Error) -> i32 {
5 if let Some(cli_err) = err.downcast_ref::<CliError>() {
6 return match cli_err {
7 CliError::UnknownProvider(_) => 2,
8 CliError::ProviderNotImplemented(_) => 2,
9 CliError::ConfigMissing(_) | CliError::ConfigPathUnavailable => 3,
10 CliError::ProviderNotConfigured(_) => 2,
11 CliError::UnsupportedSource(_, _) => 3,
12 };
13 }
14 if let Some(req_err) = err.downcast_ref::<reqwest::Error>()
15 && req_err.is_timeout()
16 {
17 return 4;
18 }
19 if err.downcast_ref::<tokio::time::error::Elapsed>().is_some() {
20 return 4;
21 }
22 if err.downcast_ref::<serde_json::Error>().is_some() {
23 return 3;
24 }
25 1
26}
27
28pub fn error_kind_for_error(err: &anyhow::Error) -> ErrorKind {
29 if let Some(cli_err) = err.downcast_ref::<CliError>() {
30 return match cli_err {
31 CliError::UnknownProvider(_) => ErrorKind::Args,
32 CliError::ProviderNotImplemented(_) => ErrorKind::Provider,
33 CliError::ConfigMissing(_) | CliError::ConfigPathUnavailable => ErrorKind::Config,
34 CliError::ProviderNotConfigured(_) => ErrorKind::Provider,
35 CliError::UnsupportedSource(_, _) => ErrorKind::Args,
36 };
37 }
38 ErrorKind::Runtime
39}