// Copyright 2020 Google LLC
//
// 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.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.22.0
// 	protoc        v3.12.2
// source: google/ads/googleads/v3/errors/multiplier_error.proto

package errors

import (
	reflect "reflect"
	sync "sync"

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

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// This is a compile-time assertion that a sufficiently up-to-date version
// of the legacy proto package is being used.
const _ = proto.ProtoPackageIsVersion4

// Enum describing possible multiplier errors.
type MultiplierErrorEnum_MultiplierError int32

const (
	// Enum unspecified.
	MultiplierErrorEnum_UNSPECIFIED MultiplierErrorEnum_MultiplierError = 0
	// The received error code is not known in this version.
	MultiplierErrorEnum_UNKNOWN MultiplierErrorEnum_MultiplierError = 1
	// Multiplier value is too high
	MultiplierErrorEnum_MULTIPLIER_TOO_HIGH MultiplierErrorEnum_MultiplierError = 2
	// Multiplier value is too low
	MultiplierErrorEnum_MULTIPLIER_TOO_LOW MultiplierErrorEnum_MultiplierError = 3
	// Too many fractional digits
	MultiplierErrorEnum_TOO_MANY_FRACTIONAL_DIGITS MultiplierErrorEnum_MultiplierError = 4
	// A multiplier cannot be set for this bidding strategy
	MultiplierErrorEnum_MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY MultiplierErrorEnum_MultiplierError = 5
	// A multiplier cannot be set when there is no base bid (e.g., content max
	// cpc)
	MultiplierErrorEnum_MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING MultiplierErrorEnum_MultiplierError = 6
	// A bid multiplier must be specified
	MultiplierErrorEnum_NO_MULTIPLIER_SPECIFIED MultiplierErrorEnum_MultiplierError = 7
	// Multiplier causes bid to exceed daily budget
	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET MultiplierErrorEnum_MultiplierError = 8
	// Multiplier causes bid to exceed monthly budget
	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET MultiplierErrorEnum_MultiplierError = 9
	// Multiplier causes bid to exceed custom budget
	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET MultiplierErrorEnum_MultiplierError = 10
	// Multiplier causes bid to exceed maximum allowed bid
	MultiplierErrorEnum_MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID MultiplierErrorEnum_MultiplierError = 11
	// Multiplier causes bid to become less than the minimum bid allowed
	MultiplierErrorEnum_BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER MultiplierErrorEnum_MultiplierError = 12
	// Multiplier type (cpc vs. cpm) needs to match campaign's bidding strategy
	MultiplierErrorEnum_MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH MultiplierErrorEnum_MultiplierError = 13
)

// Enum value maps for MultiplierErrorEnum_MultiplierError.
var (
	MultiplierErrorEnum_MultiplierError_name = map[int32]string{
		0:  "UNSPECIFIED",
		1:  "UNKNOWN",
		2:  "MULTIPLIER_TOO_HIGH",
		3:  "MULTIPLIER_TOO_LOW",
		4:  "TOO_MANY_FRACTIONAL_DIGITS",
		5:  "MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY",
		6:  "MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING",
		7:  "NO_MULTIPLIER_SPECIFIED",
		8:  "MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET",
		9:  "MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET",
		10: "MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET",
		11: "MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID",
		12: "BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER",
		13: "MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH",
	}
	MultiplierErrorEnum_MultiplierError_value = map[string]int32{
		"UNSPECIFIED":                0,
		"UNKNOWN":                    1,
		"MULTIPLIER_TOO_HIGH":        2,
		"MULTIPLIER_TOO_LOW":         3,
		"TOO_MANY_FRACTIONAL_DIGITS": 4,
		"MULTIPLIER_NOT_ALLOWED_FOR_BIDDING_STRATEGY":     5,
		"MULTIPLIER_NOT_ALLOWED_WHEN_BASE_BID_IS_MISSING": 6,
		"NO_MULTIPLIER_SPECIFIED":                         7,
		"MULTIPLIER_CAUSES_BID_TO_EXCEED_DAILY_BUDGET":    8,
		"MULTIPLIER_CAUSES_BID_TO_EXCEED_MONTHLY_BUDGET":  9,
		"MULTIPLIER_CAUSES_BID_TO_EXCEED_CUSTOM_BUDGET":   10,
		"MULTIPLIER_CAUSES_BID_TO_EXCEED_MAX_ALLOWED_BID": 11,
		"BID_LESS_THAN_MIN_ALLOWED_BID_WITH_MULTIPLIER":   12,
		"MULTIPLIER_AND_BIDDING_STRATEGY_TYPE_MISMATCH":   13,
	}
)

func (x MultiplierErrorEnum_MultiplierError) Enum() *MultiplierErrorEnum_MultiplierError {
	p := new(MultiplierErrorEnum_MultiplierError)
	*p = x
	return p
}

func (x MultiplierErrorEnum_MultiplierError) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (MultiplierErrorEnum_MultiplierError) Descriptor() protoreflect.EnumDescriptor {
	return file_google_ads_googleads_v3_errors_multiplier_error_proto_enumTypes[0].Descriptor()
}

func (MultiplierErrorEnum_MultiplierError) Type() protoreflect.EnumType {
	return &file_google_ads_googleads_v3_errors_multiplier_error_proto_enumTypes[0]
}

func (x MultiplierErrorEnum_MultiplierError) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use MultiplierErrorEnum_MultiplierError.Descriptor instead.
func (MultiplierErrorEnum_MultiplierError) EnumDescriptor() ([]byte, []int) {
	return file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescGZIP(), []int{0, 0}
}

// Container for enum describing possible multiplier errors.
type MultiplierErrorEnum struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields
}

