You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
5.6 KiB
191 lines
5.6 KiB
7 years ago
|
package client
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/hashicorp/errwrap"
|
||
|
)
|
||
|
|
||
|
// ClientError represents an error code and message along with the status code
|
||
|
// of the HTTP request which resulted in the error message.
|
||
|
type ClientError struct {
|
||
|
StatusCode int
|
||
|
Code string
|
||
|
Message string
|
||
|
}
|
||
|
|
||
|
// Error implements interface Error on the TritonError type.
|
||
|
func (e ClientError) Error() string {
|
||
|
return fmt.Sprintf("%s: %s", e.Code, e.Message)
|
||
|
}
|
||
|
|
||
|
// MantaError represents an error code and message along with
|
||
|
// the status code of the HTTP request which resulted in the error
|
||
|
// message. Error codes used by the Manta API are listed at
|
||
|
// https://apidocs.joyent.com/manta/api.html#errors
|
||
|
type MantaError struct {
|
||
|
StatusCode int
|
||
|
Code string `json:"code"`
|
||
|
Message string `json:"message"`
|
||
|
}
|
||
|
|
||
|
// Error implements interface Error on the MantaError type.
|
||
|
func (e MantaError) Error() string {
|
||
|
return fmt.Sprintf("%s: %s", e.Code, e.Message)
|
||
|
}
|
||
|
|
||
|
// TritonError represents an error code and message along with
|
||
|
// the status code of the HTTP request which resulted in the error
|
||
|
// message. Error codes used by the Triton API are listed at
|
||
|
// https://apidocs.joyent.com/cloudapi/#cloudapi-http-responses
|
||
|
type TritonError struct {
|
||
|
StatusCode int
|
||
|
Code string `json:"code"`
|
||
|
Message string `json:"message"`
|
||
|
}
|
||
|
|
||
|
// Error implements interface Error on the TritonError type.
|
||
|
func (e TritonError) Error() string {
|
||
|
return fmt.Sprintf("%s: %s", e.Code, e.Message)
|
||
|
}
|
||
|
|
||
|
func IsAuthSchemeError(err error) bool {
|
||
|
return isSpecificError(err, "AuthScheme")
|
||
|
}
|
||
|
func IsAuthorizationError(err error) bool {
|
||
|
return isSpecificError(err, "Authorization")
|
||
|
}
|
||
|
func IsBadRequestError(err error) bool {
|
||
|
return isSpecificError(err, "BadRequest")
|
||
|
}
|
||
|
func IsChecksumError(err error) bool {
|
||
|
return isSpecificError(err, "Checksum")
|
||
|
}
|
||
|
func IsConcurrentRequestError(err error) bool {
|
||
|
return isSpecificError(err, "ConcurrentRequest")
|
||
|
}
|
||
|
func IsContentLengthError(err error) bool {
|
||
|
return isSpecificError(err, "ContentLength")
|
||
|
}
|
||
|
func IsContentMD5MismatchError(err error) bool {
|
||
|
return isSpecificError(err, "ContentMD5Mismatch")
|
||
|
}
|
||
|
func IsEntityExistsError(err error) bool {
|
||
|
return isSpecificError(err, "EntityExists")
|
||
|
}
|
||
|
func IsInvalidArgumentError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidArgument")
|
||
|
}
|
||
|
func IsInvalidAuthTokenError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidAuthToken")
|
||
|
}
|
||
|
func IsInvalidCredentialsError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidCredentials")
|
||
|
}
|
||
|
func IsInvalidDurabilityLevelError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidDurabilityLevel")
|
||
|
}
|
||
|
func IsInvalidKeyIdError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidKeyId")
|
||
|
}
|
||
|
func IsInvalidJobError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidJob")
|
||
|
}
|
||
|
func IsInvalidLinkError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidLink")
|
||
|
}
|
||
|
func IsInvalidLimitError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidLimit")
|
||
|
}
|
||
|
func IsInvalidSignatureError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidSignature")
|
||
|
}
|
||
|
func IsInvalidUpdateError(err error) bool {
|
||
|
return isSpecificError(err, "InvalidUpdate")
|
||
|
}
|
||
|
func IsDirectoryDoesNotExistError(err error) bool {
|
||
|
return isSpecificError(err, "DirectoryDoesNotExist")
|
||
|
}
|
||
|
func IsDirectoryExistsError(err error) bool {
|
||
|
return isSpecificError(err, "DirectoryExists")
|
||
|
}
|
||
|
func IsDirectoryNotEmptyError(err error) bool {
|
||
|
return isSpecificError(err, "DirectoryNotEmpty")
|
||
|
}
|
||
|
func IsDirectoryOperationError(err error) bool {
|
||
|
return isSpecificError(err, "DirectoryOperation")
|
||
|
}
|
||
|
func IsInternalError(err error) bool {
|
||
|
return isSpecificError(err, "Internal")
|
||
|
}
|
||
|
func IsJobNotFoundError(err error) bool {
|
||
|
return isSpecificError(err, "JobNotFound")
|
||
|
}
|
||
|
func IsJobStateError(err error) bool {
|
||
|
return isSpecificError(err, "JobState")
|
||
|
}
|
||
|
func IsKeyDoesNotExistError(err error) bool {
|
||
|
return isSpecificError(err, "KeyDoesNotExist")
|
||
|
}
|
||
|
func IsNotAcceptableError(err error) bool {
|
||
|
return isSpecificError(err, "NotAcceptable")
|
||
|
}
|
||
|
func IsNotEnoughSpaceError(err error) bool {
|
||
|
return isSpecificError(err, "NotEnoughSpace")
|
||
|
}
|
||
|
func IsLinkNotFoundError(err error) bool {
|
||
|
return isSpecificError(err, "LinkNotFound")
|
||
|
}
|
||
|
func IsLinkNotObjectError(err error) bool {
|
||
|
return isSpecificError(err, "LinkNotObject")
|
||
|
}
|
||
|
func IsLinkRequiredError(err error) bool {
|
||
|
return isSpecificError(err, "LinkRequired")
|
||
|
}
|
||
|
func IsParentNotDirectoryError(err error) bool {
|
||
|
return isSpecificError(err, "ParentNotDirectory")
|
||
|
}
|
||
|
func IsPreconditionFailedError(err error) bool {
|
||
|
return isSpecificError(err, "PreconditionFailed")
|
||
|
}
|
||
|
func IsPreSignedRequestError(err error) bool {
|
||
|
return isSpecificError(err, "PreSignedRequest")
|
||
|
}
|
||
|
func IsRequestEntityTooLargeError(err error) bool {
|
||
|
return isSpecificError(err, "RequestEntityTooLarge")
|
||
|
}
|
||
|
func IsResourceNotFoundError(err error) bool {
|
||
|
return isSpecificError(err, "ResourceNotFound")
|
||
|
}
|
||
|
func IsRootDirectoryError(err error) bool {
|
||
|
return isSpecificError(err, "RootDirectory")
|
||
|
}
|
||
|
func IsServiceUnavailableError(err error) bool {
|
||
|
return isSpecificError(err, "ServiceUnavailable")
|
||
|
}
|
||
|
func IsSSLRequiredError(err error) bool {
|
||
|
return isSpecificError(err, "SSLRequired")
|
||
|
}
|
||
|
func IsUploadTimeoutError(err error) bool {
|
||
|
return isSpecificError(err, "UploadTimeout")
|
||
|
}
|
||
|
func IsUserDoesNotExistError(err error) bool {
|
||
|
return isSpecificError(err, "UserDoesNotExist")
|
||
|
}
|
||
|
|
||
|
// isSpecificError checks whether the error represented by err wraps
|
||
|
// an underlying MantaError with code errorCode.
|
||
|
func isSpecificError(err error, errorCode string) bool {
|
||
|
tritonErrorInterface := errwrap.GetType(err.(error), &MantaError{})
|
||
|
if tritonErrorInterface == nil {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
tritonErr := tritonErrorInterface.(*MantaError)
|
||
|
if tritonErr.Code == errorCode {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
return false
|
||
|
}
|