1use aws_smithy_client::SdkError;
2use thiserror::Error;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6#[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 #[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 #[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}