func (x *MultiplierErrorEnum) Reset() {
	*x = MultiplierErrorEnum{}
	if protoimpl.UnsafeEnabled {
		mi := &file_google_ads_googleads_v3_errors_multiplier_error_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *MultiplierErrorEnum) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*MultiplierErrorEnum) ProtoMessage() {}

func (x *MultiplierErrorEnum) ProtoReflect() protoreflect.Message {
	mi := &file_google_ads_googleads_v3_errors_multiplier_error_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use MultiplierErrorEnum.ProtoReflect.Descriptor instead.
func (*MultiplierErrorEnum) Descriptor() ([]byte, []int) {
	return file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescGZIP(), []int{0}
}

var File_google_ads_googleads_v3_errors_multiplier_error_proto protoreflect.FileDescriptor

var file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDesc = []byte{
	0x0a, 0x35, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x64, 0x73, 0x2f, 0x67, 0x6f, 0x6f,
	0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2f, 0x76, 0x33, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73,
	0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x65, 0x72, 0x72, 0x6f,
	0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
	0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x33,
	0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
	0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcf, 0x04, 0x0a, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70,
	0x6c, 0x69, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x22, 0xb7, 0x04,
	0x0a, 0x0f, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f,
	0x72, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
	0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x01, 0x12,
	0x17, 0x0a, 0x13, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f, 0x54, 0x4f,
	0x4f, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4d, 0x55, 0x4c, 0x54,
	0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x4f, 0x57, 0x10, 0x03,
	0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x4f, 0x4f, 0x5f, 0x4d, 0x41, 0x4e, 0x59, 0x5f, 0x46, 0x52, 0x41,
	0x43, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x5f, 0x44, 0x49, 0x47, 0x49, 0x54, 0x53, 0x10, 0x04,
	0x12, 0x2f, 0x0a, 0x2b, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f, 0x4e,
	0x4f, 0x54, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x42,
	0x49, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x10,
	0x05, 0x12, 0x33, 0x0a, 0x2f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f,
	0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x5f, 0x57, 0x48, 0x45, 0x4e,
	0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x42, 0x49, 0x44, 0x5f, 0x49, 0x53, 0x5f, 0x4d, 0x49, 0x53,
	0x53, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x1b, 0x0a, 0x17, 0x4e, 0x4f, 0x5f, 0x4d, 0x55, 0x4c,
	0x54, 0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
	0x44, 0x10, 0x07, 0x12, 0x30, 0x0a, 0x2c, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49, 0x45,
	0x52, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45, 0x53, 0x5f, 0x42, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x5f,
	0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x5f, 0x44, 0x41, 0x49, 0x4c, 0x59, 0x5f, 0x42, 0x55, 0x44,
	0x47, 0x45, 0x54, 0x10, 0x08, 0x12, 0x32, 0x0a, 0x2e, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c,
	0x49, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45, 0x53, 0x5f, 0x42, 0x49, 0x44, 0x5f, 0x54,
	0x4f, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x4c, 0x59,
	0x5f, 0x42, 0x55, 0x44, 0x47, 0x45, 0x54, 0x10, 0x09, 0x12, 0x31, 0x0a, 0x2d, 0x4d, 0x55, 0x4c,
	0x54, 0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45, 0x53, 0x5f, 0x42,
	0x49, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x5f, 0x43, 0x55, 0x53,
	0x54, 0x4f, 0x4d, 0x5f, 0x42, 0x55, 0x44, 0x47, 0x45, 0x54, 0x10, 0x0a, 0x12, 0x33, 0x0a, 0x2f,
	0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49, 0x45, 0x52, 0x5f, 0x43, 0x41, 0x55, 0x53, 0x45,
	0x53, 0x5f, 0x42, 0x49, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x5f,
	0x4d, 0x41, 0x58, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x5f, 0x42, 0x49, 0x44, 0x10,
	0x0b, 0x12, 0x31, 0x0a, 0x2d, 0x42, 0x49, 0x44, 0x5f, 0x4c, 0x45, 0x53, 0x53, 0x5f, 0x54, 0x48,
	0x41, 0x4e, 0x5f, 0x4d, 0x49, 0x4e, 0x5f, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x45, 0x44, 0x5f, 0x42,
	0x49, 0x44, 0x5f, 0x57, 0x49, 0x54, 0x48, 0x5f, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49,
	0x45, 0x52, 0x10, 0x0c, 0x12, 0x31, 0x0a, 0x2d, 0x4d, 0x55, 0x4c, 0x54, 0x49, 0x50, 0x4c, 0x49,
	0x45, 0x52, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x42, 0x49, 0x44, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x53,
	0x54, 0x52, 0x41, 0x54, 0x45, 0x47, 0x59, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x49, 0x53,
	0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x0d, 0x42, 0xef, 0x01, 0x0a, 0x22, 0x63, 0x6f, 0x6d, 0x2e,
	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
	0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x33, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x42, 0x14,
	0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x50,
	0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
	0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f,
	0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x64,
	0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2f, 0x76, 0x33, 0x2f, 0x65,
	0x72, 0x72, 0x6f, 0x72, 0x73, 0x3b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0xa2, 0x02, 0x03, 0x47,
	0x41, 0x41, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x41, 0x64, 0x73, 0x2e,
	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x73, 0x2e, 0x56, 0x33, 0x2e, 0x45, 0x72, 0x72,
	0x6f, 0x72, 0x73, 0xca, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x41, 0x64, 0x73,
	0x5c, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x73, 0x5c, 0x56, 0x33, 0x5c, 0x45, 0x72,
	0x72, 0x6f, 0x72, 0x73, 0xea, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x41,
	0x64, 0x73, 0x3a, 0x3a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x73, 0x3a, 0x3a, 0x56,
	0x33, 0x3a, 0x3a, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x33,
}

var (
	file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescOnce sync.Once
	file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescData = file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDesc
)

func file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescGZIP() []byte {
	file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescOnce.Do(func() {
		file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescData)
	})
	return file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDescData
}

