// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/resources/feed_item.proto

package resources

import (
	fmt "fmt"
	math "math"

	proto "github.com/golang/protobuf/proto"
	wrappers "github.com/golang/protobuf/ptypes/wrappers"
	common "google.golang.org/genproto/googleapis/ads/googleads/v3/common"
	enums "google.golang.org/genproto/googleapis/ads/googleads/v3/enums"
	errors "google.golang.org/genproto/googleapis/ads/googleads/v3/errors"
	_ "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

// A feed item.
type FeedItem struct {
	// Immutable. The resource name of the feed item.
	// Feed item resource names have the form:
	//
	// `customers/{customer_id}/feedItems/{feed_id}~{feed_item_id}`
	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	// Immutable. The feed to which this feed item belongs.
	Feed *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed,proto3" json:"feed,omitempty"`
	// Output only. The ID of this feed item.
	Id *wrappers.Int64Value `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
	// Start time in which this feed item is effective and can begin serving. The
	// time is in the customer's time zone.
	// The format is "YYYY-MM-DD HH:MM:SS".
	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
	StartDateTime *wrappers.StringValue `protobuf:"bytes,4,opt,name=start_date_time,json=startDateTime,proto3" json:"start_date_time,omitempty"`
	// End time in which this feed item is no longer effective and will stop
	// serving. The time is in the customer's time zone.
	// The format is "YYYY-MM-DD HH:MM:SS".
	// Examples: "2018-03-05 09:15:00" or "2018-02-01 14:34:30"
	EndDateTime *wrappers.StringValue `protobuf:"bytes,5,opt,name=end_date_time,json=endDateTime,proto3" json:"end_date_time,omitempty"`
	// The feed item's attribute values.
	AttributeValues []*FeedItemAttributeValue `protobuf:"bytes,6,rep,name=attribute_values,json=attributeValues,proto3" json:"attribute_values,omitempty"`
	// Geo targeting restriction specifies the type of location that can be used
	// for targeting.
	GeoTargetingRestriction enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction `protobuf:"varint,7,opt,name=geo_targeting_restriction,json=geoTargetingRestriction,proto3,enum=google.ads.googleads.v3.enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction" json:"geo_targeting_restriction,omitempty"`
	// The list of mappings used to substitute custom parameter tags in a
	// `tracking_url_template`, `final_urls`, or `mobile_final_urls`.
	UrlCustomParameters []*common.CustomParameter `protobuf:"bytes,8,rep,name=url_custom_parameters,json=urlCustomParameters,proto3" json:"url_custom_parameters,omitempty"`
	// Output only. Status of the feed item.
	// This field is read-only.
	Status enums.FeedItemStatusEnum_FeedItemStatus `protobuf:"varint,9,opt,name=status,proto3,enum=google.ads.googleads.v3.enums.FeedItemStatusEnum_FeedItemStatus" json:"status,omitempty"`
	// Output only. List of info about a feed item's validation and approval state for active
	// feed mappings. There will be an entry in the list for each type of feed
	// mapping associated with the feed, e.g. a feed with a sitelink and a call
	// feed mapping would cause every feed item associated with that feed to have
	// an entry in this list for both sitelink and call.
	// This field is read-only.
	PolicyInfos          []*FeedItemPlaceholderPolicyInfo `protobuf:"bytes,10,rep,name=policy_infos,json=policyInfos,proto3" json:"policy_infos,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                         `json:"-"`
	XXX_unrecognized     []byte                           `json:"-"`
	XXX_sizecache        int32                            `json:"-"`
}

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

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

var xxx_messageInfo_FeedItem proto.InternalMessageInfo

func (m *FeedItem) GetResourceName() string {
	if m != nil {
		return m.ResourceName
	}
	return ""
}

func (m *FeedItem) GetFeed() *wrappers.StringValue {
	if m != nil {
		return m.Feed
	}
	return nil
}

func (m *FeedItem) GetId() *wrappers.Int64Value {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *FeedItem) GetStartDateTime() *wrappers.StringValue {
	if m != nil {
		return m.StartDateTime
	}
	return nil
}

func (m *FeedItem) GetEndDateTime() *wrappers.StringValue {
	if m != nil {
		return m.EndDateTime
	}
	return nil
}

func (m *FeedItem) GetAttributeValues() []*FeedItemAttributeValue {
	if m != nil {
		return m.AttributeValues
	}
	return nil
}

func (m *FeedItem) GetGeoTargetingRestriction() enums.GeoTargetingRestrictionEnum_GeoTargetingRestriction {
	if m != nil {
		return m.GeoTargetingRestriction
	}
	return enums.GeoTargetingRestrictionEnum_UNSPECIFIED
}

func (m *FeedItem) GetUrlCustomParameters() []*common.CustomParameter {
	if m != nil {
		return m.UrlCustomParameters
	}
	return nil
}

func (m *FeedItem) GetStatus() enums.FeedItemStatusEnum_FeedItemStatus {
	if m != nil {
		return m.Status
	}
	return enums.FeedItemStatusEnum_UNSPECIFIED
}

func (m *FeedItem) GetPolicyInfos() []*FeedItemPlaceholderPolicyInfo {
	if m != nil {
		return m.PolicyInfos
	}
	return nil
}

// A feed item attribute value.
type FeedItemAttributeValue struct {
	// Id of the feed attribute for which the value is associated with.
	FeedAttributeId *wrappers.Int64Value `protobuf:"bytes,1,opt,name=feed_attribute_id,json=feedAttributeId,proto3" json:"feed_attribute_id,omitempty"`
	// Int64 value. Should be set if feed_attribute_id refers to a feed attribute
	// of type INT64.
	IntegerValue *wrappers.Int64Value `protobuf:"bytes,2,opt,name=integer_value,json=integerValue,proto3" json:"integer_value,omitempty"`
	// Bool value. Should be set if feed_attribute_id refers to a feed attribute
	// of type BOOLEAN.
	BooleanValue *wrappers.BoolValue `protobuf:"bytes,3,opt,name=boolean_value,json=booleanValue,proto3" json:"boolean_value,omitempty"`
	// String value. Should be set if feed_attribute_id refers to a feed attribute
	// of type STRING, URL or DATE_TIME.
	// For STRING the maximum length is 1500 characters. For URL the maximum
	// length is 2076 characters. For DATE_TIME the string must be in the format
	// "YYYYMMDD HHMMSS".
	StringValue *wrappers.StringValue `protobuf:"bytes,4,opt,name=string_value,json=stringValue,proto3" json:"string_value,omitempty"`
	// Double value. Should be set if feed_attribute_id refers to a feed attribute
	// of type DOUBLE.
	DoubleValue *wrappers.DoubleValue `protobuf:"bytes,5,opt,name=double_value,json=doubleValue,proto3" json:"double_value,omitempty"`
	// Price value. Should be set if feed_attribute_id refers to a feed attribute
	// of type PRICE.
	PriceValue *common.Money `protobuf:"bytes,6,opt,name=price_value,json=priceValue,proto3" json:"price_value,omitempty"`
	// Repeated int64 value. Should be set if feed_attribute_id refers to a feed
	// attribute of type INT64_LIST.
	IntegerValues []*wrappers.Int64Value `protobuf:"bytes,7,rep,name=integer_values,json=integerValues,proto3" json:"integer_values,omitempty"`
	// Repeated bool value. Should be set if feed_attribute_id refers to a feed
	// attribute of type BOOLEAN_LIST.
	BooleanValues []*wrappers.BoolValue `protobuf:"bytes,8,rep,name=boolean_values,json=booleanValues,proto3" json:"boolean_values,omitempty"`
	// Repeated string value. Should be set if feed_attribute_id refers to a feed
	// attribute of type STRING_LIST, URL_LIST or DATE_TIME_LIST.
	// For STRING_LIST and URL_LIST the total size of the list in bytes may not
	// exceed 3000. For DATE_TIME_LIST the number of elements may not exceed 200.
	//
	// For STRING_LIST the maximum length of each string element is 1500
	// characters. For URL_LIST the maximum length is 2076 characters. For
	// DATE_TIME the format of the string must be the same as start and end time
	// for the feed item.
	StringValues []*wrappers.StringValue `protobuf:"bytes,9,rep,name=string_values,json=stringValues,proto3" json:"string_values,omitempty"`
	// Repeated double value. Should be set if feed_attribute_id refers to a feed
	// attribute of type DOUBLE_LIST.
	DoubleValues         []*wrappers.DoubleValue `protobuf:"bytes,10,rep,name=double_values,json=doubleValues,proto3" json:"double_values,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

func (m *FeedItemAttributeValue) Reset()         { *m = FeedItemAttributeValue{} }
func (m *FeedItemAttributeValue) String() string { return proto.CompactTextString(m) }
func (*FeedItemAttributeValue) ProtoMessage()    {}
func (*FeedItemAttributeValue) Descriptor() ([]byte, []int) {
	return fileDescriptor_aa81ffed50546ca6, []int{1}
}

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

var xxx_messageInfo_FeedItemAttributeValue proto.InternalMessageInfo

func (m *FeedItemAttributeValue) GetFeedAttributeId() *wrappers.Int64Value {
	if m != nil {
		return m.FeedAttributeId
	}
	return nil
}

func (m *FeedItemAttributeValue) GetIntegerValue() *wrappers.Int64Value {
	if m != nil {
		return m.IntegerValue
	}
	return nil
}

func (m *FeedItemAttributeValue) GetBooleanValue() *wrappers.BoolValue {
	if m != nil {
		return m.BooleanValue
	}
	return nil
}

func (m *FeedItemAttributeValue) GetStringValue() *wrappers.StringValue {
	if m != nil {
		return m.StringValue
	}
	return nil
}

func (m *FeedItemAttributeValue) GetDoubleValue() *wrappers.DoubleValue {
	if m != nil {
		return m.DoubleValue
	}
	return nil
}

func (m *FeedItemAttributeValue) GetPriceValue() *common.Money {
	if m != nil {
		return m.PriceValue
	}
	return nil
}

func (m *FeedItemAttributeValue) GetIntegerValues() []*wrappers.Int64Value {
	if m != nil {
		return m.IntegerValues
	}
	return nil
}

func (m *FeedItemAttributeValue) GetBooleanValues() []*wrappers.BoolValue {
	if m != nil {
		return m.BooleanValues
	}
	return nil
}

func (m *FeedItemAttributeValue) GetStringValues() []*wrappers.StringValue {
	if m != nil {
		return m.StringValues
	}
	return nil
}

func (m *FeedItemAttributeValue) GetDoubleValues() []*wrappers.DoubleValue {
	if m != nil {
		return m.DoubleValues
	}
	return nil
}

// Policy, validation, and quality approval info for a feed item for the
// specified placeholder type.
type FeedItemPlaceholderPolicyInfo struct {
	// Output only. The placeholder type.
	PlaceholderTypeEnum enums.PlaceholderTypeEnum_PlaceholderType `protobuf:"varint,10,opt,name=placeholder_type_enum,json=placeholderTypeEnum,proto3,enum=google.ads.googleads.v3.enums.PlaceholderTypeEnum_PlaceholderType" json:"placeholder_type_enum,omitempty"`
	// Output only. The FeedMapping that contains the placeholder type.
	FeedMappingResourceName *wrappers.StringValue `protobuf:"bytes,2,opt,name=feed_mapping_resource_name,json=feedMappingResourceName,proto3" json:"feed_mapping_resource_name,omitempty"`
	// Output only. Where the placeholder type is in the review process.
	ReviewStatus enums.PolicyReviewStatusEnum_PolicyReviewStatus `protobuf:"varint,3,opt,name=review_status,json=reviewStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyReviewStatusEnum_PolicyReviewStatus" json:"review_status,omitempty"`
	// Output only. The overall approval status of the placeholder type, calculated based on
	// the status of its individual policy topic entries.
	ApprovalStatus enums.PolicyApprovalStatusEnum_PolicyApprovalStatus `protobuf:"varint,4,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus" json:"approval_status,omitempty"`
	// Output only. The list of policy findings for the placeholder type.
	PolicyTopicEntries []*common.PolicyTopicEntry `protobuf:"bytes,5,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
	// Output only. The validation status of the palceholder type.
	ValidationStatus enums.FeedItemValidationStatusEnum_FeedItemValidationStatus `protobuf:"varint,6,opt,name=validation_status,json=validationStatus,proto3,enum=google.ads.googleads.v3.enums.FeedItemValidationStatusEnum_FeedItemValidationStatus" json:"validation_status,omitempty"`
	// Output only. List of placeholder type validation errors.
	ValidationErrors []*FeedItemValidationError `protobuf:"bytes,7,rep,name=validation_errors,json=validationErrors,proto3" json:"validation_errors,omitempty"`
	// Output only. Placeholder type quality evaluation approval status.
	QualityApprovalStatus enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus `protobuf:"varint,8,opt,name=quality_approval_status,json=qualityApprovalStatus,proto3,enum=google.ads.googleads.v3.enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus" json:"quality_approval_status,omitempty"`
	// Output only. List of placeholder type quality evaluation disapproval reasons.
	QualityDisapprovalReasons []enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason `protobuf:"varint,9,rep,packed,name=quality_disapproval_reasons,json=qualityDisapprovalReasons,proto3,enum=google.ads.googleads.v3.enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason" json:"quality_disapproval_reasons,omitempty"`
	XXX_NoUnkeyedLiteral      struct{}                                                                      `json:"-"`
	XXX_unrecognized          []byte                                                                        `json:"-"`
	XXX_sizecache             int32                                                                         `json:"-"`
}

func (m *FeedItemPlaceholderPolicyInfo) Reset()         { *m = FeedItemPlaceholderPolicyInfo{} }
func (m *FeedItemPlaceholderPolicyInfo) String() string { return proto.CompactTextString(m) }
func (*FeedItemPlaceholderPolicyInfo) ProtoMessage()    {}
func (*FeedItemPlaceholderPolicyInfo) Descriptor() ([]byte, []int) {
	return fileDescriptor_aa81ffed50546ca6, []int{2}
}

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

var xxx_messageInfo_FeedItemPlaceholderPolicyInfo proto.InternalMessageInfo

func (m *FeedItemPlaceholderPolicyInfo) GetPlaceholderTypeEnum() enums.PlaceholderTypeEnum_PlaceholderType {
	if m != nil {
		return m.PlaceholderTypeEnum
	}
	return enums.PlaceholderTypeEnum_UNSPECIFIED
}

func (m *FeedItemPlaceholderPolicyInfo) GetFeedMappingResourceName() *wrappers.StringValue {
	if m != nil {
		return m.FeedMappingResourceName
	}
	return nil
}

func (m *FeedItemPlaceholderPolicyInfo) GetReviewStatus() enums.PolicyReviewStatusEnum_PolicyReviewStatus {
	if m != nil {
		return m.ReviewStatus
	}
	return enums.PolicyReviewStatusEnum_UNSPECIFIED
}

func (m *FeedItemPlaceholderPolicyInfo) GetApprovalStatus() enums.PolicyApprovalStatusEnum_PolicyApprovalStatus {
	if m != nil {
		return m.ApprovalStatus
	}
	return enums.PolicyApprovalStatusEnum_UNSPECIFIED
}

func (m *FeedItemPlaceholderPolicyInfo) GetPolicyTopicEntries() []*common.PolicyTopicEntry {
	if m != nil {
		return m.PolicyTopicEntries
	}
	return nil
}

func (m *FeedItemPlaceholderPolicyInfo) GetValidationStatus() enums.FeedItemValidationStatusEnum_FeedItemValidationStatus {
	if m != nil {
		return m.ValidationStatus
	}
	return enums.FeedItemValidationStatusEnum_UNSPECIFIED
}

func (m *FeedItemPlaceholderPolicyInfo) GetValidationErrors() []*FeedItemValidationError {
	if m != nil {
		return m.ValidationErrors
	}
	return nil
}

func (m *FeedItemPlaceholderPolicyInfo) GetQualityApprovalStatus() enums.FeedItemQualityApprovalStatusEnum_FeedItemQualityApprovalStatus {
	if m != nil {
		return m.QualityApprovalStatus
	}
	return enums.FeedItemQualityApprovalStatusEnum_UNSPECIFIED
}

func (m *FeedItemPlaceholderPolicyInfo) GetQualityDisapprovalReasons() []enums.FeedItemQualityDisapprovalReasonEnum_FeedItemQualityDisapprovalReason {
	if m != nil {
		return m.QualityDisapprovalReasons
	}
	return nil
}

// Stores a validation error and the set of offending feed attributes which
// together are responsible for causing a feed item validation error.
type FeedItemValidationError struct {
	// Output only. Error code indicating what validation error was triggered. The description
	// of the error can be found in the 'description' field.
	ValidationError errors.FeedItemValidationErrorEnum_FeedItemValidationError `protobuf:"varint,1,opt,name=validation_error,json=validationError,proto3,enum=google.ads.googleads.v3.errors.FeedItemValidationErrorEnum_FeedItemValidationError" json:"validation_error,omitempty"`
	// Output only. The description of the validation error.
	Description *wrappers.StringValue `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
	// Output only. Set of feed attributes in the feed item flagged during validation. If
	// empty, no specific feed attributes can be associated with the error
	// (e.g. error across the entire feed item).
	FeedAttributeIds []*wrappers.Int64Value `protobuf:"bytes,3,rep,name=feed_attribute_ids,json=feedAttributeIds,proto3" json:"feed_attribute_ids,omitempty"`
	// Output only. Any extra information related to this error which is not captured by
	// validation_error and feed_attribute_id (e.g. placeholder field IDs when
	// feed_attribute_id is not mapped). Note that extra_info is not localized.
	ExtraInfo            *wrappers.StringValue `protobuf:"bytes,5,opt,name=extra_info,json=extraInfo,proto3" json:"extra_info,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *FeedItemValidationError) Reset()         { *m = FeedItemValidationError{} }
func (m *FeedItemValidationError) String() string { return proto.CompactTextString(m) }
func (*FeedItemValidationError) ProtoMessage()    {}
func (*FeedItemValidationError) Descriptor() ([]byte, []int) {
	return fileDescriptor_aa81ffed50546ca6, []int{3}
}

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

var xxx_messageInfo_FeedItemValidationError proto.InternalMessageInfo

func (m *FeedItemValidationError) GetValidationError() errors.FeedItemValidationErrorEnum_FeedItemValidationError {
	if m != nil {
		return m.ValidationError
	}
	return errors.FeedItemValidationErrorEnum_UNSPECIFIED
}

func (m *FeedItemValidationError) GetDescription() *wrappers.StringValue {
	if m != nil {
		return m.Description
	}
	return nil
}

func (m *FeedItemValidationError) GetFeedAttributeIds() []*wrappers.Int64Value {
	if m != nil {
		return m.FeedAttributeIds
	}
	return nil
}

func (m *FeedItemValidationError) GetExtraInfo() *wrappers.StringValue {
	if m != nil {
		return m.ExtraInfo
	}
	return nil
}

func init() {
	proto.RegisterType((*FeedItem)(nil), "google.ads.googleads.v3.resources.FeedItem")
	proto.RegisterType((*FeedItemAttributeValue)(nil), "google.ads.googleads.v3.resources.FeedItemAttributeValue")
	proto.RegisterType((*FeedItemPlaceholderPolicyInfo)(nil), "google.ads.googleads.v3.resources.FeedItemPlaceholderPolicyInfo")
	proto.RegisterType((*FeedItemValidationError)(nil), "google.ads.googleads.v3.resources.FeedItemValidationError")
}

func init() {
	proto.RegisterFile("google/ads/googleads/v3/resources/feed_item.proto", fileDescriptor_aa81ffed50546ca6)
}

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