// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v2/errors/request_error.proto

package errors

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	_ "google.golang.org/genproto/googleapis/api/annotations"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// Enum describing possible request errors.
type RequestErrorEnum_RequestError int32

const (
	// Enum unspecified.
	RequestErrorEnum_UNSPECIFIED RequestErrorEnum_RequestError = 0
	// The received error code is not known in this version.
	RequestErrorEnum_UNKNOWN RequestErrorEnum_RequestError = 1
	// Resource name is required for this request.
	RequestErrorEnum_RESOURCE_NAME_MISSING RequestErrorEnum_RequestError = 3
	// Resource name provided is malformed.
	RequestErrorEnum_RESOURCE_NAME_MALFORMED RequestErrorEnum_RequestError = 4
	// Resource name provided is malformed.
	RequestErrorEnum_BAD_RESOURCE_ID RequestErrorEnum_RequestError = 17
	// Customer ID is invalid.
	RequestErrorEnum_INVALID_CUSTOMER_ID RequestErrorEnum_RequestError = 16
	// Mutate operation should have either create, update, or remove specified.
	RequestErrorEnum_OPERATION_REQUIRED RequestErrorEnum_RequestError = 5
	// Requested resource not found.
	RequestErrorEnum_RESOURCE_NOT_FOUND RequestErrorEnum_RequestError = 6
	// Next page token specified in user request is invalid.
	RequestErrorEnum_INVALID_PAGE_TOKEN RequestErrorEnum_RequestError = 7
	// Next page token specified in user request has expired.
	RequestErrorEnum_EXPIRED_PAGE_TOKEN RequestErrorEnum_RequestError = 8
	// Page size specified in user request is invalid.
	RequestErrorEnum_INVALID_PAGE_SIZE RequestErrorEnum_RequestError = 22
	// Required field is missing.
	RequestErrorEnum_REQUIRED_FIELD_MISSING RequestErrorEnum_RequestError = 9
	// The field cannot be modified because it's immutable. It's also possible
	// that the field can be modified using 'create' operation but not 'update'.
	RequestErrorEnum_IMMUTABLE_FIELD RequestErrorEnum_RequestError = 11
	// Received too many entries in request.
	RequestErrorEnum_TOO_MANY_MUTATE_OPERATIONS RequestErrorEnum_RequestError = 13
	// Request cannot be executed by a manager account.
	RequestErrorEnum_CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT RequestErrorEnum_RequestError = 14
	// Mutate request was attempting to modify a readonly field.
	// For instance, Budget fields can be requested for Ad Group,
	// but are read-only for adGroups:mutate.
	RequestErrorEnum_CANNOT_MODIFY_FOREIGN_FIELD RequestErrorEnum_RequestError = 15
	// Enum value is not permitted.
	RequestErrorEnum_INVALID_ENUM_VALUE RequestErrorEnum_RequestError = 18
	// The developer-token parameter is required for all requests.
	RequestErrorEnum_DEVELOPER_TOKEN_PARAMETER_MISSING RequestErrorEnum_RequestError = 19
	// The login-customer-id parameter is required for this request.
	RequestErrorEnum_LOGIN_CUSTOMER_ID_PARAMETER_MISSING RequestErrorEnum_RequestError = 20
	// page_token is set in the validate only request
	RequestErrorEnum_VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN RequestErrorEnum_RequestError = 21
	// return_summary_row cannot be enabled if request did not select any
	// metrics field.
	RequestErrorEnum_CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS RequestErrorEnum_RequestError = 29
	// return_summary_row should not be enabled for validate only requests.
	RequestErrorEnum_CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS RequestErrorEnum_RequestError = 30
	// return_summary_row parameter value should be the same between requests
	// with page_token field set and their original request.
	RequestErrorEnum_INCONSISTENT_RETURN_SUMMARY_ROW_VALUE RequestErrorEnum_RequestError = 31
)

