| 1049 | } |
| 1050 | |
| 1051 | fn classify_get_error<E>(bucket: &str, key: &str, error: SdkError<E>) -> WorkspaceError |
| 1052 | where |
| 1053 | E: std::error::Error + Send + Sync + 'static, |
| 1054 | { |
| 1055 | let raw = error |
| 1056 | .raw_response() |
| 1057 | .map(|r| r.status().as_u16()) |
| 1058 | .unwrap_or_default(); |
| 1059 | if raw == 404 { |
| 1060 | WorkspaceError::NotFound { |
| 1061 | path: format!("s3://{}/{}", bucket, key), |
| 1062 | } |
| 1063 | } else { |
| 1064 | WorkspaceError::Backend(anyhow!( |
| 1065 | "Failed to read S3 object s3://{}/{}: {}", |
| 1066 | bucket, |
| 1067 | key, |
| 1068 | error |
| 1069 | )) |
| 1070 | } |
| 1071 | } |
| 1072 | |
| 1073 | fn classify_list_error( |
| 1074 | bucket: &str, |