74 lines
3.1 KiB
Go
74 lines
3.1 KiB
Go
// Copyright 2016-2018, Pulumi Corporation.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package apitype
|
|
|
|
import "fmt"
|
|
|
|
// ErrorType is an enum for various types of common errors that occur.
|
|
type ErrorType string
|
|
|
|
const (
|
|
// NotFoundErrorType is used when a resource or resource field was not found.
|
|
// For example, updating a Stack that doesn't exist.
|
|
NotFoundErrorType ErrorType = "not_found"
|
|
// RequiredErrorType is used when a resource or resource field is missing and is required.
|
|
// For example, creating a Stack without a project name.
|
|
RequiredErrorType ErrorType = "required"
|
|
// InvalidErrorType is used when the a resource or field was passed with an invalid value or state.
|
|
// For example, creating a Stack with an invalid name.
|
|
InvalidErrorType ErrorType = "invalid"
|
|
// AlreadyExistsErrorType is used if the resource or field already exists (and must be unique).
|
|
// For example, creating two Stacks with the same name.
|
|
AlreadyExistsErrorType ErrorType = "already_exists"
|
|
|
|
// CustomErrorType is used to describe any ErrorType not found in this file, and must be paired with
|
|
// a custom error message.
|
|
CustomErrorType ErrorType = "custom"
|
|
)
|
|
|
|
// RequestError describes a request error in more detail, such the specific validation
|
|
// error(s) that caused the request to fail and links to the relevant documentation.
|
|
type RequestError struct {
|
|
// Resource is the user-friendly description of the resource, e.g. "stack" or "tag".
|
|
Resource string `json:"resource"`
|
|
|
|
// Attribute describes the property of the resource (if applicable) that is problematic, e.g.
|
|
// "name" or "length".
|
|
Attribute *string `json:"attribute,omitempty"`
|
|
|
|
// ErrorType is the type of error the attribute's value caused.
|
|
ErrorType ErrorType `json:"errorType"`
|
|
// CustomMessage is the error message to display with CustomErrorType.
|
|
CustomMessage *string `json:"customMessage,omitempty"`
|
|
}
|
|
|
|
// ErrorResponse is returned from the API when an actual response body is not appropriate. i.e.
|
|
// in all error situations.
|
|
type ErrorResponse struct {
|
|
// Code is the HTTP status code for the error response.
|
|
Code int `json:"code"`
|
|
// Message is the user-facing message describing the error.
|
|
Message string `json:"message"`
|
|
|
|
// DocumentationURL is an optional URL the user can to go learn more about the error.
|
|
DocumentationURL *string `json:"documentationUrl,omitempty"`
|
|
// Errors optionally include more specific data about why the request failed.
|
|
Errors []RequestError `json:"errors,omitempty"`
|
|
}
|
|
|
|
// Error implements the Error interface.
|
|
func (err ErrorResponse) Error() string {
|
|
return fmt.Sprintf("[%d] %s", err.Code, err.Message)
|
|
}
|