use std::sync::OnceLock;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct S3ServiceSpecificError {
pub feature_id: &'static str,
pub family: &'static str,
pub code: &'static str,
pub status: u16,
pub message: &'static str,
}
pub fn s3_service_specific_error_catalog() -> &'static [S3ServiceSpecificError] {
S3_SERVICE_SPECIFIC_ERRORS
.get_or_init(|| {
S3_SERVICE_SPECIFIC_ERROR_PARTS
.iter()
.flat_map(|part| part.iter().copied())
.collect()
})
.as_slice()
}
pub fn s3_service_specific_error_by_family_code(
family: &str,
code: &str,
) -> Option<&'static S3ServiceSpecificError> {
s3_service_specific_error_catalog()
.iter()
.find(|error| error.family == family && error.code == code)
}
pub fn error_response_is_retryable(status: u16) -> bool {
matches!(status, 500 | 503)
}
static S3_SERVICE_SPECIFIC_ERRORS: OnceLock<Vec<S3ServiceSpecificError>> = OnceLock::new();
const S3_SERVICE_SPECIFIC_ERROR_PARTS: &[&[S3ServiceSpecificError]] = &[
include!("s3_service_specific_errors/access-grants.rs"),
include!("s3_service_specific_errors/async.rs"),
include!("s3_service_specific_errors/fsx.rs"),
include!("s3_service_specific_errors/general-part-01.rs"),
include!("s3_service_specific_errors/general-part-02.rs"),
include!("s3_service_specific_errors/general-part-03.rs"),
include!("s3_service_specific_errors/select-part-01.rs"),
include!("s3_service_specific_errors/select-part-02.rs"),
include!("s3_service_specific_errors/select-part-03.rs"),
include!("s3_service_specific_errors/storage-lens-groups.rs"),
include!("s3_service_specific_errors/storage-lens.rs"),
include!("s3_service_specific_errors/tables.rs"),
include!("s3_service_specific_errors/object-lambda.rs"),
include!("s3_service_specific_errors/outposts.rs"),
include!("s3_service_specific_errors/replication.rs"),
include!("s3_service_specific_errors/tagging.rs"),
];