package client
import (
"fmt"
"github.com/vmware/dispatch/pkg/api/v1"
)
type Error interface {
Error() string
Message() string
Code() int
}
type baseError struct {
code int
message string
}
func (b baseError) Error() string {
return fmt.Sprintf("[Code: %d] %s", b.code, b.message)
}
func (b baseError) Message() string {
return b.message
}
func (b baseError) Code() int {
return b.code
}
type ErrorServerUnknownError struct {
baseError
}
func NewErrorServerUnknownError(apiError *v1.Error) *ErrorServerUnknownError {
return &ErrorServerUnknownError{
baseError: baseErrFromModel(apiError),
}
}
type ErrorBadRequest struct {
baseError
}
func NewErrorBadRequest(apiError *v1.Error) *ErrorBadRequest {
return &ErrorBadRequest{
baseError: baseErrFromModel(apiError),
}
}
type ErrorAlreadyExists struct {
baseError
}
func NewErrorAlreadyExists(apiError *v1.Error) *ErrorAlreadyExists {
return &ErrorAlreadyExists{
baseError: baseErrFromModel(apiError),
}
}
type ErrorNotFound struct {
baseError
}
func NewErrorNotFound(apiError *v1.Error) *ErrorNotFound {
return &ErrorNotFound{
baseError: baseErrFromModel(apiError),
}
}
type ErrorForbidden struct {
baseError
}
func NewErrorForbidden(apiError *v1.Error) *ErrorForbidden {
return &ErrorForbidden{
baseError: baseErrFromModel(apiError),
}
}
type ErrorUnauthorized struct {
baseError
}
func NewErrorUnauthorized(apiError *v1.Error) *ErrorUnauthorized {
return &ErrorUnauthorized{
baseError: baseErrFromModel(apiError),
}
}
type ErrorInvalidInput struct {
baseError
}
func NewErrorInvalidInput(apiError *v1.Error) *ErrorInvalidInput {
return &ErrorInvalidInput{
baseError: baseErrFromModel(apiError),
}
}
type ErrorFunctionError struct {
baseError
}
func NewErrorFunctionError(apiError *v1.Error) *ErrorFunctionError {
return &ErrorFunctionError{
baseError: baseErrFromModel(apiError),
}
}
func baseErrFromModel(apiError *v1.Error) baseError {
message := ""
if apiError.Message != nil {
message = *apiError.Message
}
return baseError{
code: int(apiError.Code),
message: message,
}
}