blob: 0fb75621514e014a9a833b1261eb0f8e2c5c376f [file] [log] [blame]
// 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/v2/services/reach_plan_service.proto
package services
import (
context "context"
reflect "reflect"
sync "sync"
proto "github.com/golang/protobuf/proto"
wrappers "github.com/golang/protobuf/ptypes/wrappers"
common "google.golang.org/genproto/googleapis/ads/googleads/v2/common"
enums "google.golang.org/genproto/googleapis/ads/googleads/v2/enums"
_ "google.golang.org/genproto/googleapis/api/annotations"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
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
// Request message for [ReachForecastService.ListPlannableLocations][]
type ListPlannableLocationsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *ListPlannableLocationsRequest) Reset() {
*x = ListPlannableLocationsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListPlannableLocationsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListPlannableLocationsRequest) ProtoMessage() {}
func (x *ListPlannableLocationsRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_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 ListPlannableLocationsRequest.ProtoReflect.Descriptor instead.
func (*ListPlannableLocationsRequest) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{0}
}
// The list of plannable locations.
type ListPlannableLocationsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The list of locations available for planning (Countries, DMAs,
// sub-countries).
// For locations like Countries, DMAs see
// https://developers.google.com/adwords/api/docs/appendix/geotargeting for
// more information.
PlannableLocations []*PlannableLocation `protobuf:"bytes,1,rep,name=plannable_locations,json=plannableLocations,proto3" json:"plannable_locations,omitempty"`
}
func (x *ListPlannableLocationsResponse) Reset() {
*x = ListPlannableLocationsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListPlannableLocationsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListPlannableLocationsResponse) ProtoMessage() {}
func (x *ListPlannableLocationsResponse) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[1]
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 ListPlannableLocationsResponse.ProtoReflect.Descriptor instead.
func (*ListPlannableLocationsResponse) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{1}
}
func (x *ListPlannableLocationsResponse) GetPlannableLocations() []*PlannableLocation {
if x != nil {
return x.PlannableLocations
}
return nil
}
// A plannable location: a country, a DMA, a metro region, a tv region,
// a province.
type PlannableLocation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The location identifier.
Id *wrappers.StringValue `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
// The unique location name in english.
Name *wrappers.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
// The parent country code, not present if location is a country.
// If present will always be a criterion id: additional information, such as
// country name are returned both via ListPlannableLocations or directly by
// accessing GeoTargetConstantService with the criterion id.
ParentCountryId *wrappers.Int64Value `protobuf:"bytes,3,opt,name=parent_country_id,json=parentCountryId,proto3" json:"parent_country_id,omitempty"`
}
func (x *PlannableLocation) Reset() {
*x = PlannableLocation{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PlannableLocation) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PlannableLocation) ProtoMessage() {}
func (x *PlannableLocation) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[2]
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 PlannableLocation.ProtoReflect.Descriptor instead.
func (*PlannableLocation) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{2}
}
func (x *PlannableLocation) GetId() *wrappers.StringValue {
if x != nil {
return x.Id
}
return nil
}
func (x *PlannableLocation) GetName() *wrappers.StringValue {
if x != nil {
return x.Name
}
return nil
}
func (x *PlannableLocation) GetParentCountryId() *wrappers.Int64Value {
if x != nil {
return x.ParentCountryId
}
return nil
}
// Request to list available products in a given location.
type ListPlannableProductsRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The ID of the selected location for planning. To list the available
// plannable location ids use ListPlannableLocations.
PlannableLocationId *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_location_id,json=plannableLocationId,proto3" json:"plannable_location_id,omitempty"`
}
func (x *ListPlannableProductsRequest) Reset() {
*x = ListPlannableProductsRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListPlannableProductsRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListPlannableProductsRequest) ProtoMessage() {}
func (x *ListPlannableProductsRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[3]
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 ListPlannableProductsRequest.ProtoReflect.Descriptor instead.
func (*ListPlannableProductsRequest) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{3}
}
func (x *ListPlannableProductsRequest) GetPlannableLocationId() *wrappers.StringValue {
if x != nil {
return x.PlannableLocationId
}
return nil
}
// A response with all available products.
type ListPlannableProductsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The list of products available for planning and related targeting metadata.
ProductMetadata []*ProductMetadata `protobuf:"bytes,1,rep,name=product_metadata,json=productMetadata,proto3" json:"product_metadata,omitempty"`
}
func (x *ListPlannableProductsResponse) Reset() {
*x = ListPlannableProductsResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ListPlannableProductsResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListPlannableProductsResponse) ProtoMessage() {}
func (x *ListPlannableProductsResponse) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[4]
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 ListPlannableProductsResponse.ProtoReflect.Descriptor instead.
func (*ListPlannableProductsResponse) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{4}
}
func (x *ListPlannableProductsResponse) GetProductMetadata() []*ProductMetadata {
if x != nil {
return x.ProductMetadata
}
return nil
}
// The metadata associated with an available plannable product.
type ProductMetadata struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The code associated with the ad product. E.g. Trueview, Bumper
// To list the available plannable product codes use ListPlannableProducts.
PlannableProductCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_product_code,json=plannableProductCode,proto3" json:"plannable_product_code,omitempty"`
// The allowed plannable targeting for this product.
PlannableTargeting *PlannableTargeting `protobuf:"bytes,2,opt,name=plannable_targeting,json=plannableTargeting,proto3" json:"plannable_targeting,omitempty"`
}
func (x *ProductMetadata) Reset() {
*x = ProductMetadata{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ProductMetadata) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ProductMetadata) ProtoMessage() {}
func (x *ProductMetadata) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[5]
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 ProductMetadata.ProtoReflect.Descriptor instead.
func (*ProductMetadata) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{5}
}
func (x *ProductMetadata) GetPlannableProductCode() *wrappers.StringValue {
if x != nil {
return x.PlannableProductCode
}
return nil
}
func (x *ProductMetadata) GetPlannableTargeting() *PlannableTargeting {
if x != nil {
return x.PlannableTargeting
}
return nil
}
// The targeting for which traffic metrics will be reported.
type PlannableTargeting struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Allowed plannable age ranges for the product for which metrics will be
// reported. Actual targeting is computed by mapping this age range onto
// standard Google common.AgeRangeInfo values.
AgeRanges []enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange `protobuf:"varint,1,rep,packed,name=age_ranges,json=ageRanges,proto3,enum=google.ads.googleads.v2.enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange" json:"age_ranges,omitempty"`
// Targetable genders for the ad product.
Genders []*common.GenderInfo `protobuf:"bytes,2,rep,name=genders,proto3" json:"genders,omitempty"`
// Targetable devices for the ad product.
Devices []*common.DeviceInfo `protobuf:"bytes,3,rep,name=devices,proto3" json:"devices,omitempty"`
}
func (x *PlannableTargeting) Reset() {
*x = PlannableTargeting{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PlannableTargeting) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PlannableTargeting) ProtoMessage() {}
func (x *PlannableTargeting) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[6]
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 PlannableTargeting.ProtoReflect.Descriptor instead.
func (*PlannableTargeting) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{6}
}
func (x *PlannableTargeting) GetAgeRanges() []enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange {
if x != nil {
return x.AgeRanges
}
return nil
}
func (x *PlannableTargeting) GetGenders() []*common.GenderInfo {
if x != nil {
return x.Genders
}
return nil
}
func (x *PlannableTargeting) GetDevices() []*common.DeviceInfo {
if x != nil {
return x.Devices
}
return nil
}
// Request message for [ReachForecastService.GenerateProductMixIdeas][].
type GenerateProductMixIdeasRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The ID of the customer.
CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
// Required. The ID of the location, this is one of the ids returned by
// ListPlannableLocations.
PlannableLocationId *wrappers.StringValue `protobuf:"bytes,2,opt,name=plannable_location_id,json=plannableLocationId,proto3" json:"plannable_location_id,omitempty"`
// Required. Currency code.
// Three-character ISO 4217 currency code.
CurrencyCode *wrappers.StringValue `protobuf:"bytes,3,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
// Required. Total budget.
// Amount in micros. One million is equivalent to one unit.
BudgetMicros *wrappers.Int64Value `protobuf:"bytes,4,opt,name=budget_micros,json=budgetMicros,proto3" json:"budget_micros,omitempty"`
// The preferences of the suggested product mix.
// An unset preference is interpreted as all possible values are allowed,
// unless explicitly specified.
Preferences *Preferences `protobuf:"bytes,5,opt,name=preferences,proto3" json:"preferences,omitempty"`
}
func (x *GenerateProductMixIdeasRequest) Reset() {
*x = GenerateProductMixIdeasRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GenerateProductMixIdeasRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GenerateProductMixIdeasRequest) ProtoMessage() {}
func (x *GenerateProductMixIdeasRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[7]
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 GenerateProductMixIdeasRequest.ProtoReflect.Descriptor instead.
func (*GenerateProductMixIdeasRequest) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{7}
}
func (x *GenerateProductMixIdeasRequest) GetCustomerId() string {
if x != nil {
return x.CustomerId
}
return ""
}
func (x *GenerateProductMixIdeasRequest) GetPlannableLocationId() *wrappers.StringValue {
if x != nil {
return x.PlannableLocationId
}
return nil
}
func (x *GenerateProductMixIdeasRequest) GetCurrencyCode() *wrappers.StringValue {
if x != nil {
return x.CurrencyCode
}
return nil
}
func (x *GenerateProductMixIdeasRequest) GetBudgetMicros() *wrappers.Int64Value {
if x != nil {
return x.BudgetMicros
}
return nil
}
func (x *GenerateProductMixIdeasRequest) GetPreferences() *Preferences {
if x != nil {
return x.Preferences
}
return nil
}
// Set of preferences about the planned mix.
type Preferences struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// True if ad skippable.
// If not set, default is any value.
IsSkippable *wrappers.BoolValue `protobuf:"bytes,1,opt,name=is_skippable,json=isSkippable,proto3" json:"is_skippable,omitempty"`
// True if ad start with sound.
// If not set, default is any value.
StartsWithSound *wrappers.BoolValue `protobuf:"bytes,2,opt,name=starts_with_sound,json=startsWithSound,proto3" json:"starts_with_sound,omitempty"`
// The length of the ad.
// If not set, default is any value.
AdLength enums.ReachPlanAdLengthEnum_ReachPlanAdLength `protobuf:"varint,3,opt,name=ad_length,json=adLength,proto3,enum=google.ads.googleads.v2.enums.ReachPlanAdLengthEnum_ReachPlanAdLength" json:"ad_length,omitempty"`
// True if ad will only show on the top content.
// If not set, default is false.
TopContentOnly *wrappers.BoolValue `protobuf:"bytes,4,opt,name=top_content_only,json=topContentOnly,proto3" json:"top_content_only,omitempty"`
// True if the price guaranteed. The cost of serving the ad is agreed upfront
// and not subject to an auction.
// If not set, default is any value.
HasGuaranteedPrice *wrappers.BoolValue `protobuf:"bytes,5,opt,name=has_guaranteed_price,json=hasGuaranteedPrice,proto3" json:"has_guaranteed_price,omitempty"`
}
func (x *Preferences) Reset() {
*x = Preferences{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Preferences) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Preferences) ProtoMessage() {}
func (x *Preferences) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[8]
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 Preferences.ProtoReflect.Descriptor instead.
func (*Preferences) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{8}
}
func (x *Preferences) GetIsSkippable() *wrappers.BoolValue {
if x != nil {
return x.IsSkippable
}
return nil
}
func (x *Preferences) GetStartsWithSound() *wrappers.BoolValue {
if x != nil {
return x.StartsWithSound
}
return nil
}
func (x *Preferences) GetAdLength() enums.ReachPlanAdLengthEnum_ReachPlanAdLength {
if x != nil {
return x.AdLength
}
return enums.ReachPlanAdLengthEnum_UNSPECIFIED
}
func (x *Preferences) GetTopContentOnly() *wrappers.BoolValue {
if x != nil {
return x.TopContentOnly
}
return nil
}
func (x *Preferences) GetHasGuaranteedPrice() *wrappers.BoolValue {
if x != nil {
return x.HasGuaranteedPrice
}
return nil
}
// The suggested product mix.
type GenerateProductMixIdeasResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// A list of products (ad formats) and the associated budget allocation idea.
ProductAllocation []*ProductAllocation `protobuf:"bytes,1,rep,name=product_allocation,json=productAllocation,proto3" json:"product_allocation,omitempty"`
}
func (x *GenerateProductMixIdeasResponse) Reset() {
*x = GenerateProductMixIdeasResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GenerateProductMixIdeasResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GenerateProductMixIdeasResponse) ProtoMessage() {}
func (x *GenerateProductMixIdeasResponse) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[9]
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 GenerateProductMixIdeasResponse.ProtoReflect.Descriptor instead.
func (*GenerateProductMixIdeasResponse) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{9}
}
func (x *GenerateProductMixIdeasResponse) GetProductAllocation() []*ProductAllocation {
if x != nil {
return x.ProductAllocation
}
return nil
}
// An allocation of a part of the budget on a given product.
type ProductAllocation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Selected product for planning. The product codes returned are within the
// set of the ones returned by ListPlannableProducts when using the same
// location id.
PlannableProductCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_product_code,json=plannableProductCode,proto3" json:"plannable_product_code,omitempty"`
// The value to be allocated for the suggested product in requested currency.
// Amount in micros. One million is equivalent to one unit.
BudgetMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=budget_micros,json=budgetMicros,proto3" json:"budget_micros,omitempty"`
}
func (x *ProductAllocation) Reset() {
*x = ProductAllocation{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ProductAllocation) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ProductAllocation) ProtoMessage() {}
func (x *ProductAllocation) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[10]
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 ProductAllocation.ProtoReflect.Descriptor instead.
func (*ProductAllocation) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{10}
}
func (x *ProductAllocation) GetPlannableProductCode() *wrappers.StringValue {
if x != nil {
return x.PlannableProductCode
}
return nil
}
func (x *ProductAllocation) GetBudgetMicros() *wrappers.Int64Value {
if x != nil {
return x.BudgetMicros
}
return nil
}
// Request message for [ReachPlanService.GenerateReachForecast][google.ads.googleads.v2.services.ReachPlanService.GenerateReachForecast].
type GenerateReachForecastRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The ID of the customer.
CustomerId string `protobuf:"bytes,1,opt,name=customer_id,json=customerId,proto3" json:"customer_id,omitempty"`
// The currency code.
// Three-character ISO 4217 currency code.
CurrencyCode *wrappers.StringValue `protobuf:"bytes,2,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"`
// Required. Campaign duration.
CampaignDuration *CampaignDuration `protobuf:"bytes,3,opt,name=campaign_duration,json=campaignDuration,proto3" json:"campaign_duration,omitempty"`
// Desired cookie frequency cap that will be applied to each planned product.
// This is equivalent to the frequency cap exposed in Google Ads when creating
// a campaign, it represents the maximum number of times an ad can be shown to
// the same user.
// If not specified, no cap is applied.
CookieFrequencyCap *wrappers.Int32Value `protobuf:"bytes,4,opt,name=cookie_frequency_cap,json=cookieFrequencyCap,proto3" json:"cookie_frequency_cap,omitempty"`
// Desired minimum effective frequency (the number of times a person was
// exposed to the ad) for the reported reach metrics [1-10].
// This won't affect the targeting, but just the reporting.
// If not specified, a default of 1 is applied.
MinEffectiveFrequency *wrappers.Int32Value `protobuf:"bytes,5,opt,name=min_effective_frequency,json=minEffectiveFrequency,proto3" json:"min_effective_frequency,omitempty"`
// The targeting to be applied to all products selected in the product mix.
//
// This is planned targeting: execution details might vary based on the
// advertising product, please consult an implementation specialist.
//
// See specific metrics for details on how targeting affects them.
//
// In some cases, targeting may be overridden using the
// PlannedProduct.advanced_product_targeting field.
Targeting *Targeting `protobuf:"bytes,6,opt,name=targeting,proto3" json:"targeting,omitempty"`
// Required. The products to be forecast.
// The max number of allowed planned products is 15.
PlannedProducts []*PlannedProduct `protobuf:"bytes,7,rep,name=planned_products,json=plannedProducts,proto3" json:"planned_products,omitempty"`
}
func (x *GenerateReachForecastRequest) Reset() {
*x = GenerateReachForecastRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GenerateReachForecastRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GenerateReachForecastRequest) ProtoMessage() {}
func (x *GenerateReachForecastRequest) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[11]
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 GenerateReachForecastRequest.ProtoReflect.Descriptor instead.
func (*GenerateReachForecastRequest) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{11}
}
func (x *GenerateReachForecastRequest) GetCustomerId() string {
if x != nil {
return x.CustomerId
}
return ""
}
func (x *GenerateReachForecastRequest) GetCurrencyCode() *wrappers.StringValue {
if x != nil {
return x.CurrencyCode
}
return nil
}
func (x *GenerateReachForecastRequest) GetCampaignDuration() *CampaignDuration {
if x != nil {
return x.CampaignDuration
}
return nil
}
func (x *GenerateReachForecastRequest) GetCookieFrequencyCap() *wrappers.Int32Value {
if x != nil {
return x.CookieFrequencyCap
}
return nil
}
func (x *GenerateReachForecastRequest) GetMinEffectiveFrequency() *wrappers.Int32Value {
if x != nil {
return x.MinEffectiveFrequency
}
return nil
}
func (x *GenerateReachForecastRequest) GetTargeting() *Targeting {
if x != nil {
return x.Targeting
}
return nil
}
func (x *GenerateReachForecastRequest) GetPlannedProducts() []*PlannedProduct {
if x != nil {
return x.PlannedProducts
}
return nil
}
// The targeting for which traffic metrics will be reported.
type Targeting struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. The ID of the selected location.
// Plannable locations ID can be obtained from ListPlannableLocations.
PlannableLocationId *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_location_id,json=plannableLocationId,proto3" json:"plannable_location_id,omitempty"`
// Targeted age range.
// If not specified, targets all age ranges.
AgeRange enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange `protobuf:"varint,2,opt,name=age_range,json=ageRange,proto3,enum=google.ads.googleads.v2.enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange" json:"age_range,omitempty"`
// Targeted genders.
// If not specified, targets all genders.
Genders []*common.GenderInfo `protobuf:"bytes,3,rep,name=genders,proto3" json:"genders,omitempty"`
// Targeted devices.
// If not specified, targets all applicable devices. Applicable devices vary
// by product and region and can be obtained from ListPlannableProducts.
Devices []*common.DeviceInfo `protobuf:"bytes,4,rep,name=devices,proto3" json:"devices,omitempty"`
}
func (x *Targeting) Reset() {
*x = Targeting{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Targeting) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Targeting) ProtoMessage() {}
func (x *Targeting) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[12]
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 Targeting.ProtoReflect.Descriptor instead.
func (*Targeting) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{12}
}
func (x *Targeting) GetPlannableLocationId() *wrappers.StringValue {
if x != nil {
return x.PlannableLocationId
}
return nil
}
func (x *Targeting) GetAgeRange() enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange {
if x != nil {
return x.AgeRange
}
return enums.ReachPlanAgeRangeEnum_UNSPECIFIED
}
func (x *Targeting) GetGenders() []*common.GenderInfo {
if x != nil {
return x.Genders
}
return nil
}
func (x *Targeting) GetDevices() []*common.DeviceInfo {
if x != nil {
return x.Devices
}
return nil
}
// The duration of a planned campaign.
type CampaignDuration struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The duration value in days.
DurationInDays *wrappers.Int32Value `protobuf:"bytes,1,opt,name=duration_in_days,json=durationInDays,proto3" json:"duration_in_days,omitempty"`
}
func (x *CampaignDuration) Reset() {
*x = CampaignDuration{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *CampaignDuration) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*CampaignDuration) ProtoMessage() {}
func (x *CampaignDuration) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[13]
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 CampaignDuration.ProtoReflect.Descriptor instead.
func (*CampaignDuration) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{13}
}
func (x *CampaignDuration) GetDurationInDays() *wrappers.Int32Value {
if x != nil {
return x.DurationInDays
}
return nil
}
// A product being planned for reach.
type PlannedProduct struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Required. Selected product for planning.
// Plannable products codes can be obtained from ListPlannableProducts.
PlannableProductCode *wrappers.StringValue `protobuf:"bytes,1,opt,name=plannable_product_code,json=plannableProductCode,proto3" json:"plannable_product_code,omitempty"`
// Required. Maximum budget allocation in micros for the selected product.
// The value is specified in the selected planning currency_code.
// E.g. 1 000 000$ = 1 000 000 000 000 micros.
BudgetMicros *wrappers.Int64Value `protobuf:"bytes,2,opt,name=budget_micros,json=budgetMicros,proto3" json:"budget_micros,omitempty"`
}
func (x *PlannedProduct) Reset() {
*x = PlannedProduct{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PlannedProduct) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PlannedProduct) ProtoMessage() {}
func (x *PlannedProduct) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[14]
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 PlannedProduct.ProtoReflect.Descriptor instead.
func (*PlannedProduct) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{14}
}
func (x *PlannedProduct) GetPlannableProductCode() *wrappers.StringValue {
if x != nil {
return x.PlannableProductCode
}
return nil
}
func (x *PlannedProduct) GetBudgetMicros() *wrappers.Int64Value {
if x != nil {
return x.BudgetMicros
}
return nil
}
// Response message containing the generated reach curve.
type GenerateReachForecastResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Reference on target audiences for this curve.
OnTargetAudienceMetrics *OnTargetAudienceMetrics `protobuf:"bytes,1,opt,name=on_target_audience_metrics,json=onTargetAudienceMetrics,proto3" json:"on_target_audience_metrics,omitempty"`
// The generated reach curve for the planned product mix.
ReachCurve *ReachCurve `protobuf:"bytes,2,opt,name=reach_curve,json=reachCurve,proto3" json:"reach_curve,omitempty"`
}
func (x *GenerateReachForecastResponse) Reset() {
*x = GenerateReachForecastResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GenerateReachForecastResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GenerateReachForecastResponse) ProtoMessage() {}
func (x *GenerateReachForecastResponse) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[15]
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 GenerateReachForecastResponse.ProtoReflect.Descriptor instead.
func (*GenerateReachForecastResponse) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{15}
}
func (x *GenerateReachForecastResponse) GetOnTargetAudienceMetrics() *OnTargetAudienceMetrics {
if x != nil {
return x.OnTargetAudienceMetrics
}
return nil
}
func (x *GenerateReachForecastResponse) GetReachCurve() *ReachCurve {
if x != nil {
return x.ReachCurve
}
return nil
}
// The reach curve for the planned products.
type ReachCurve struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// All points on the reach curve.
ReachForecasts []*ReachForecast `protobuf:"bytes,1,rep,name=reach_forecasts,json=reachForecasts,proto3" json:"reach_forecasts,omitempty"`
}
func (x *ReachCurve) Reset() {
*x = ReachCurve{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ReachCurve) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReachCurve) ProtoMessage() {}
func (x *ReachCurve) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[16]
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 ReachCurve.ProtoReflect.Descriptor instead.
func (*ReachCurve) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{16}
}
func (x *ReachCurve) GetReachForecasts() []*ReachForecast {
if x != nil {
return x.ReachForecasts
}
return nil
}
// A point on reach curve.
type ReachForecast struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The cost in micros.
CostMicros *wrappers.Int64Value `protobuf:"bytes,1,opt,name=cost_micros,json=costMicros,proto3" json:"cost_micros,omitempty"`
// Forecasted traffic metrics for this point.
Forecast *Forecast `protobuf:"bytes,2,opt,name=forecast,proto3" json:"forecast,omitempty"`
// The forecasted allocation. This differs from the input allocation if one
// or more product cannot fulfill the budget because of limited inventory.
ForecastedProductAllocations []*ProductAllocation `protobuf:"bytes,3,rep,name=forecasted_product_allocations,json=forecastedProductAllocations,proto3" json:"forecasted_product_allocations,omitempty"`
}
func (x *ReachForecast) Reset() {
*x = ReachForecast{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ReachForecast) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ReachForecast) ProtoMessage() {}
func (x *ReachForecast) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[17]
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 ReachForecast.ProtoReflect.Descriptor instead.
func (*ReachForecast) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{17}
}
func (x *ReachForecast) GetCostMicros() *wrappers.Int64Value {
if x != nil {
return x.CostMicros
}
return nil
}
func (x *ReachForecast) GetForecast() *Forecast {
if x != nil {
return x.Forecast
}
return nil
}
func (x *ReachForecast) GetForecastedProductAllocations() []*ProductAllocation {
if x != nil {
return x.ForecastedProductAllocations
}
return nil
}
// Forecasted traffic metrics for the planned products and targeting.
type Forecast struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Number of unique people reached at least
// GenerateReachForecastRequest.min_effective_frequency times that exactly
// matches the Targeting.
OnTargetReach *wrappers.Int64Value `protobuf:"bytes,1,opt,name=on_target_reach,json=onTargetReach,proto3" json:"on_target_reach,omitempty"`
// Total number of unique people reached at least
// GenerateReachForecastRequest.min_effective_frequency times. This includes
// people that may fall outside the specified Targeting.
TotalReach *wrappers.Int64Value `protobuf:"bytes,2,opt,name=total_reach,json=totalReach,proto3" json:"total_reach,omitempty"`
// Number of ad impressions that exactly matches the Targeting.
OnTargetImpressions *wrappers.Int64Value `protobuf:"bytes,3,opt,name=on_target_impressions,json=onTargetImpressions,proto3" json:"on_target_impressions,omitempty"`
// Total number of ad impressions. This includes impressions that may fall
// outside the specified Targeting, due to insufficient information on
// signed-in users.
TotalImpressions *wrappers.Int64Value `protobuf:"bytes,4,opt,name=total_impressions,json=totalImpressions,proto3" json:"total_impressions,omitempty"`
}
func (x *Forecast) Reset() {
*x = Forecast{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Forecast) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Forecast) ProtoMessage() {}
func (x *Forecast) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[18]
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 Forecast.ProtoReflect.Descriptor instead.
func (*Forecast) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{18}
}
func (x *Forecast) GetOnTargetReach() *wrappers.Int64Value {
if x != nil {
return x.OnTargetReach
}
return nil
}
func (x *Forecast) GetTotalReach() *wrappers.Int64Value {
if x != nil {
return x.TotalReach
}
return nil
}
func (x *Forecast) GetOnTargetImpressions() *wrappers.Int64Value {
if x != nil {
return x.OnTargetImpressions
}
return nil
}
func (x *Forecast) GetTotalImpressions() *wrappers.Int64Value {
if x != nil {
return x.TotalImpressions
}
return nil
}
// Audience metrics for the planned products.
// These metrics consider the following targeting dimensions:
//
// - Location
// - PlannableAgeRange
// - Gender
type OnTargetAudienceMetrics struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Reference audience size matching the considered targeting for YouTube.
YoutubeAudienceSize *wrappers.Int64Value `protobuf:"bytes,1,opt,name=youtube_audience_size,json=youtubeAudienceSize,proto3" json:"youtube_audience_size,omitempty"`
// Reference audience size matching the considered targeting for Census.
CensusAudienceSize *wrappers.Int64Value `protobuf:"bytes,2,opt,name=census_audience_size,json=censusAudienceSize,proto3" json:"census_audience_size,omitempty"`
}
func (x *OnTargetAudienceMetrics) Reset() {
*x = OnTargetAudienceMetrics{}
if protoimpl.UnsafeEnabled {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *OnTargetAudienceMetrics) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*OnTargetAudienceMetrics) ProtoMessage() {}
func (x *OnTargetAudienceMetrics) ProtoReflect() protoreflect.Message {
mi := &file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[19]
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 OnTargetAudienceMetrics.ProtoReflect.Descriptor instead.
func (*OnTargetAudienceMetrics) Descriptor() ([]byte, []int) {
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP(), []int{19}
}
func (x *OnTargetAudienceMetrics) GetYoutubeAudienceSize() *wrappers.Int64Value {
if x != nil {
return x.YoutubeAudienceSize
}
return nil
}
func (x *OnTargetAudienceMetrics) GetCensusAudienceSize() *wrappers.Int64Value {
if x != nil {
return x.CensusAudienceSize
}
return nil
}
var File_google_ads_googleads_v2_services_reach_plan_service_proto protoreflect.FileDescriptor
var file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDesc = []byte{
0x0a, 0x39, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x64, 0x73, 0x2f, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x73, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x20, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64,
0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x2d, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x64, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x61, 0x64, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x72,
0x69, 0x74, 0x65, 0x72, 0x69, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x64, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x64, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x63,
0x68, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x5f, 0x61, 0x64, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x38, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61,
0x64, 0x73, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2f, 0x76, 0x32, 0x2f,
0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x5f, 0x70, 0x6c, 0x61, 0x6e,
0x5f, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
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, 0x1a, 0x17,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e,
0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,
0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x1f, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74,
0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x86, 0x01, 0x0a, 0x1e, 0x4c, 0x69,
0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x13,
0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73,
0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x6c, 0x61,
0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12,
0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x11, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65,
0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x70, 0x61, 0x72, 0x65,
0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65,
0x52, 0x0f, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x49,
0x64, 0x22, 0x75, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62,
0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x55, 0x0a, 0x15, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c,
0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x03,
0xe0, 0x41, 0x02, 0x52, 0x13, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f,
0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x7d, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74,
0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x10, 0x70, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20,
0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65,
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x64,
0x75, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x52, 0x0a, 0x16, 0x70,
0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74,
0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x70, 0x6c, 0x61, 0x6e, 0x6e,
0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x65, 0x0a, 0x13, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x61, 0x72,
0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e,
0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69,
0x6e, 0x67, 0x52, 0x12, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x72,
0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x87, 0x02, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x6e, 0x6e,
0x61, 0x62, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x65, 0x0a,
0x0a, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x0e, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x65, 0x6e, 0x75, 0x6d,
0x73, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x41, 0x67, 0x65, 0x52, 0x61,
0x6e, 0x67, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x68, 0x50, 0x6c, 0x61,
0x6e, 0x41, 0x67, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x09, 0x61, 0x67, 0x65, 0x52, 0x61,
0x6e, 0x67, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x18,
0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x64, 0x65,
0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76,
0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73,
0x22, 0xfd, 0x02, 0x0a, 0x1e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x4d, 0x69, 0x78, 0x49, 0x64, 0x65, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0a, 0x63,
0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x12, 0x55, 0x0a, 0x15, 0x70, 0x6c, 0x61,
0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x13, 0x70, 0x6c, 0x61,
0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64,
0x12, 0x46, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64,
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72,
0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a, 0x0d, 0x62, 0x75, 0x64, 0x67,
0x65, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x03, 0xe0, 0x41,
0x02, 0x52, 0x0c, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12,
0x4f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x05,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64,
0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
0x63, 0x65, 0x73, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73,
0x22, 0x8d, 0x03, 0x0a, 0x0b, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73,
0x12, 0x3d, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x70, 0x61, 0x62, 0x6c, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x0b, 0x69, 0x73, 0x53, 0x6b, 0x69, 0x70, 0x70, 0x61, 0x62, 0x6c, 0x65, 0x12,
0x46, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73,
0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f,
0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x57, 0x69,
0x74, 0x68, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x63, 0x0a, 0x09, 0x61, 0x64, 0x5f, 0x6c, 0x65,
0x6e, 0x67, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64,
0x73, 0x2e, 0x76, 0x32, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x68,
0x50, 0x6c, 0x61, 0x6e, 0x41, 0x64, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x45, 0x6e, 0x75, 0x6d,
0x2e, 0x52, 0x65, 0x61, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x41, 0x64, 0x4c, 0x65, 0x6e, 0x67,
0x74, 0x68, 0x52, 0x08, 0x61, 0x64, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x44, 0x0a, 0x10,
0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x0e, 0x74, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4f, 0x6e,
0x6c, 0x79, 0x12, 0x4c, 0x0a, 0x14, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e,
0x74, 0x65, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x68, 0x61,
0x73, 0x47, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x50, 0x72, 0x69, 0x63, 0x65,
0x22, 0x85, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x4d, 0x69, 0x78, 0x49, 0x64, 0x65, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f,
0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x6c,
0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x50, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x52,
0x0a, 0x16, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64,
0x75, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x70, 0x6c,
0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x6f,
0x64, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x63,
0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36,
0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x4d, 0x69,
0x63, 0x72, 0x6f, 0x73, 0x22, 0xbe, 0x04, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74,
0x65, 0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65,
0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52,
0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x0d, 0x63,
0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,
0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x64,
0x0a, 0x11, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73,
0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x61, 0x6d,
0x70, 0x61, 0x69, 0x67, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0xe0,
0x41, 0x02, 0x52, 0x10, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x44, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x14, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x5f, 0x66,
0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
0x12, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79,
0x43, 0x61, 0x70, 0x12, 0x53, 0x0a, 0x17, 0x6d, 0x69, 0x6e, 0x5f, 0x65, 0x66, 0x66, 0x65, 0x63,
0x74, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x52, 0x15, 0x6d, 0x69, 0x6e, 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x46,
0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x49, 0x0a, 0x09, 0x74, 0x61, 0x72, 0x67,
0x65, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x54,
0x61, 0x72, 0x67, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74,
0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x70,
0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
0x2e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x42,
0x03, 0xe0, 0x41, 0x02, 0x52, 0x0f, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x09, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
0x69, 0x6e, 0x67, 0x12, 0x50, 0x0a, 0x15, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65,
0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65,
0x52, 0x13, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x63, 0x0a, 0x09, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x6e,
0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e,
0x76, 0x32, 0x2e, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x68, 0x50, 0x6c,
0x61, 0x6e, 0x41, 0x67, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x2e, 0x52,
0x65, 0x61, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x41, 0x67, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65,
0x52, 0x08, 0x61, 0x67, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x07, 0x67, 0x65,
0x6e, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x6e,
0x64, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x73,
0x12, 0x44, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x64,
0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x59, 0x0a, 0x10, 0x43, 0x61, 0x6d, 0x70, 0x61, 0x69,
0x67, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x10, 0x64, 0x75,
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x5f, 0x64, 0x61, 0x79, 0x73, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x52, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x44, 0x61, 0x79,
0x73, 0x22, 0xa6, 0x01, 0x0a, 0x0e, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x50, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x12, 0x52, 0x0a, 0x16, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c,
0x65, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x14, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f,
0x64, 0x75, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x62, 0x75, 0x64, 0x67,
0x65, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x62, 0x75,
0x64, 0x67, 0x65, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x22, 0xe6, 0x01, 0x0a, 0x1d, 0x47,
0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65,
0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x76, 0x0a, 0x1a,
0x6f, 0x6e, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e,
0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
0x63, 0x65, 0x73, 0x2e, 0x4f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69,
0x65, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x17, 0x6f, 0x6e, 0x54,
0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x65, 0x74,
0x72, 0x69, 0x63, 0x73, 0x12, 0x4d, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x63, 0x68, 0x5f, 0x63, 0x75,
0x72, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73,
0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x61,
0x63, 0x68, 0x43, 0x75, 0x72, 0x76, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x63, 0x68, 0x43, 0x75,
0x72, 0x76, 0x65, 0x22, 0x66, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x63, 0x68, 0x43, 0x75, 0x72, 0x76,
0x65, 0x12, 0x58, 0x0a, 0x0f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63,
0x61, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64,
0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65,
0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x61,
0x63, 0x68, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, 0x22, 0x90, 0x02, 0x0a, 0x0d,
0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x12, 0x3c, 0x0a,
0x0b, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
0x0a, 0x63, 0x6f, 0x73, 0x74, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x66,
0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
0x2e, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x08, 0x66, 0x6f, 0x72, 0x65, 0x63,
0x61, 0x73, 0x74, 0x12, 0x79, 0x0a, 0x1e, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65,
0x64, 0x5f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61,
0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x50,
0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x52, 0x1c, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x64,
0x75, 0x63, 0x74, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa8,
0x02, 0x0a, 0x08, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x0f, 0x6f,
0x6e, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x52, 0x0d, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x61, 0x63, 0x68,
0x12, 0x3c, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x63, 0x68, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c,
0x75, 0x65, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x61, 0x63, 0x68, 0x12, 0x4f,
0x0a, 0x15, 0x6f, 0x6e, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x69, 0x6d, 0x70, 0x72,
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x6f, 0x6e, 0x54, 0x61,
0x72, 0x67, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12,
0x48, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x69, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73,
0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74,
0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x49, 0x6d,
0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb9, 0x01, 0x0a, 0x17, 0x4f, 0x6e,
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x65,
0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x4f, 0x0a, 0x15, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65,
0x5f, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x52, 0x13, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e,
0x63, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x4d, 0x0a, 0x14, 0x63, 0x65, 0x6e, 0x73, 0x75, 0x73,
0x5f, 0x61, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75,
0x65, 0x52, 0x12, 0x63, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x41, 0x75, 0x64, 0x69, 0x65, 0x6e, 0x63,
0x65, 0x53, 0x69, 0x7a, 0x65, 0x32, 0xfd, 0x07, 0x0a, 0x10, 0x52, 0x65, 0x61, 0x63, 0x68, 0x50,
0x6c, 0x61, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc2, 0x01, 0x0a, 0x16, 0x4c,
0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61,
0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32,
0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c,
0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f,
0x22, 0x1a, 0x2f, 0x76, 0x32, 0x3a, 0x6c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61,
0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x01, 0x2a, 0x12,
0xd6, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c,
0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73,
0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73,
0x2e, 0x76, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x50, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x1e, 0x22, 0x19, 0x2f, 0x76, 0x32, 0x3a, 0x6c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x6e,
0x6e, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a,
0xda, 0x41, 0x15, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x12, 0xa1, 0x02, 0x0a, 0x17, 0x47, 0x65, 0x6e,
0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x69, 0x78, 0x49,
0x64, 0x65, 0x61, 0x73, 0x12, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x64,
0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x73,
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65,
0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x69, 0x78, 0x49, 0x64, 0x65, 0x61, 0x73, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32,
0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x4d, 0x69, 0x78, 0x49, 0x64, 0x65, 0x61,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x3a, 0x22, 0x35, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72,
0x73, 0x2f, 0x7b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x3d, 0x2a,
0x7d, 0x3a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
0x74, 0x4d, 0x69, 0x78, 0x49, 0x64, 0x65, 0x61, 0x73, 0x3a, 0x01, 0x2a, 0xda, 0x41, 0x3d, 0x63,
0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x2c, 0x70, 0x6c, 0x61, 0x6e, 0x6e,
0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64,
0x2c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x62,
0x75, 0x64, 0x67, 0x65, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x89, 0x02, 0x0a,
0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f,
0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x12, 0x3e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32,
0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
0x74, 0x65, 0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x76, 0x32,
0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61,
0x74, 0x65, 0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x22,
0x33, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x73, 0x2f, 0x7b,
0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x3d, 0x2a, 0x7d, 0x3a, 0x67,
0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x63, 0x68, 0x46, 0x6f, 0x72, 0x65,
0x63, 0x61, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0xda, 0x41, 0x2e, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d,
0x65, 0x72, 0x5f, 0x69, 0x64, 0x2c, 0x63, 0x61, 0x6d, 0x70, 0x61, 0x69, 0x67, 0x6e, 0x5f, 0x64,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f,
0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x1a, 0x1b, 0xca, 0x41, 0x18, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x61, 0x64, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x42, 0xfc, 0x01, 0x0a, 0x24, 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, 0x32, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x15,
0x52, 0x65, 0x61, 0x63, 0x68, 0x50, 0x6c, 0x61, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 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, 0x32, 0x2f,
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x73, 0xa2, 0x02, 0x03, 0x47, 0x41, 0x41, 0xaa, 0x02, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
0x2e, 0x41, 0x64, 0x73, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x64, 0x73, 0x2e, 0x56,
0x32, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0xca, 0x02, 0x20, 0x47, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x5c, 0x41, 0x64, 0x73, 0x5c, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x41, 0x64,
0x73, 0x5c, 0x56, 0x32, 0x5c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0xea, 0x02, 0x24,
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, 0x32, 0x3a, 0x3a, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescOnce sync.Once
file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescData = file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDesc
)
func file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescGZIP() []byte {
file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescOnce.Do(func() {
file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescData)
})
return file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDescData
}
var file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20)
var file_google_ads_googleads_v2_services_reach_plan_service_proto_goTypes = []interface{}{
(*ListPlannableLocationsRequest)(nil), // 0: google.ads.googleads.v2.services.ListPlannableLocationsRequest
(*ListPlannableLocationsResponse)(nil), // 1: google.ads.googleads.v2.services.ListPlannableLocationsResponse
(*PlannableLocation)(nil), // 2: google.ads.googleads.v2.services.PlannableLocation
(*ListPlannableProductsRequest)(nil), // 3: google.ads.googleads.v2.services.ListPlannableProductsRequest
(*ListPlannableProductsResponse)(nil), // 4: google.ads.googleads.v2.services.ListPlannableProductsResponse
(*ProductMetadata)(nil), // 5: google.ads.googleads.v2.services.ProductMetadata
(*PlannableTargeting)(nil), // 6: google.ads.googleads.v2.services.PlannableTargeting
(*GenerateProductMixIdeasRequest)(nil), // 7: google.ads.googleads.v2.services.GenerateProductMixIdeasRequest
(*Preferences)(nil), // 8: google.ads.googleads.v2.services.Preferences
(*GenerateProductMixIdeasResponse)(nil), // 9: google.ads.googleads.v2.services.GenerateProductMixIdeasResponse
(*ProductAllocation)(nil), // 10: google.ads.googleads.v2.services.ProductAllocation
(*GenerateReachForecastRequest)(nil), // 11: google.ads.googleads.v2.services.GenerateReachForecastRequest
(*Targeting)(nil), // 12: google.ads.googleads.v2.services.Targeting
(*CampaignDuration)(nil), // 13: google.ads.googleads.v2.services.CampaignDuration
(*PlannedProduct)(nil), // 14: google.ads.googleads.v2.services.PlannedProduct
(*GenerateReachForecastResponse)(nil), // 15: google.ads.googleads.v2.services.GenerateReachForecastResponse
(*ReachCurve)(nil), // 16: google.ads.googleads.v2.services.ReachCurve
(*ReachForecast)(nil), // 17: google.ads.googleads.v2.services.ReachForecast
(*Forecast)(nil), // 18: google.ads.googleads.v2.services.Forecast
(*OnTargetAudienceMetrics)(nil), // 19: google.ads.googleads.v2.services.OnTargetAudienceMetrics
(*wrappers.StringValue)(nil), // 20: google.protobuf.StringValue
(*wrappers.Int64Value)(nil), // 21: google.protobuf.Int64Value
(enums.ReachPlanAgeRangeEnum_ReachPlanAgeRange)(0), // 22: google.ads.googleads.v2.enums.ReachPlanAgeRangeEnum.ReachPlanAgeRange
(*common.GenderInfo)(nil), // 23: google.ads.googleads.v2.common.GenderInfo
(*common.DeviceInfo)(nil), // 24: google.ads.googleads.v2.common.DeviceInfo
(*wrappers.BoolValue)(nil), // 25: google.protobuf.BoolValue
(enums.ReachPlanAdLengthEnum_ReachPlanAdLength)(0), // 26: google.ads.googleads.v2.enums.ReachPlanAdLengthEnum.ReachPlanAdLength
(*wrappers.Int32Value)(nil), // 27: google.protobuf.Int32Value
}
var file_google_ads_googleads_v2_services_reach_plan_service_proto_depIdxs = []int32{
2, // 0: google.ads.googleads.v2.services.ListPlannableLocationsResponse.plannable_locations:type_name -> google.ads.googleads.v2.services.PlannableLocation
20, // 1: google.ads.googleads.v2.services.PlannableLocation.id:type_name -> google.protobuf.StringValue
20, // 2: google.ads.googleads.v2.services.PlannableLocation.name:type_name -> google.protobuf.StringValue
21, // 3: google.ads.googleads.v2.services.PlannableLocation.parent_country_id:type_name -> google.protobuf.Int64Value
20, // 4: google.ads.googleads.v2.services.ListPlannableProductsRequest.plannable_location_id:type_name -> google.protobuf.StringValue
5, // 5: google.ads.googleads.v2.services.ListPlannableProductsResponse.product_metadata:type_name -> google.ads.googleads.v2.services.ProductMetadata
20, // 6: google.ads.googleads.v2.services.ProductMetadata.plannable_product_code:type_name -> google.protobuf.StringValue
6, // 7: google.ads.googleads.v2.services.ProductMetadata.plannable_targeting:type_name -> google.ads.googleads.v2.services.PlannableTargeting
22, // 8: google.ads.googleads.v2.services.PlannableTargeting.age_ranges:type_name -> google.ads.googleads.v2.enums.ReachPlanAgeRangeEnum.ReachPlanAgeRange
23, // 9: google.ads.googleads.v2.services.PlannableTargeting.genders:type_name -> google.ads.googleads.v2.common.GenderInfo
24, // 10: google.ads.googleads.v2.services.PlannableTargeting.devices:type_name -> google.ads.googleads.v2.common.DeviceInfo
20, // 11: google.ads.googleads.v2.services.GenerateProductMixIdeasRequest.plannable_location_id:type_name -> google.protobuf.StringValue
20, // 12: google.ads.googleads.v2.services.GenerateProductMixIdeasRequest.currency_code:type_name -> google.protobuf.StringValue
21, // 13: google.ads.googleads.v2.services.GenerateProductMixIdeasRequest.budget_micros:type_name -> google.protobuf.Int64Value
8, // 14: google.ads.googleads.v2.services.GenerateProductMixIdeasRequest.preferences:type_name -> google.ads.googleads.v2.services.Preferences
25, // 15: google.ads.googleads.v2.services.Preferences.is_skippable:type_name -> google.protobuf.BoolValue
25, // 16: google.ads.googleads.v2.services.Preferences.starts_with_sound:type_name -> google.protobuf.BoolValue
26, // 17: google.ads.googleads.v2.services.Preferences.ad_length:type_name -> google.ads.googleads.v2.enums.ReachPlanAdLengthEnum.ReachPlanAdLength
25, // 18: google.ads.googleads.v2.services.Preferences.top_content_only:type_name -> google.protobuf.BoolValue
25, // 19: google.ads.googleads.v2.services.Preferences.has_guaranteed_price:type_name -> google.protobuf.BoolValue
10, // 20: google.ads.googleads.v2.services.GenerateProductMixIdeasResponse.product_allocation:type_name -> google.ads.googleads.v2.services.ProductAllocation
20, // 21: google.ads.googleads.v2.services.ProductAllocation.plannable_product_code:type_name -> google.protobuf.StringValue
21, // 22: google.ads.googleads.v2.services.ProductAllocation.budget_micros:type_name -> google.protobuf.Int64Value
20, // 23: google.ads.googleads.v2.services.GenerateReachForecastRequest.currency_code:type_name -> google.protobuf.StringValue
13, // 24: google.ads.googleads.v2.services.GenerateReachForecastRequest.campaign_duration:type_name -> google.ads.googleads.v2.services.CampaignDuration
27, // 25: google.ads.googleads.v2.services.GenerateReachForecastRequest.cookie_frequency_cap:type_name -> google.protobuf.Int32Value
27, // 26: google.ads.googleads.v2.services.GenerateReachForecastRequest.min_effective_frequency:type_name -> google.protobuf.Int32Value
12, // 27: google.ads.googleads.v2.services.GenerateReachForecastRequest.targeting:type_name -> google.ads.googleads.v2.services.Targeting
14, // 28: google.ads.googleads.v2.services.GenerateReachForecastRequest.planned_products:type_name -> google.ads.googleads.v2.services.PlannedProduct
20, // 29: google.ads.googleads.v2.services.Targeting.plannable_location_id:type_name -> google.protobuf.StringValue
22, // 30: google.ads.googleads.v2.services.Targeting.age_range:type_name -> google.ads.googleads.v2.enums.ReachPlanAgeRangeEnum.ReachPlanAgeRange
23, // 31: google.ads.googleads.v2.services.Targeting.genders:type_name -> google.ads.googleads.v2.common.GenderInfo
24, // 32: google.ads.googleads.v2.services.Targeting.devices:type_name -> google.ads.googleads.v2.common.DeviceInfo
27, // 33: google.ads.googleads.v2.services.CampaignDuration.duration_in_days:type_name -> google.protobuf.Int32Value
20, // 34: google.ads.googleads.v2.services.PlannedProduct.plannable_product_code:type_name -> google.protobuf.StringValue
21, // 35: google.ads.googleads.v2.services.PlannedProduct.budget_micros:type_name -> google.protobuf.Int64Value
19, // 36: google.ads.googleads.v2.services.GenerateReachForecastResponse.on_target_audience_metrics:type_name -> google.ads.googleads.v2.services.OnTargetAudienceMetrics
16, // 37: google.ads.googleads.v2.services.GenerateReachForecastResponse.reach_curve:type_name -> google.ads.googleads.v2.services.ReachCurve
17, // 38: google.ads.googleads.v2.services.ReachCurve.reach_forecasts:type_name -> google.ads.googleads.v2.services.ReachForecast
21, // 39: google.ads.googleads.v2.services.ReachForecast.cost_micros:type_name -> google.protobuf.Int64Value
18, // 40: google.ads.googleads.v2.services.ReachForecast.forecast:type_name -> google.ads.googleads.v2.services.Forecast
10, // 41: google.ads.googleads.v2.services.ReachForecast.forecasted_product_allocations:type_name -> google.ads.googleads.v2.services.ProductAllocation
21, // 42: google.ads.googleads.v2.services.Forecast.on_target_reach:type_name -> google.protobuf.Int64Value
21, // 43: google.ads.googleads.v2.services.Forecast.total_reach:type_name -> google.protobuf.Int64Value
21, // 44: google.ads.googleads.v2.services.Forecast.on_target_impressions:type_name -> google.protobuf.Int64Value
21, // 45: google.ads.googleads.v2.services.Forecast.total_impressions:type_name -> google.protobuf.Int64Value
21, // 46: google.ads.googleads.v2.services.OnTargetAudienceMetrics.youtube_audience_size:type_name -> google.protobuf.Int64Value
21, // 47: google.ads.googleads.v2.services.OnTargetAudienceMetrics.census_audience_size:type_name -> google.protobuf.Int64Value
0, // 48: google.ads.googleads.v2.services.ReachPlanService.ListPlannableLocations:input_type -> google.ads.googleads.v2.services.ListPlannableLocationsRequest
3, // 49: google.ads.googleads.v2.services.ReachPlanService.ListPlannableProducts:input_type -> google.ads.googleads.v2.services.ListPlannableProductsRequest
7, // 50: google.ads.googleads.v2.services.ReachPlanService.GenerateProductMixIdeas:input_type -> google.ads.googleads.v2.services.GenerateProductMixIdeasRequest
11, // 51: google.ads.googleads.v2.services.ReachPlanService.GenerateReachForecast:input_type -> google.ads.googleads.v2.services.GenerateReachForecastRequest
1, // 52: google.ads.googleads.v2.services.ReachPlanService.ListPlannableLocations:output_type -> google.ads.googleads.v2.services.ListPlannableLocationsResponse
4, // 53: google.ads.googleads.v2.services.ReachPlanService.ListPlannableProducts:output_type -> google.ads.googleads.v2.services.ListPlannableProductsResponse
9, // 54: google.ads.googleads.v2.services.ReachPlanService.GenerateProductMixIdeas:output_type -> google.ads.googleads.v2.services.GenerateProductMixIdeasResponse
15, // 55: google.ads.googleads.v2.services.ReachPlanService.GenerateReachForecast:output_type -> google.ads.googleads.v2.services.GenerateReachForecastResponse
52, // [52:56] is the sub-list for method output_type
48, // [48:52] is the sub-list for method input_type
48, // [48:48] is the sub-list for extension type_name
48, // [48:48] is the sub-list for extension extendee
0, // [0:48] is the sub-list for field type_name
}
func init() { file_google_ads_googleads_v2_services_reach_plan_service_proto_init() }
func file_google_ads_googleads_v2_services_reach_plan_service_proto_init() {
if File_google_ads_googleads_v2_services_reach_plan_service_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListPlannableLocationsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListPlannableLocationsResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PlannableLocation); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListPlannableProductsRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListPlannableProductsResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ProductMetadata); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PlannableTargeting); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GenerateProductMixIdeasRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Preferences); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GenerateProductMixIdeasResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ProductAllocation); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GenerateReachForecastRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Targeting); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CampaignDuration); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PlannedProduct); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GenerateReachForecastResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ReachCurve); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ReachForecast); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Forecast); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OnTargetAudienceMetrics); 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_v2_services_reach_plan_service_proto_rawDesc,
NumEnums: 0,
NumMessages: 20,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_google_ads_googleads_v2_services_reach_plan_service_proto_goTypes,
DependencyIndexes: file_google_ads_googleads_v2_services_reach_plan_service_proto_depIdxs,
MessageInfos: file_google_ads_googleads_v2_services_reach_plan_service_proto_msgTypes,
}.Build()
File_google_ads_googleads_v2_services_reach_plan_service_proto = out.File
file_google_ads_googleads_v2_services_reach_plan_service_proto_rawDesc = nil
file_google_ads_googleads_v2_services_reach_plan_service_proto_goTypes = nil
file_google_ads_googleads_v2_services_reach_plan_service_proto_depIdxs = nil
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConnInterface
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion6
// ReachPlanServiceClient is the client API for ReachPlanService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
type ReachPlanServiceClient interface {
// Returns the list of plannable locations (for example, countries & DMAs).
ListPlannableLocations(ctx context.Context, in *ListPlannableLocationsRequest, opts ...grpc.CallOption) (*ListPlannableLocationsResponse, error)
// Returns the list of per-location plannable YouTube ad formats with allowed
// targeting.
ListPlannableProducts(ctx context.Context, in *ListPlannableProductsRequest, opts ...grpc.CallOption) (*ListPlannableProductsResponse, error)
// Generates a product mix ideas given a set of preferences. This method
// helps the advertiser to obtain a good mix of ad formats and budget
// allocations based on its preferences.
GenerateProductMixIdeas(ctx context.Context, in *GenerateProductMixIdeasRequest, opts ...grpc.CallOption) (*GenerateProductMixIdeasResponse, error)
// Generates a reach forecast for a given targeting / product mix.
GenerateReachForecast(ctx context.Context, in *GenerateReachForecastRequest, opts ...grpc.CallOption) (*GenerateReachForecastResponse, error)
}
type reachPlanServiceClient struct {
cc grpc.ClientConnInterface
}
func NewReachPlanServiceClient(cc grpc.ClientConnInterface) ReachPlanServiceClient {
return &reachPlanServiceClient{cc}
}
func (c *reachPlanServiceClient) ListPlannableLocations(ctx context.Context, in *ListPlannableLocationsRequest, opts ...grpc.CallOption) (*ListPlannableLocationsResponse, error) {
out := new(ListPlannableLocationsResponse)
err := c.cc.Invoke(ctx, "/google.ads.googleads.v2.services.ReachPlanService/ListPlannableLocations", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *reachPlanServiceClient) ListPlannableProducts(ctx context.Context, in *ListPlannableProductsRequest, opts ...grpc.CallOption) (*ListPlannableProductsResponse, error) {
out := new(ListPlannableProductsResponse)
err := c.cc.Invoke(ctx, "/google.ads.googleads.v2.services.ReachPlanService/ListPlannableProducts", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *reachPlanServiceClient) GenerateProductMixIdeas(ctx context.Context, in *GenerateProductMixIdeasRequest, opts ...grpc.CallOption) (*GenerateProductMixIdeasResponse, error) {
out := new(GenerateProductMixIdeasResponse)
err := c.cc.Invoke(ctx, "/google.ads.googleads.v2.services.ReachPlanService/GenerateProductMixIdeas", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *reachPlanServiceClient) GenerateReachForecast(ctx context.Context, in *GenerateReachForecastRequest, opts ...grpc.CallOption) (*GenerateReachForecastResponse, error) {
out := new(GenerateReachForecastResponse)
err := c.cc.Invoke(ctx, "/google.ads.googleads.v2.services.ReachPlanService/GenerateReachForecast", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// ReachPlanServiceServer is the server API for ReachPlanService service.
type ReachPlanServiceServer interface {
// Returns the list of plannable locations (for example, countries & DMAs).
ListPlannableLocations(context.Context, *ListPlannableLocationsRequest) (*ListPlannableLocationsResponse, error)
// Returns the list of per-location plannable YouTube ad formats with allowed
// targeting.
ListPlannableProducts(context.Context, *ListPlannableProductsRequest) (*ListPlannableProductsResponse, error)
// Generates a product mix ideas given a set of preferences. This method
// helps the advertiser to obtain a good mix of ad formats and budget
// allocations based on its preferences.
GenerateProductMixIdeas(context.Context, *GenerateProductMixIdeasRequest) (*GenerateProductMixIdeasResponse, error)
// Generates a reach forecast for a given targeting / product mix.
GenerateReachForecast(context.Context, *GenerateReachForecastRequest) (*GenerateReachForecastResponse, error)
}
// UnimplementedReachPlanServiceServer can be embedded to have forward compatible implementations.
type UnimplementedReachPlanServiceServer struct {
}
func (*UnimplementedReachPlanServiceServer) ListPlannableLocations(context.Context, *ListPlannableLocationsRequest) (*ListPlannableLocationsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListPlannableLocations not implemented")
}
func (*UnimplementedReachPlanServiceServer) ListPlannableProducts(context.Context, *ListPlannableProductsRequest) (*ListPlannableProductsResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method ListPlannableProducts not implemented")
}
func (*UnimplementedReachPlanServiceServer) GenerateProductMixIdeas(context.Context, *GenerateProductMixIdeasRequest) (*GenerateProductMixIdeasResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GenerateProductMixIdeas not implemented")
}
func (*UnimplementedReachPlanServiceServer) GenerateReachForecast(context.Context, *GenerateReachForecastRequest) (*GenerateReachForecastResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GenerateReachForecast not implemented")
}
func RegisterReachPlanServiceServer(s *grpc.Server, srv ReachPlanServiceServer) {
s.RegisterService(&_ReachPlanService_serviceDesc, srv)
}
func _ReachPlanService_ListPlannableLocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListPlannableLocationsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ReachPlanServiceServer).ListPlannableLocations(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.ads.googleads.v2.services.ReachPlanService/ListPlannableLocations",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ReachPlanServiceServer).ListPlannableLocations(ctx, req.(*ListPlannableLocationsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _ReachPlanService_ListPlannableProducts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListPlannableProductsRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ReachPlanServiceServer).ListPlannableProducts(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.ads.googleads.v2.services.ReachPlanService/ListPlannableProducts",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ReachPlanServiceServer).ListPlannableProducts(ctx, req.(*ListPlannableProductsRequest))
}
return interceptor(ctx, in, info, handler)
}
func _ReachPlanService_GenerateProductMixIdeas_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GenerateProductMixIdeasRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ReachPlanServiceServer).GenerateProductMixIdeas(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.ads.googleads.v2.services.ReachPlanService/GenerateProductMixIdeas",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ReachPlanServiceServer).GenerateProductMixIdeas(ctx, req.(*GenerateProductMixIdeasRequest))
}
return interceptor(ctx, in, info, handler)
}
func _ReachPlanService_GenerateReachForecast_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GenerateReachForecastRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(ReachPlanServiceServer).GenerateReachForecast(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/google.ads.googleads.v2.services.ReachPlanService/GenerateReachForecast",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(ReachPlanServiceServer).GenerateReachForecast(ctx, req.(*GenerateReachForecastRequest))
}
return interceptor(ctx, in, info, handler)
}
var _ReachPlanService_serviceDesc = grpc.ServiceDesc{
ServiceName: "google.ads.googleads.v2.services.ReachPlanService",
HandlerType: (*ReachPlanServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "ListPlannableLocations",
Handler: _ReachPlanService_ListPlannableLocations_Handler,
},
{
MethodName: "ListPlannableProducts",
Handler: _ReachPlanService_ListPlannableProducts_Handler,
},
{
MethodName: "GenerateProductMixIdeas",
Handler: _ReachPlanService_GenerateProductMixIdeas_Handler,
},
{
MethodName: "GenerateReachForecast",
Handler: _ReachPlanService_GenerateReachForecast_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "google/ads/googleads/v2/services/reach_plan_service.proto",
}