in aws_secretsmanager_agent/src/cache_manager.rs [121:152]
fn svc_err<S>(err: Box<dyn std::error::Error>) -> Result<(String, String, u16), HttpError>
where
S: ProvideErrorMetadata + std::error::Error + 'static,
{
let sdk_err = err
.downcast_ref::<SdkError<S, HttpResponse>>()
.ok_or(int_err())?;
// Get the error metadata and translate timeouts to 504 and network errors to 502
let err_meta = match sdk_err {
SdkError::ServiceError(serr) => serr.err().meta(),
SdkError::DispatchFailure(derr) if derr.is_timeout() => {
return Ok(("TimeoutError".into(), "Timeout".into(), 504));
}
SdkError::TimeoutError(_) => {
return Ok(("TimeoutError".into(), "Timeout".into(), 504));
}
SdkError::DispatchFailure(derr) if derr.is_io() => {
return Ok(("ConnectionError".into(), "Read Error".into(), 502));
}
SdkError::ResponseError(_) => {
return Ok(("ConnectionError".into(), "Response Error".into(), 502));
}
_ => return Err(int_err()),
};
let code = err_meta.code().ok_or(int_err())?;
let msg = err_meta.message().ok_or(int_err())?;
let status = sdk_err.raw_response().ok_or(int_err())?.status().as_u16();
Ok((code.into(), msg.into(), status))
}