pulumi/pkg/apitype/errors.go
2018-08-07 10:43:18 -07:00

75 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)
}