// Code generated by protoc-gen-go. DO NOT EDIT.
// source: google/ads/googleads/v3/resources/ad_group_ad_asset_view.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"
	_ "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 link between an AdGroupAd and an Asset.
type AdGroupAdAssetView struct {
	// Output only. The resource name of the ad group ad asset view.
	// Ad group ad asset view resource names have the form:
	//
	// `customers/{customer_id}/adGroupAdAssets/{AdGroupAdAsset.ad_group_id}~{AdGroupAdAsset.ad.ad_id}~{AdGroupAdAsset.asset_id}~{AdGroupAdAsset.asset_field_type}`
	ResourceName string `protobuf:"bytes,1,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"`
	// Output only. The ad group ad to which the asset is linked.
	AdGroupAd *wrappers.StringValue `protobuf:"bytes,5,opt,name=ad_group_ad,json=adGroupAd,proto3" json:"ad_group_ad,omitempty"`
	// Output only. The asset which is linked to the ad group ad.
	Asset *wrappers.StringValue `protobuf:"bytes,6,opt,name=asset,proto3" json:"asset,omitempty"`
	// Output only. Role that the asset takes in the ad.
	FieldType enums.AssetFieldTypeEnum_AssetFieldType `protobuf:"varint,2,opt,name=field_type,json=fieldType,proto3,enum=google.ads.googleads.v3.enums.AssetFieldTypeEnum_AssetFieldType" json:"field_type,omitempty"`
	// Output only. Policy information for the ad group ad asset.
	PolicySummary *AdGroupAdAssetPolicySummary `protobuf:"bytes,3,opt,name=policy_summary,json=policySummary,proto3" json:"policy_summary,omitempty"`
	// Output only. Performance of an asset linkage.
	PerformanceLabel     enums.AssetPerformanceLabelEnum_AssetPerformanceLabel `protobuf:"varint,4,opt,name=performance_label,json=performanceLabel,proto3,enum=google.ads.googleads.v3.enums.AssetPerformanceLabelEnum_AssetPerformanceLabel" json:"performance_label,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                              `json:"-"`
	XXX_unrecognized     []byte                                                `json:"-"`
	XXX_sizecache        int32                                                 `json:"-"`
}

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

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

var xxx_messageInfo_AdGroupAdAssetView proto.InternalMessageInfo

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

func (m *AdGroupAdAssetView) GetAdGroupAd() *wrappers.StringValue {
	if m != nil {
		return m.AdGroupAd
	}
	return nil
}

func (m *AdGroupAdAssetView) GetAsset() *wrappers.StringValue {
	if m != nil {
		return m.Asset
	}
	return nil
}

func (m *AdGroupAdAssetView) GetFieldType() enums.AssetFieldTypeEnum_AssetFieldType {
	if m != nil {
		return m.FieldType
	}
	return enums.AssetFieldTypeEnum_UNSPECIFIED
}

func (m *AdGroupAdAssetView) GetPolicySummary() *AdGroupAdAssetPolicySummary {
	if m != nil {
		return m.PolicySummary
	}
	return nil
}

func (m *AdGroupAdAssetView) GetPerformanceLabel() enums.AssetPerformanceLabelEnum_AssetPerformanceLabel {
	if m != nil {
		return m.PerformanceLabel
	}
	return enums.AssetPerformanceLabelEnum_UNSPECIFIED
}

// Contains policy information for an ad group ad asset.
type AdGroupAdAssetPolicySummary struct {
	// Output only. The list of policy findings for the ad group ad asset.
	PolicyTopicEntries []*common.PolicyTopicEntry `protobuf:"bytes,1,rep,name=policy_topic_entries,json=policyTopicEntries,proto3" json:"policy_topic_entries,omitempty"`
	// Output only. Where in the review process this ad group ad asset is.
	ReviewStatus enums.PolicyReviewStatusEnum_PolicyReviewStatus `protobuf:"varint,2,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 this ad group ad asset, calculated based on
	// the status of its individual policy topic entries.
	ApprovalStatus       enums.PolicyApprovalStatusEnum_PolicyApprovalStatus `protobuf:"varint,3,opt,name=approval_status,json=approvalStatus,proto3,enum=google.ads.googleads.v3.enums.PolicyApprovalStatusEnum_PolicyApprovalStatus" json:"approval_status,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                            `json:"-"`
	XXX_unrecognized     []byte                                              `json:"-"`
	XXX_sizecache        int32                                               `json:"-"`
}

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

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

var xxx_messageInfo_AdGroupAdAssetPolicySummary proto.InternalMessageInfo

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

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

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

func init() {
	proto.RegisterType((*AdGroupAdAssetView)(nil), "google.ads.googleads.v3.resources.AdGroupAdAssetView")
	proto.RegisterType((*AdGroupAdAssetPolicySummary)(nil), "google.ads.googleads.v3.resources.AdGroupAdAssetPolicySummary")
}

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

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