2025-03-05 15:58:21 +02:00
|
|
|
package s3
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/xml"
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
2025-03-28 19:28:04 +02:00
|
|
|
var _ error = (*ResponseError)(nil)
|
|
|
|
|
2025-03-05 15:58:21 +02:00
|
|
|
// ResponseError defines a general S3 response error.
|
|
|
|
//
|
|
|
|
// https://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
|
|
|
|
type ResponseError struct {
|
|
|
|
XMLName xml.Name `json:"-" xml:"Error"`
|
|
|
|
Code string `json:"code" xml:"Code"`
|
|
|
|
Message string `json:"message" xml:"Message"`
|
|
|
|
RequestId string `json:"requestId" xml:"RequestId"`
|
|
|
|
Resource string `json:"resource" xml:"Resource"`
|
|
|
|
Raw []byte `json:"-" xml:"-"`
|
|
|
|
Status int `json:"status" xml:"Status"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Error implements the std error interface.
|
2025-03-28 19:28:04 +02:00
|
|
|
func (err *ResponseError) Error() string {
|
2025-03-05 15:58:21 +02:00
|
|
|
var strBuilder strings.Builder
|
|
|
|
|
|
|
|
strBuilder.WriteString(strconv.Itoa(err.Status))
|
|
|
|
strBuilder.WriteString(" ")
|
|
|
|
|
|
|
|
if err.Code != "" {
|
|
|
|
strBuilder.WriteString(err.Code)
|
|
|
|
} else {
|
|
|
|
strBuilder.WriteString("S3ResponseError")
|
|
|
|
}
|
|
|
|
|
|
|
|
if err.Message != "" {
|
|
|
|
strBuilder.WriteString(": ")
|
|
|
|
strBuilder.WriteString(err.Message)
|
|
|
|
}
|
|
|
|
|
|
|
|
if len(err.Raw) > 0 {
|
|
|
|
strBuilder.WriteString("\n(RAW: ")
|
|
|
|
strBuilder.Write(err.Raw)
|
|
|
|
strBuilder.WriteString(")")
|
|
|
|
}
|
|
|
|
|
|
|
|
return strBuilder.String()
|
|
|
|
}
|