var RequestErrorEnum_RequestError_name = map[int32]string{
	0:  "UNSPECIFIED",
	1:  "UNKNOWN",
	3:  "RESOURCE_NAME_MISSING",
	4:  "RESOURCE_NAME_MALFORMED",
	17: "BAD_RESOURCE_ID",
	16: "INVALID_CUSTOMER_ID",
	5:  "OPERATION_REQUIRED",
	6:  "RESOURCE_NOT_FOUND",
	7:  "INVALID_PAGE_TOKEN",
	8:  "EXPIRED_PAGE_TOKEN",
	22: "INVALID_PAGE_SIZE",
	9:  "REQUIRED_FIELD_MISSING",
	11: "IMMUTABLE_FIELD",
	13: "TOO_MANY_MUTATE_OPERATIONS",
	14: "CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT",
	15: "CANNOT_MODIFY_FOREIGN_FIELD",
	18: "INVALID_ENUM_VALUE",
	19: "DEVELOPER_TOKEN_PARAMETER_MISSING",
	20: "LOGIN_CUSTOMER_ID_PARAMETER_MISSING",
	21: "VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN",
	29: "CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS",
	30: "CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS",
	31: "INCONSISTENT_RETURN_SUMMARY_ROW_VALUE",
}

var RequestErrorEnum_RequestError_value = map[string]int32{
	"UNSPECIFIED":                                           0,
	"UNKNOWN":                                               1,
	"RESOURCE_NAME_MISSING":                                 3,
	"RESOURCE_NAME_MALFORMED":                               4,
	"BAD_RESOURCE_ID":                                       17,
	"INVALID_CUSTOMER_ID":                                   16,
	"OPERATION_REQUIRED":                                    5,
	"RESOURCE_NOT_FOUND":                                    6,
	"INVALID_PAGE_TOKEN":                                    7,
	"EXPIRED_PAGE_TOKEN":                                    8,
	"INVALID_PAGE_SIZE":                                     22,
	"REQUIRED_FIELD_MISSING":                                9,
	"IMMUTABLE_FIELD":                                       11,
	"TOO_MANY_MUTATE_OPERATIONS":                            13,
	"CANNOT_BE_EXECUTED_BY_MANAGER_ACCOUNT":                 14,
	"CANNOT_MODIFY_FOREIGN_FIELD":                           15,
	"INVALID_ENUM_VALUE":                                    18,
	"DEVELOPER_TOKEN_PARAMETER_MISSING":                     19,
	"LOGIN_CUSTOMER_ID_PARAMETER_MISSING":                   20,
	"VALIDATE_ONLY_REQUEST_HAS_PAGE_TOKEN":                  21,
	"CANNOT_RETURN_SUMMARY_ROW_FOR_REQUEST_WITHOUT_METRICS": 29,
	"CANNOT_RETURN_SUMMARY_ROW_FOR_VALIDATE_ONLY_REQUESTS":  30,
	"INCONSISTENT_RETURN_SUMMARY_ROW_VALUE":                 31,
}

func (x RequestErrorEnum_RequestError) String() string {
	return proto.EnumName(RequestErrorEnum_RequestError_name, int32(x))
}

func (RequestErrorEnum_RequestError) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_395ab4fdf1bc46c9, []int{0, 0}
}

// Container for enum describing possible request errors.
type RequestErrorEnum struct {
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *RequestErrorEnum) Reset()         { *m = RequestErrorEnum{} }
func (m *RequestErrorEnum) String() string { return proto.CompactTextString(m) }
func (*RequestErrorEnum) ProtoMessage()    {}
func (*RequestErrorEnum) Descriptor() ([]byte, []int) {
	return fileDescriptor_395ab4fdf1bc46c9, []int{0}
}

func (m *RequestErrorEnum) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_RequestErrorEnum.Unmarshal(m, b)
}
func (m *RequestErrorEnum) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_RequestErrorEnum.Marshal(b, m, deterministic)
}
func (m *RequestErrorEnum) XXX_Merge(src proto.Message) {
	xxx_messageInfo_RequestErrorEnum.Merge(m, src)
}
func (m *RequestErrorEnum) XXX_Size() int {
	return xxx_messageInfo_RequestErrorEnum.Size(m)
}
func (m *RequestErrorEnum) XXX_DiscardUnknown() {
	xxx_messageInfo_RequestErrorEnum.DiscardUnknown(m)
}

var xxx_messageInfo_RequestErrorEnum proto.InternalMessageInfo

func init() {
	proto.RegisterEnum("google.ads.googleads.v2.errors.RequestErrorEnum_RequestError", RequestErrorEnum_RequestError_name, RequestErrorEnum_RequestError_value)
	proto.RegisterType((*RequestErrorEnum)(nil), "google.ads.googleads.v2.errors.RequestErrorEnum")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v2/errors/request_error.proto", fileDescriptor_395ab4fdf1bc46c9)
}

