aws_manager/
errors.rs

1use aws_smithy_client::SdkError;
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6/// Backing errors for all AWS operations.
7#[derive(Error, Debug)]
8pub enum Error {
9    #[error("failed API (message: {message:?}, retryable: {retryable:?})")]
10    API { message: String, retryable: bool },
11    #[error("failed for other reasons (message: {message:?}, retryable: {retryable:?})")]
12    Other { message: String, retryable: bool },
13}
14
15impl Error {
16    /// Returns the error message in "String".
17    #[inline]
18    #[must_use]
19    pub fn message(&self) -> String {
20        match self {
21            Error::API { message, .. } | Error::Other { message, .. } => message.clone(),
22        }
23    }
24
25    /// Returns if the error is retryable.
26    #[inline]
27    #[must_use]
28    pub fn retryable(&self) -> bool {
29        match self {
30            Error::API { retryable, .. } | Error::Other { retryable, .. } => *retryable,
31        }
32    }
33}
34
35#[inline]
36pub fn is_sdk_err_retryable<E, R>(e: &SdkError<E, R>) -> bool {
37    match e {
38        SdkError::TimeoutError(_) | SdkError::ResponseError { .. } => true,
39        SdkError::DispatchFailure(e) => e.is_timeout() || e.is_io(),
40        _ => false,
41    }
42}