summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-storage/s3/errors.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/codeberg.org/gruf/go-storage/s3/errors.go')
-rw-r--r--vendor/codeberg.org/gruf/go-storage/s3/errors.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/codeberg.org/gruf/go-storage/s3/errors.go b/vendor/codeberg.org/gruf/go-storage/s3/errors.go
new file mode 100644
index 000000000..2cbdd2e9d
--- /dev/null
+++ b/vendor/codeberg.org/gruf/go-storage/s3/errors.go
@@ -0,0 +1,47 @@
+package s3
+
+import (
+ "strings"
+
+ "codeberg.org/gruf/go-storage"
+ "codeberg.org/gruf/go-storage/internal"
+ "github.com/minio/minio-go/v7"
+)
+
+// transformS3Error transforms an error returned from S3Storage underlying
+// minio.Core client, by wrapping where necessary with our own error types.
+func transformS3Error(err error) error {
+ // Cast this to a minio error response
+ ersp, ok := err.(minio.ErrorResponse)
+ if ok {
+ switch ersp.Code {
+ case "NoSuchKey":
+ return internal.WrapErr(err, storage.ErrNotFound)
+ case "Conflict":
+ return internal.WrapErr(err, storage.ErrAlreadyExists)
+ default:
+ return err
+ }
+ }
+
+ // Check if error has an invalid object name prefix
+ if strings.HasPrefix(err.Error(), "Object name ") {
+ return internal.WrapErr(err, storage.ErrInvalidKey)
+ }
+
+ return err
+}
+
+func isNotFoundError(err error) bool {
+ errRsp, ok := err.(minio.ErrorResponse)
+ return ok && errRsp.Code == "NoSuchKey"
+}
+
+func isConflictError(err error) bool {
+ errRsp, ok := err.(minio.ErrorResponse)
+ return ok && errRsp.Code == "Conflict"
+}
+
+func isObjectNameError(err error) bool {
+ return strings.HasPrefix(err.Error(), "Object name ")
+}