var fileDescriptor_395ab4fdf1bc46c9 = []byte{
	// 635 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x53, 0xef, 0x4e, 0x13, 0x4b,
	0x14, 0xbf, 0xc0, 0x05, 0xee, 0x1d, 0xee, 0x95, 0x61, 0x10, 0x88, 0xa0, 0x25, 0x56, 0x89, 0xfa,
	0x65, 0x9b, 0x54, 0x4d, 0x74, 0xfd, 0x34, 0xdd, 0x3d, 0x2d, 0x13, 0x76, 0x67, 0xea, 0xfc, 0x29,
	0x94, 0x34, 0x99, 0x54, 0xdb, 0x34, 0x24, 0xd0, 0xc5, 0x6e, 0xe1, 0x81, 0xfc, 0xe8, 0xa3, 0xf8,
	0x04, 0x3e, 0x83, 0xd1, 0x77, 0x30, 0xd3, 0x69, 0xd7, 0x6a, 0x90, 0x4f, 0x7b, 0xf6, 0x9c, 0xdf,
	0xef, 0xfc, 0x7e, 0xe7, 0x64, 0x0e, 0xaa, 0x0e, 0xb2, 0x6c, 0x70, 0xde, 0xaf, 0x74, 0x7b, 0x79,
	0xc5, 0x87, 0x2e, 0xba, 0xae, 0x56, 0xfa, 0xa3, 0x51, 0x36, 0xca, 0x2b, 0xa3, 0xfe, 0x87, 0xab,
	0x7e, 0x3e, 0xb6, 0x93, 0xdf, 0xe0, 0x72, 0x94, 0x8d, 0x33, 0x52, 0xf2, 0xc0, 0xa0, 0xdb, 0xcb,
	0x83, 0x82, 0x13, 0x5c, 0x57, 0x03, 0xcf, 0xd9, 0xbd, 0x3f, 0xeb, 0x79, 0x79, 0x56, 0xe9, 0x0e,
	0x87, 0xd9, 0xb8, 0x3b, 0x3e, 0xcb, 0x86, 0xb9, 0x67, 0x97, 0xbf, 0x2f, 0x23, 0x2c, 0x7d, 0x57,
	0x70, 0x78, 0x18, 0x5e, 0x5d, 0x94, 0xbf, 0x2c, 0xa3, 0xff, 0xe6, 0x93, 0x64, 0x1d, 0xad, 0x19,
	0xae, 0x9a, 0x10, 0xb1, 0x3a, 0x83, 0x18, 0xff, 0x45, 0xd6, 0xd0, 0xaa, 0xe1, 0x47, 0x5c, 0x1c,
	0x73, 0xbc, 0x40, 0xee, 0xa1, 0x2d, 0x09, 0x4a, 0x18, 0x19, 0x81, 0xe5, 0x34, 0x05, 0x9b, 0x32,
	0xa5, 0x18, 0x6f, 0xe0, 0x25, 0xb2, 0x87, 0x76, 0x7e, 0x2b, 0xd1, 0xa4, 0x2e, 0x64, 0x0a, 0x31,
	0xfe, 0x9b, 0x6c, 0xa2, 0xf5, 0x1a, 0x8d, 0x6d, 0x01, 0x60, 0x31, 0xde, 0x20, 0x3b, 0x68, 0x93,
	0xf1, 0x16, 0x4d, 0x58, 0x6c, 0x23, 0xa3, 0xb4, 0x48, 0x41, 0xba, 0x02, 0x26, 0xdb, 0x88, 0x88,
	0x26, 0x48, 0xaa, 0x99, 0xe0, 0x56, 0xc2, 0x5b, 0xc3, 0x24, 0xc4, 0x78, 0xd9, 0xe5, 0x7f, 0x4a,
	0x08, 0x6d, 0xeb, 0xc2, 0xf0, 0x18, 0xaf, 0xb8, 0xfc, 0xac, 0x51, 0x93, 0x36, 0xc0, 0x6a, 0x71,
	0x04, 0x1c, 0xaf, 0xba, 0x3c, 0x9c, 0x34, 0x1d, 0x79, 0x3e, 0xff, 0x0f, 0xd9, 0x42, 0x1b, 0xbf,
	0xe0, 0x15, 0x3b, 0x05, 0xbc, 0x4d, 0x76, 0xd1, 0xf6, 0x4c, 0xcc, 0xd6, 0x19, 0x24, 0x71, 0x31,
	0xdd, 0xbf, 0x6e, 0x00, 0x96, 0xa6, 0x46, 0xd3, 0x5a, 0x02, 0xbe, 0x88, 0xd7, 0x48, 0x09, 0xed,
	0x6a, 0x21, 0x6c, 0x4a, 0x79, 0xdb, 0xba, 0x9a, 0x06, 0x5b, 0xf8, 0x56, 0xf8, 0x7f, 0xf2, 0x0c,
	0x1d, 0x44, 0x94, 0x3b, 0xa7, 0x35, 0xb0, 0x70, 0x02, 0x91, 0xd1, 0x10, 0xdb, 0x5a, 0xdb, 0x31,
	0x68, 0x03, 0xa4, 0xa5, 0x51, 0x24, 0x0c, 0xd7, 0xf8, 0x0e, 0xd9, 0x47, 0x7b, 0x53, 0x68, 0x2a,
	0x62, 0x56, 0x6f, 0xdb, 0xba, 0x90, 0xc0, 0x1a, 0x7c, 0xaa, 0xb5, 0x3e, 0x3f, 0x23, 0x70, 0x93,
	0xda, 0x16, 0x4d, 0x0c, 0x60, 0x42, 0x0e, 0xd0, 0xc3, 0x18, 0x5a, 0x90, 0x38, 0x61, 0x3f, 0xa0,
	0x6d, 0x52, 0x49, 0x53, 0xd0, 0x20, 0x0b, 0xff, 0x9b, 0xe4, 0x09, 0x7a, 0x94, 0x88, 0x06, 0xe3,
	0xf3, 0x9b, 0xbe, 0x01, 0x78, 0x97, 0x3c, 0x45, 0x8f, 0x27, 0x2a, 0x93, 0x61, 0x78, 0xd2, 0x9e,
	0xec, 0x1f, 0x94, 0xb6, 0x87, 0x54, 0xcd, 0x6f, 0x71, 0x8b, 0xbc, 0x46, 0x2f, 0xa7, 0x96, 0x25,
	0x68, 0x23, 0xb9, 0x55, 0x26, 0x4d, 0xa9, 0x6c, 0x5b, 0x29, 0x8e, 0x9d, 0xfd, 0x82, 0x79, 0xcc,
	0xf4, 0xa1, 0x30, 0xda, 0xa6, 0xa0, 0x25, 0x8b, 0x14, 0x7e, 0x40, 0x5e, 0xa1, 0x17, 0xb7, 0x53,
	0x6f, 0xb4, 0xa0, 0x70, 0xc9, 0xad, 0x94, 0xf1, 0x48, 0x70, 0xc5, 0x94, 0x06, 0x7e, 0x23, 0xdf,
	0x6f, 0x66, 0xbf, 0xf6, 0x6d, 0x01, 0x95, 0xdf, 0x67, 0x17, 0xc1, 0xed, 0x47, 0x53, 0xdb, 0x98,
	0x7f, 0xfe, 0x4d, 0x77, 0x29, 0xcd, 0x85, 0xd3, 0x78, 0x4a, 0x1a, 0x64, 0xe7, 0xdd, 0xe1, 0x20,
	0xc8, 0x46, 0x83, 0xca, 0xa0, 0x3f, 0x9c, 0xdc, 0xd1, 0xec, 0x5a, 0x2f, 0xcf, 0xf2, 0x3f, 0x1d,
	0xef, 0x1b, 0xff, 0xf9, 0xb8, 0xb8, 0xd4, 0xa0, 0xf4, 0xd3, 0x62, 0xa9, 0xe1, 0x9b, 0xd1, 0x5e,
	0x1e, 0xf8, 0xd0, 0x45, 0xad, 0x6a, 0x30, 0x91, 0xcc, 0x3f, 0xcf, 0x00, 0x1d, 0xda, 0xcb, 0x3b,
	0x05, 0xa0, 0xd3, 0xaa, 0x76, 0x3c, 0xe0, 0xeb, 0x62, 0xd9, 0x67, 0xc3, 0x90, 0xf6, 0xf2, 0x30,
	0x2c, 0x20, 0x61, 0xd8, 0xaa, 0x86, 0xa1, 0x07, 0xbd, 0x5b, 0x99, 0xb8, 0x7b, 0xfe, 0x23, 0x00,
	0x00, 0xff, 0xff, 0x43, 0xeb, 0xd6, 0xff, 0x59, 0x04, 0x00, 0x00,
}
