Skip to main content

fuelcheck_cli/
exit_codes.rs

1use 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}