123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package s3api
- import (
- "encoding/xml"
- "net/http"
- )
- // APIError structure
- type APIError struct {
- Code string
- Description string
- HTTPStatusCode int
- }
- // RESTErrorResponse - error response format
- type RESTErrorResponse struct {
- XMLName xml.Name `xml:"Error" json:"-"`
- Code string `xml:"Code" json:"Code"`
- Message string `xml:"Message" json:"Message"`
- Resource string `xml:"Resource" json:"Resource"`
- RequestID string `xml:"RequestId" json:"RequestId"`
- }
- // ErrorCode type of error status.
- type ErrorCode int
- // Error codes, see full list at http://docs.aws.amazon.com/AmazonS3/latest/API/ErrorResponses.html
- const (
- ErrNone ErrorCode = iota
- ErrMethodNotAllowed
- ErrBucketNotEmpty
- ErrBucketAlreadyExists
- ErrBucketAlreadyOwnedByYou
- ErrNoSuchBucket
- ErrNoSuchUpload
- ErrInvalidBucketName
- ErrInvalidDigest
- ErrInvalidMaxKeys
- ErrInvalidMaxUploads
- ErrInvalidMaxParts
- ErrInvalidPartNumberMarker
- ErrInvalidPart
- ErrInternalError
- ErrInvalidCopyDest
- ErrInvalidCopySource
- ErrNotImplemented
- )
- // error code to APIError structure, these fields carry respective
- // descriptions for all the error responses.
- var errorCodeResponse = map[ErrorCode]APIError{
- ErrMethodNotAllowed: {
- Code: "MethodNotAllowed",
- Description: "The specified method is not allowed against this resource.",
- HTTPStatusCode: http.StatusMethodNotAllowed,
- },
- ErrBucketNotEmpty: {
- Code: "BucketNotEmpty",
- Description: "The bucket you tried to delete is not empty",
- HTTPStatusCode: http.StatusConflict,
- },
- ErrBucketAlreadyExists: {
- Code: "BucketAlreadyExists",
- Description: "The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.",
- HTTPStatusCode: http.StatusConflict,
- },
- ErrBucketAlreadyOwnedByYou: {
- Code: "BucketAlreadyOwnedByYou",
- Description: "Your previous request to create the named bucket succeeded and you already own it.",
- HTTPStatusCode: http.StatusConflict,
- },
- ErrInvalidBucketName: {
- Code: "InvalidBucketName",
- Description: "The specified bucket is not valid.",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidDigest: {
- Code: "InvalidDigest",
- Description: "The Content-Md5 you specified is not valid.",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidMaxUploads: {
- Code: "InvalidArgument",
- Description: "Argument max-uploads must be an integer between 0 and 2147483647",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidMaxKeys: {
- Code: "InvalidArgument",
- Description: "Argument maxKeys must be an integer between 0 and 2147483647",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidMaxParts: {
- Code: "InvalidArgument",
- Description: "Argument max-parts must be an integer between 0 and 2147483647",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidPartNumberMarker: {
- Code: "InvalidArgument",
- Description: "Argument partNumberMarker must be an integer.",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrNoSuchBucket: {
- Code: "NoSuchBucket",
- Description: "The specified bucket does not exist",
- HTTPStatusCode: http.StatusNotFound,
- },
- ErrNoSuchUpload: {
- Code: "NoSuchUpload",
- Description: "The specified multipart upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.",
- HTTPStatusCode: http.StatusNotFound,
- },
- ErrInternalError: {
- Code: "InternalError",
- Description: "We encountered an internal error, please try again.",
- HTTPStatusCode: http.StatusInternalServerError,
- },
- ErrInvalidPart: {
- Code: "InvalidPart",
- Description: "One or more of the specified parts could not be found. The part may not have been uploaded, or the specified entity tag may not match the part's entity tag.",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidCopyDest: {
- Code: "InvalidRequest",
- Description: "This copy request is illegal because it is trying to copy an object to itself without changing the object's metadata, storage class, website redirect location or encryption attributes.",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrInvalidCopySource: {
- Code: "InvalidArgument",
- Description: "Copy Source must mention the source bucket and key: sourcebucket/sourcekey.",
- HTTPStatusCode: http.StatusBadRequest,
- },
- ErrNotImplemented: {
- Code: "NotImplemented",
- Description: "A header you provided implies functionality that is not implemented",
- HTTPStatusCode: http.StatusNotImplemented,
- },
- }
- // getAPIError provides API Error for input API error code.
- func getAPIError(code ErrorCode) APIError {
- return errorCodeResponse[code]
- }
|