var file_google_ads_googleads_v3_errors_multiplier_error_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_google_ads_googleads_v3_errors_multiplier_error_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_google_ads_googleads_v3_errors_multiplier_error_proto_goTypes = []interface{}{
	(MultiplierErrorEnum_MultiplierError)(0), // 0: google.ads.googleads.v3.errors.MultiplierErrorEnum.MultiplierError
	(*MultiplierErrorEnum)(nil),              // 1: google.ads.googleads.v3.errors.MultiplierErrorEnum
}
var file_google_ads_googleads_v3_errors_multiplier_error_proto_depIdxs = []int32{
	0, // [0:0] is the sub-list for method output_type
	0, // [0:0] is the sub-list for method input_type
	0, // [0:0] is the sub-list for extension type_name
	0, // [0:0] is the sub-list for extension extendee
	0, // [0:0] is the sub-list for field type_name
}

func init() { file_google_ads_googleads_v3_errors_multiplier_error_proto_init() }
func file_google_ads_googleads_v3_errors_multiplier_error_proto_init() {
	if File_google_ads_googleads_v3_errors_multiplier_error_proto != nil {
		return
	}
	if !protoimpl.UnsafeEnabled {
		file_google_ads_googleads_v3_errors_multiplier_error_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*MultiplierErrorEnum); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDesc,
			NumEnums:      1,
			NumMessages:   1,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_google_ads_googleads_v3_errors_multiplier_error_proto_goTypes,
		DependencyIndexes: file_google_ads_googleads_v3_errors_multiplier_error_proto_depIdxs,
		EnumInfos:         file_google_ads_googleads_v3_errors_multiplier_error_proto_enumTypes,
		MessageInfos:      file_google_ads_googleads_v3_errors_multiplier_error_proto_msgTypes,
	}.Build()
	File_google_ads_googleads_v3_errors_multiplier_error_proto = out.File
	file_google_ads_googleads_v3_errors_multiplier_error_proto_rawDesc = nil
	file_google_ads_googleads_v3_errors_multiplier_error_proto_goTypes = nil
	file_google_ads_googleads_v3_errors_multiplier_error_proto_depIdxs = nil
}
