// Copyright 2026 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated file. DO NOT EDIT.

// Package retail provides access to the Vertex AI Search for commerce API.
//
// For product documentation, see: https://cloud.google.com/recommendations
//
// # Library status
//
// These client libraries are officially supported by Google. However, this
// library is considered complete and is in maintenance mode. This means
// that we will address critical bugs and security issues but will not add
// any new features.
//
// When possible, we recommend using our newer
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
// that are still actively being worked and iterated on.
//
// # Creating a client
//
// Usage example:
//
//	import "google.golang.org/api/retail/v2"
//	...
//	ctx := context.Background()
//	retailService, err := retail.NewService(ctx)
//
// In this example, Google Application Default Credentials are used for
// authentication. For information on how to create and obtain Application
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
//
// # Other authentication options
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	retailService, err := retail.NewService(ctx, option.WithAPIKey("AIza..."))
//
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
// flow, use [google.golang.org/api/option.WithTokenSource]:
//
//	config := &oauth2.Config{...}
//	// ...
//	token, err := config.Exchange(ctx, ...)
//	retailService, err := retail.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package retail // import "google.golang.org/api/retail/v2"

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"log/slog"
	"net/http"
	"net/url"
	"strconv"
	"strings"

	"github.com/googleapis/gax-go/v2/internallog"
	googleapi "google.golang.org/api/googleapi"
	internal "google.golang.org/api/internal"
	gensupport "google.golang.org/api/internal/gensupport"
	option "google.golang.org/api/option"
	internaloption "google.golang.org/api/option/internaloption"
	htransport "google.golang.org/api/transport/http"
)

// Always reference these packages, just in case the auto-generated code
// below doesn't.
var _ = bytes.NewBuffer
var _ = strconv.Itoa
var _ = fmt.Sprintf
var _ = json.NewDecoder
var _ = io.Copy
var _ = url.Parse
var _ = gensupport.MarshalJSON
var _ = googleapi.Version
var _ = errors.New
var _ = strings.Replace
var _ = context.Canceled
var _ = internaloption.WithDefaultEndpoint
var _ = internal.Version
var _ = internallog.New

const apiId = "retail:v2"
const apiName = "retail"
const apiVersion = "v2"
const basePath = "https://retail.googleapis.com/"
const basePathTemplate = "https://retail.UNIVERSE_DOMAIN/"
const mtlsBasePath = "https://retail.mtls.googleapis.com/"

// OAuth2 scopes used by this API.
const (
	// See, edit, configure, and delete your Google Cloud data and see the email
	// address for your Google Account.
	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
)

// NewService creates a new Service.
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
	scopesOption := internaloption.WithDefaultScopes(
		"https://www.googleapis.com/auth/cloud-platform",
	)
	// NOTE: prepend, so we don't override user-specified scopes.
	opts = append([]option.ClientOption{scopesOption}, opts...)
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	opts = append(opts, internaloption.EnableNewAuthLibrary())
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s := &Service{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}
	s.Projects = NewProjectsService(s)
	if endpoint != "" {
		s.BasePath = endpoint
	}
	return s, nil
}

// New creates a new Service. It uses the provided http.Client for requests.
//
// Deprecated: please use NewService instead.
// To provide a custom HTTP client, use option.WithHTTPClient.
// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.
func New(client *http.Client) (*Service, error) {
	if client == nil {
		return nil, errors.New("client is nil")
	}
	return NewService(context.TODO(), option.WithHTTPClient(client))
}

type Service struct {
	client    *http.Client
	logger    *slog.Logger
	BasePath  string // API endpoint base URL
	UserAgent string // optional additional User-Agent fragment

	Projects *ProjectsService
}

func (s *Service) userAgent() string {
	if s.UserAgent == "" {
		return googleapi.UserAgent
	}
	return googleapi.UserAgent + " " + s.UserAgent
}

func NewProjectsService(s *Service) *ProjectsService {
	rs := &ProjectsService{s: s}
	rs.Locations = NewProjectsLocationsService(s)
	rs.Operations = NewProjectsOperationsService(s)
	return rs
}

type ProjectsService struct {
	s *Service

	Locations *ProjectsLocationsService

	Operations *ProjectsOperationsService
}

func NewProjectsLocationsService(s *Service) *ProjectsLocationsService {
	rs := &ProjectsLocationsService{s: s}
	rs.Catalogs = NewProjectsLocationsCatalogsService(s)
	rs.Operations = NewProjectsLocationsOperationsService(s)
	return rs
}

type ProjectsLocationsService struct {
	s *Service

	Catalogs *ProjectsLocationsCatalogsService

	Operations *ProjectsLocationsOperationsService
}

func NewProjectsLocationsCatalogsService(s *Service) *ProjectsLocationsCatalogsService {
	rs := &ProjectsLocationsCatalogsService{s: s}
	rs.AttributesConfig = NewProjectsLocationsCatalogsAttributesConfigService(s)
	rs.Branches = NewProjectsLocationsCatalogsBranchesService(s)
	rs.CompletionData = NewProjectsLocationsCatalogsCompletionDataService(s)
	rs.Controls = NewProjectsLocationsCatalogsControlsService(s)
	rs.GenerativeQuestion = NewProjectsLocationsCatalogsGenerativeQuestionService(s)
	rs.GenerativeQuestions = NewProjectsLocationsCatalogsGenerativeQuestionsService(s)
	rs.Models = NewProjectsLocationsCatalogsModelsService(s)
	rs.Operations = NewProjectsLocationsCatalogsOperationsService(s)
	rs.Placements = NewProjectsLocationsCatalogsPlacementsService(s)
	rs.ServingConfigs = NewProjectsLocationsCatalogsServingConfigsService(s)
	rs.UserEvents = NewProjectsLocationsCatalogsUserEventsService(s)
	return rs
}

type ProjectsLocationsCatalogsService struct {
	s *Service

	AttributesConfig *ProjectsLocationsCatalogsAttributesConfigService

	Branches *ProjectsLocationsCatalogsBranchesService

	CompletionData *ProjectsLocationsCatalogsCompletionDataService

	Controls *ProjectsLocationsCatalogsControlsService

	GenerativeQuestion *ProjectsLocationsCatalogsGenerativeQuestionService

	GenerativeQuestions *ProjectsLocationsCatalogsGenerativeQuestionsService

	Models *ProjectsLocationsCatalogsModelsService

	Operations *ProjectsLocationsCatalogsOperationsService

	Placements *ProjectsLocationsCatalogsPlacementsService

	ServingConfigs *ProjectsLocationsCatalogsServingConfigsService

	UserEvents *ProjectsLocationsCatalogsUserEventsService
}

func NewProjectsLocationsCatalogsAttributesConfigService(s *Service) *ProjectsLocationsCatalogsAttributesConfigService {
	rs := &ProjectsLocationsCatalogsAttributesConfigService{s: s}
	return rs
}

type ProjectsLocationsCatalogsAttributesConfigService struct {
	s *Service
}

func NewProjectsLocationsCatalogsBranchesService(s *Service) *ProjectsLocationsCatalogsBranchesService {
	rs := &ProjectsLocationsCatalogsBranchesService{s: s}
	rs.Operations = NewProjectsLocationsCatalogsBranchesOperationsService(s)
	rs.Products = NewProjectsLocationsCatalogsBranchesProductsService(s)
	return rs
}

type ProjectsLocationsCatalogsBranchesService struct {
	s *Service

	Operations *ProjectsLocationsCatalogsBranchesOperationsService

	Products *ProjectsLocationsCatalogsBranchesProductsService
}

func NewProjectsLocationsCatalogsBranchesOperationsService(s *Service) *ProjectsLocationsCatalogsBranchesOperationsService {
	rs := &ProjectsLocationsCatalogsBranchesOperationsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsBranchesOperationsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsBranchesProductsService(s *Service) *ProjectsLocationsCatalogsBranchesProductsService {
	rs := &ProjectsLocationsCatalogsBranchesProductsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsBranchesProductsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsCompletionDataService(s *Service) *ProjectsLocationsCatalogsCompletionDataService {
	rs := &ProjectsLocationsCatalogsCompletionDataService{s: s}
	return rs
}

type ProjectsLocationsCatalogsCompletionDataService struct {
	s *Service
}

func NewProjectsLocationsCatalogsControlsService(s *Service) *ProjectsLocationsCatalogsControlsService {
	rs := &ProjectsLocationsCatalogsControlsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsControlsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsGenerativeQuestionService(s *Service) *ProjectsLocationsCatalogsGenerativeQuestionService {
	rs := &ProjectsLocationsCatalogsGenerativeQuestionService{s: s}
	return rs
}

type ProjectsLocationsCatalogsGenerativeQuestionService struct {
	s *Service
}

func NewProjectsLocationsCatalogsGenerativeQuestionsService(s *Service) *ProjectsLocationsCatalogsGenerativeQuestionsService {
	rs := &ProjectsLocationsCatalogsGenerativeQuestionsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsGenerativeQuestionsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsModelsService(s *Service) *ProjectsLocationsCatalogsModelsService {
	rs := &ProjectsLocationsCatalogsModelsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsModelsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsOperationsService(s *Service) *ProjectsLocationsCatalogsOperationsService {
	rs := &ProjectsLocationsCatalogsOperationsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsOperationsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsPlacementsService(s *Service) *ProjectsLocationsCatalogsPlacementsService {
	rs := &ProjectsLocationsCatalogsPlacementsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsPlacementsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsServingConfigsService(s *Service) *ProjectsLocationsCatalogsServingConfigsService {
	rs := &ProjectsLocationsCatalogsServingConfigsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsServingConfigsService struct {
	s *Service
}

func NewProjectsLocationsCatalogsUserEventsService(s *Service) *ProjectsLocationsCatalogsUserEventsService {
	rs := &ProjectsLocationsCatalogsUserEventsService{s: s}
	return rs
}

type ProjectsLocationsCatalogsUserEventsService struct {
	s *Service
}

func NewProjectsLocationsOperationsService(s *Service) *ProjectsLocationsOperationsService {
	rs := &ProjectsLocationsOperationsService{s: s}
	return rs
}

type ProjectsLocationsOperationsService struct {
	s *Service
}

func NewProjectsOperationsService(s *Service) *ProjectsOperationsService {
	rs := &ProjectsOperationsService{s: s}
	return rs
}

type ProjectsOperationsService struct {
	s *Service
}

// GoogleApiHttpBody: Message that represents an arbitrary HTTP body. It should
// only be used for payload formats that can't be represented as JSON, such as
// raw binary or an HTML page. This message can be used both in streaming and
// non-streaming API methods in the request as well as the response. It can be
// used as a top-level request field, which is convenient if one wants to
// extract parameters from either the URL or HTTP template into the request
// fields and also want access to the raw HTTP body. Example: message
// GetResourceRequest { // A unique request id. string request_id = 1; // The
// raw HTTP body is bound to this field. google.api.HttpBody http_body = 2; }
// service ResourceService { rpc GetResource(GetResourceRequest) returns
// (google.api.HttpBody); rpc UpdateResource(google.api.HttpBody) returns
// (google.protobuf.Empty); } Example with streaming methods: service
// CaldavService { rpc GetCalendar(stream google.api.HttpBody) returns (stream
// google.api.HttpBody); rpc UpdateCalendar(stream google.api.HttpBody) returns
// (stream google.api.HttpBody); } Use of this type only changes how the
// request and response bodies are handled, all other features will continue to
// work unchanged.
type GoogleApiHttpBody struct {
	// ContentType: The HTTP Content-Type header value specifying the content type
	// of the body.
	ContentType string `json:"contentType,omitempty"`
	// Data: The HTTP request/response body as raw binary.
	Data string `json:"data,omitempty"`
	// Extensions: Application specific response metadata. Must be set in the first
	// response for streaming APIs.
	Extensions []googleapi.RawMessage `json:"extensions,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ContentType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ContentType") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleApiHttpBody) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleApiHttpBody
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailLoggingErrorContext: A description of the context in which
// an error occurred.
type GoogleCloudRetailLoggingErrorContext struct {
	// HttpRequest: The HTTP request which was processed when the error was
	// triggered.
	HttpRequest *GoogleCloudRetailLoggingHttpRequestContext `json:"httpRequest,omitempty"`
	// ReportLocation: The location in the source code where the decision was made
	// to report the error, usually the place where it was logged.
	ReportLocation *GoogleCloudRetailLoggingSourceLocation `json:"reportLocation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "HttpRequest") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "HttpRequest") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailLoggingErrorContext) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailLoggingErrorContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailLoggingErrorLog: An error log which is reported to the
// Error Reporting system. This proto a superset of
// google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent.
type GoogleCloudRetailLoggingErrorLog struct {
	// Context: A description of the context in which the error occurred.
	Context *GoogleCloudRetailLoggingErrorContext `json:"context,omitempty"`
	// ImportPayload: The error payload that is populated on LRO import APIs.
	ImportPayload *GoogleCloudRetailLoggingImportErrorContext `json:"importPayload,omitempty"`
	// Message: A message describing the error.
	Message string `json:"message,omitempty"`
	// RequestPayload: The API request payload, represented as a protocol buffer.
	// Most API request types are supported. For example:
	// "type.googleapis.com/google.cloud.retail.v2.ProductService.CreateProductReque
	// st"
	// "type.googleapis.com/google.cloud.retail.v2.UserEventService.WriteUserEventRe
	// quest"
	RequestPayload googleapi.RawMessage `json:"requestPayload,omitempty"`
	// ResponsePayload: The API response payload, represented as a protocol buffer.
	// This is used to log some "soft errors", where the response is valid but we
	// consider there are some quality issues like unjoined events. The following
	// API responses are supported and no PII is included:
	// "google.cloud.retail.v2.PredictionService.Predict"
	// "google.cloud.retail.v2.UserEventService.WriteUserEvent"
	// "google.cloud.retail.v2.UserEventService.CollectUserEvent"
	ResponsePayload googleapi.RawMessage `json:"responsePayload,omitempty"`
	// ServiceContext: The service context in which this error has occurred.
	ServiceContext *GoogleCloudRetailLoggingServiceContext `json:"serviceContext,omitempty"`
	// Status: The RPC status associated with the error log.
	Status *GoogleRpcStatus `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Context") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Context") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailLoggingErrorLog) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailLoggingErrorLog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailLoggingHttpRequestContext: HTTP request data that is
// related to a reported error.
type GoogleCloudRetailLoggingHttpRequestContext struct {
	// ResponseStatusCode: The HTTP response status code for the request.
	ResponseStatusCode int64 `json:"responseStatusCode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ResponseStatusCode") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ResponseStatusCode") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailLoggingHttpRequestContext) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailLoggingHttpRequestContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailLoggingImportErrorContext: The error payload that is
// populated on LRO import APIs, including
// "google.cloud.retail.v2.ProductService.ImportProducts" and
// "google.cloud.retail.v2.EventService.ImportUserEvents".
type GoogleCloudRetailLoggingImportErrorContext struct {
	// CatalogItem: The detailed content which caused the error on importing a
	// catalog item.
	CatalogItem string `json:"catalogItem,omitempty"`
	// GcsPath: Cloud Storage file path of the import source. Can be set for batch
	// operation error.
	GcsPath string `json:"gcsPath,omitempty"`
	// LineNumber: Line number of the content in file. Should be empty for
	// permission or batch operation error.
	LineNumber string `json:"lineNumber,omitempty"`
	// OperationName: The operation resource name of the LRO.
	OperationName string `json:"operationName,omitempty"`
	// Product: The detailed content which caused the error on importing a product.
	Product string `json:"product,omitempty"`
	// UserEvent: The detailed content which caused the error on importing a user
	// event.
	UserEvent string `json:"userEvent,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CatalogItem") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CatalogItem") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailLoggingImportErrorContext) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailLoggingImportErrorContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailLoggingServiceContext: Describes a running service that
// sends errors.
type GoogleCloudRetailLoggingServiceContext struct {
	// Service: An identifier of the service. For example, "retail.googleapis.com".
	Service string `json:"service,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Service") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Service") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailLoggingServiceContext) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailLoggingServiceContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailLoggingSourceLocation: Indicates a location in the source
// code of the service for which errors are reported.
type GoogleCloudRetailLoggingSourceLocation struct {
	// FunctionName: Human-readable name of a function or method. For example,
	// "google.cloud.retail.v2.UserEventService.ImportUserEvents".
	FunctionName string `json:"functionName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FunctionName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FunctionName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailLoggingSourceLocation) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailLoggingSourceLocation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2AddCatalogAttributeRequest: Request for
// CatalogService.AddCatalogAttribute method.
type GoogleCloudRetailV2AddCatalogAttributeRequest struct {
	// CatalogAttribute: Required. The CatalogAttribute to add.
	CatalogAttribute *GoogleCloudRetailV2CatalogAttribute `json:"catalogAttribute,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CatalogAttribute") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CatalogAttribute") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2AddCatalogAttributeRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2AddCatalogAttributeRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2AddControlRequest: Request for AddControl method.
type GoogleCloudRetailV2AddControlRequest struct {
	// ControlId: Required. The id of the control to apply. Assumed to be in the
	// same catalog as the serving config - if id is not found a NOT_FOUND error is
	// returned.
	ControlId string `json:"controlId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ControlId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ControlId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2AddControlRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2AddControlRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2AddFulfillmentPlacesMetadata: Metadata related to the
// progress of the AddFulfillmentPlaces operation. Currently empty because
// there is no meaningful metadata populated from the
// ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2AddFulfillmentPlacesMetadata struct {
}

// GoogleCloudRetailV2AddFulfillmentPlacesRequest: Request message for
// ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2AddFulfillmentPlacesRequest struct {
	// AddTime: The time when the fulfillment updates are issued, used to prevent
	// out-of-order updates on fulfillment information. If not provided, the
	// internal system time will be used.
	AddTime string `json:"addTime,omitempty"`
	// AllowMissing: If set to true, and the Product is not found, the fulfillment
	// information will still be processed and retained for at most 1 day and
	// processed once the Product is created. If set to false, a NOT_FOUND error is
	// returned if the Product is not found.
	AllowMissing bool `json:"allowMissing,omitempty"`
	// PlaceIds: Required. The IDs for this type, such as the store IDs for
	// "pickup-in-store" or the region IDs for "same-day-delivery" to be added for
	// this type. Duplicate IDs will be automatically ignored. At least 1 value is
	// required, and a maximum of 2000 values are allowed. Each value must be a
	// string with a length limit of 10 characters, matching the pattern
	// `[a-zA-Z0-9_-]+`, such as "store1" or "REGION-2". Otherwise, an
	// INVALID_ARGUMENT error is returned. If the total number of place IDs exceeds
	// 2000 for this type after adding, then the update will be rejected.
	PlaceIds []string `json:"placeIds,omitempty"`
	// Type: Required. The fulfillment type, including commonly used types (such as
	// pickup in store and same day delivery), and custom types. Supported values:
	// * "pickup-in-store" * "ship-to-store" * "same-day-delivery" *
	// "next-day-delivery" * "custom-type-1" * "custom-type-2" * "custom-type-3" *
	// "custom-type-4" * "custom-type-5" If this field is set to an invalid value
	// other than these, an INVALID_ARGUMENT error is returned. This field directly
	// corresponds to Product.fulfillment_info.type.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AddTime") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AddTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2AddFulfillmentPlacesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2AddFulfillmentPlacesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2AddFulfillmentPlacesResponse: Response of the
// AddFulfillmentPlacesRequest. Currently empty because there is no meaningful
// response populated from the ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2AddFulfillmentPlacesResponse struct {
}

// GoogleCloudRetailV2AddLocalInventoriesMetadata: Metadata related to the
// progress of the AddLocalInventories operation. Currently empty because there
// is no meaningful metadata populated from the
// ProductService.AddLocalInventories method.
type GoogleCloudRetailV2AddLocalInventoriesMetadata struct {
}

// GoogleCloudRetailV2AddLocalInventoriesRequest: Request message for
// ProductService.AddLocalInventories method.
type GoogleCloudRetailV2AddLocalInventoriesRequest struct {
	// AddMask: Indicates which inventory fields in the provided list of
	// LocalInventory to update. The field is updated to the provided value. If a
	// field is set while the place does not have a previous local inventory, the
	// local inventory at that store is created. If a field is set while the value
	// of that field is not provided, the original field value, if it exists, is
	// deleted. If the mask is not set or set with empty paths, all inventory
	// fields will be updated. If an unsupported or unknown field is provided, an
	// INVALID_ARGUMENT error is returned and the entire update will be ignored.
	AddMask string `json:"addMask,omitempty"`
	// AddTime: The time when the inventory updates are issued. Used to prevent
	// out-of-order updates on local inventory fields. If not provided, the
	// internal system time will be used.
	AddTime string `json:"addTime,omitempty"`
	// AllowMissing: If set to true, and the Product is not found, the local
	// inventory will still be processed and retained for at most 1 day and
	// processed once the Product is created. If set to false, a NOT_FOUND error is
	// returned if the Product is not found.
	AllowMissing bool `json:"allowMissing,omitempty"`
	// LocalInventories: Required. A list of inventory information at difference
	// places. Each place is identified by its place ID. At most 3000 inventories
	// are allowed per request.
	LocalInventories []*GoogleCloudRetailV2LocalInventory `json:"localInventories,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AddMask") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AddMask") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2AddLocalInventoriesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2AddLocalInventoriesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2AddLocalInventoriesResponse: Response of the
// ProductService.AddLocalInventories API. Currently empty because there is no
// meaningful response populated from the ProductService.AddLocalInventories
// method.
type GoogleCloudRetailV2AddLocalInventoriesResponse struct {
}

// GoogleCloudRetailV2AttributesConfig: Catalog level attribute config.
type GoogleCloudRetailV2AttributesConfig struct {
	// AttributeConfigLevel: Output only. The AttributeConfigLevel used for this
	// catalog.
	//
	// Possible values:
	//   "ATTRIBUTE_CONFIG_LEVEL_UNSPECIFIED" - Value used when unset. In this
	// case, server behavior defaults to CATALOG_LEVEL_ATTRIBUTE_CONFIG.
	//   "PRODUCT_LEVEL_ATTRIBUTE_CONFIG" - At this level, we honor the attribute
	// configurations set in Product.attributes.
	//   "CATALOG_LEVEL_ATTRIBUTE_CONFIG" - At this level, we honor the attribute
	// configurations set in `CatalogConfig.attribute_configs`.
	AttributeConfigLevel string `json:"attributeConfigLevel,omitempty"`
	// CatalogAttributes: Enable attribute(s) config at catalog level. For example,
	// indexable, dynamic_facetable, or searchable for each attribute. The key is
	// catalog attribute's name. For example: `color`, `brands`,
	// `attributes.custom_attribute`, such as `attributes.xyz`. The maximum number
	// of catalog attributes allowed in a request is 1000.
	CatalogAttributes map[string]GoogleCloudRetailV2CatalogAttribute `json:"catalogAttributes,omitempty"`
	// Name: Required. Immutable. The fully qualified resource name of the
	// attribute config. Format:
	// `projects/*/locations/*/catalogs/*/attributesConfig`
	Name string `json:"name,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AttributeConfigLevel") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AttributeConfigLevel") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2AttributesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2AttributesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Audience: An intended audience of the Product for whom
// it's sold.
type GoogleCloudRetailV2Audience struct {
	// AgeGroups: The age groups of the audience. Strongly encouraged to use the
	// standard values: "newborn" (up to 3 months old), "infant" (3–12 months
	// old), "toddler" (1–5 years old), "kids" (5–13 years old), "adult"
	// (typically teens or older). At most 5 values are allowed. Each value must be
	// a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. Google Merchant Center property
	// age_group (https://support.google.com/merchants/answer/6324463). Schema.org
	// property Product.audience.suggestedMinAge
	// (https://schema.org/suggestedMinAge) and Product.audience.suggestedMaxAge
	// (https://schema.org/suggestedMaxAge).
	AgeGroups []string `json:"ageGroups,omitempty"`
	// Genders: The genders of the audience. Strongly encouraged to use the
	// standard values: "male", "female", "unisex". At most 5 values are allowed.
	// Each value must be a UTF-8 encoded string with a length limit of 128
	// characters. Otherwise, an INVALID_ARGUMENT error is returned. Google
	// Merchant Center property gender
	// (https://support.google.com/merchants/answer/6324479). Schema.org property
	// Product.audience.suggestedGender (https://schema.org/suggestedGender).
	Genders []string `json:"genders,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AgeGroups") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AgeGroups") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Audience) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Audience
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsRequest: Request for
// BatchUpdateGenerativeQuestionConfig method.
type GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsRequest struct {
	// Requests: Required. The updates question configs.
	Requests []*GoogleCloudRetailV2UpdateGenerativeQuestionConfigRequest `json:"requests,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Requests") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Requests") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse: Aggregated
// response for UpdateGenerativeQuestionConfig method.
type GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse struct {
	// GenerativeQuestionConfigs: Optional. The updates question configs.
	GenerativeQuestionConfigs []*GoogleCloudRetailV2GenerativeQuestionConfig `json:"generativeQuestionConfigs,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "GenerativeQuestionConfigs")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GenerativeQuestionConfigs") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2BigQueryOutputResult: A BigQuery output result.
type GoogleCloudRetailV2BigQueryOutputResult struct {
	// DatasetId: The ID of a BigQuery Dataset.
	DatasetId string `json:"datasetId,omitempty"`
	// TableId: The ID of a BigQuery Table.
	TableId string `json:"tableId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DatasetId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DatasetId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2BigQueryOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2BigQueryOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2BigQuerySource: BigQuery source import data from.
type GoogleCloudRetailV2BigQuerySource struct {
	// DataSchema: The schema to use when parsing the data from the source.
	// Supported values for product imports: * `product` (default): One JSON
	// Product per line. Each product must have a valid Product.id. *
	// `product_merchant_center`: See Importing catalog data from Merchant Center
	// (https://cloud.google.com/retail/recommendations-ai/docs/upload-catalog#mc).
	// Supported values for user events imports: * `user_event` (default): One JSON
	// UserEvent per line. * `user_event_ga360`: The schema is available here:
	// https://support.google.com/analytics/answer/3437719. * `user_event_ga4`: The
	// schema is available here:
	// https://support.google.com/analytics/answer/7029846. Supported values for
	// autocomplete imports: * `suggestions` (default): One JSON completion
	// suggestion per line. * `denylist`: One JSON deny suggestion per line. *
	// `allowlist`: One JSON allow suggestion per line.
	DataSchema string `json:"dataSchema,omitempty"`
	// DatasetId: Required. The BigQuery data set to copy the data from with a
	// length limit of 1,024 characters.
	DatasetId string `json:"datasetId,omitempty"`
	// GcsStagingDir: Intermediate Cloud Storage directory used for the import with
	// a length limit of 2,000 characters. Can be specified if one wants to have
	// the BigQuery export to a specific Cloud Storage directory.
	GcsStagingDir string `json:"gcsStagingDir,omitempty"`
	// PartitionDate: BigQuery time partitioned table's _PARTITIONDATE in
	// YYYY-MM-DD format.
	PartitionDate *GoogleTypeDate `json:"partitionDate,omitempty"`
	// ProjectId: The project ID (can be project # or ID) that the BigQuery source
	// is in with a length limit of 128 characters. If not specified, inherits the
	// project ID from the parent request.
	ProjectId string `json:"projectId,omitempty"`
	// TableId: Required. The BigQuery table to copy the data from with a length
	// limit of 1,024 characters.
	TableId string `json:"tableId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DataSchema") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DataSchema") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2BigQuerySource) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2BigQuerySource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Catalog: The catalog configuration.
type GoogleCloudRetailV2Catalog struct {
	// DisplayName: Required. Immutable. The catalog display name. This field must
	// be a UTF-8 encoded string with a length limit of 128 characters. Otherwise,
	// an INVALID_ARGUMENT error is returned.
	DisplayName string `json:"displayName,omitempty"`
	// Name: Required. Immutable. The fully qualified resource name of the catalog.
	Name string `json:"name,omitempty"`
	// ProductLevelConfig: Required. The product level configuration.
	ProductLevelConfig *GoogleCloudRetailV2ProductLevelConfig `json:"productLevelConfig,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "DisplayName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DisplayName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Catalog) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Catalog
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CatalogAttribute: Catalog level attribute config for an
// attribute. For example, if customers want to enable/disable facet for a
// specific attribute.
type GoogleCloudRetailV2CatalogAttribute struct {
	// DynamicFacetableOption: If DYNAMIC_FACETABLE_ENABLED, attribute values are
	// available for dynamic facet. Could only be DYNAMIC_FACETABLE_DISABLED if
	// CatalogAttribute.indexable_option is INDEXABLE_DISABLED. Otherwise, an
	// INVALID_ARGUMENT error is returned. Must be specified, otherwise throws
	// INVALID_FORMAT error.
	//
	// Possible values:
	//   "DYNAMIC_FACETABLE_OPTION_UNSPECIFIED" - Value used when unset.
	//   "DYNAMIC_FACETABLE_ENABLED" - Dynamic facetable option enabled for an
	// attribute.
	//   "DYNAMIC_FACETABLE_DISABLED" - Dynamic facetable option disabled for an
	// attribute.
	DynamicFacetableOption string `json:"dynamicFacetableOption,omitempty"`
	// ExactSearchableOption: If EXACT_SEARCHABLE_ENABLED, attribute values will be
	// exact searchable. This property only applies to textual custom attributes
	// and requires indexable set to enabled to enable exact-searchable. If unset,
	// the server behavior defaults to EXACT_SEARCHABLE_DISABLED.
	//
	// Possible values:
	//   "EXACT_SEARCHABLE_OPTION_UNSPECIFIED" - Value used when unset.
	//   "EXACT_SEARCHABLE_ENABLED" - Exact searchable option enabled for an
	// attribute.
	//   "EXACT_SEARCHABLE_DISABLED" - Exact searchable option disabled for an
	// attribute.
	ExactSearchableOption string `json:"exactSearchableOption,omitempty"`
	// FacetConfig: Contains facet options.
	FacetConfig *GoogleCloudRetailV2CatalogAttributeFacetConfig `json:"facetConfig,omitempty"`
	// InUse: Output only. Indicates whether this attribute has been used by any
	// products. `True` if at least one Product is using this attribute in
	// Product.attributes. Otherwise, this field is `False`. CatalogAttribute can
	// be pre-loaded by using CatalogService.AddCatalogAttribute or
	// CatalogService.UpdateAttributesConfig APIs. This field is `False` for
	// pre-loaded CatalogAttributes. Only pre-loaded catalog attributes that are
	// neither in use by products nor predefined can be deleted. Catalog attributes
	// that are either in use by products or are predefined attributes cannot be
	// deleted; however, their configuration properties will reset to default
	// values upon removal request. After catalog changes, it takes about 10
	// minutes for this field to update.
	InUse bool `json:"inUse,omitempty"`
	// IndexableOption: When AttributesConfig.attribute_config_level is
	// CATALOG_LEVEL_ATTRIBUTE_CONFIG, if INDEXABLE_ENABLED attribute values are
	// indexed so that it can be filtered, faceted, or boosted in
	// SearchService.Search. Must be specified when
	// AttributesConfig.attribute_config_level is CATALOG_LEVEL_ATTRIBUTE_CONFIG,
	// otherwise throws INVALID_FORMAT error.
	//
	// Possible values:
	//   "INDEXABLE_OPTION_UNSPECIFIED" - Value used when unset.
	//   "INDEXABLE_ENABLED" - Indexable option enabled for an attribute.
	//   "INDEXABLE_DISABLED" - Indexable option disabled for an attribute.
	IndexableOption string `json:"indexableOption,omitempty"`
	// Key: Required. Attribute name. For example: `color`, `brands`,
	// `attributes.custom_attribute`, such as `attributes.xyz`. To be indexable,
	// the attribute name can contain only alpha-numeric characters and
	// underscores. For example, an attribute named `attributes.abc_xyz` can be
	// indexed, but an attribute named `attributes.abc-xyz` cannot be indexed. If
	// the attribute key starts with `attributes.`, then the attribute is a custom
	// attribute. Attributes such as `brands`, `patterns`, and `title` are built-in
	// and called system attributes.
	Key string `json:"key,omitempty"`
	// RetrievableOption: If RETRIEVABLE_ENABLED, attribute values are retrievable
	// in the search results. If unset, the server behavior defaults to
	// RETRIEVABLE_DISABLED.
	//
	// Possible values:
	//   "RETRIEVABLE_OPTION_UNSPECIFIED" - Value used when unset.
	//   "RETRIEVABLE_ENABLED" - Retrievable option enabled for an attribute.
	//   "RETRIEVABLE_DISABLED" - Retrievable option disabled for an attribute.
	RetrievableOption string `json:"retrievableOption,omitempty"`
	// SearchableOption: When AttributesConfig.attribute_config_level is
	// CATALOG_LEVEL_ATTRIBUTE_CONFIG, if SEARCHABLE_ENABLED, attribute values are
	// searchable by text queries in SearchService.Search. If SEARCHABLE_ENABLED
	// but attribute type is numerical, attribute values will not be searchable by
	// text queries in SearchService.Search, as there are no text values associated
	// to numerical attributes. Must be specified, when
	// AttributesConfig.attribute_config_level is CATALOG_LEVEL_ATTRIBUTE_CONFIG,
	// otherwise throws INVALID_FORMAT error.
	//
	// Possible values:
	//   "SEARCHABLE_OPTION_UNSPECIFIED" - Value used when unset.
	//   "SEARCHABLE_ENABLED" - Searchable option enabled for an attribute.
	//   "SEARCHABLE_DISABLED" - Searchable option disabled for an attribute.
	SearchableOption string `json:"searchableOption,omitempty"`
	// Type: Output only. The type of this attribute. This is derived from the
	// attribute in Product.attributes.
	//
	// Possible values:
	//   "UNKNOWN" - The type of the attribute is unknown. Used when type cannot be
	// derived from attribute that is not in_use.
	//   "TEXTUAL" - Textual attribute.
	//   "NUMERICAL" - Numerical attribute.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicFacetableOption") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicFacetableOption") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CatalogAttribute) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CatalogAttribute
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CatalogAttributeFacetConfig: Possible options for the
// facet that corresponds to the current attribute config.
type GoogleCloudRetailV2CatalogAttributeFacetConfig struct {
	// FacetIntervals: If you don't set the facet
	// SearchRequest.FacetSpec.FacetKey.intervals in the request to a numerical
	// attribute, then we use the computed intervals with rounded bounds obtained
	// from all its product numerical attribute values. The computed intervals
	// might not be ideal for some attributes. Therefore, we give you the option to
	// overwrite them with the facet_intervals field. The maximum of facet
	// intervals per CatalogAttribute is 40. Each interval must have a lower bound
	// or an upper bound. If both bounds are provided, then the lower bound must be
	// smaller or equal than the upper bound.
	FacetIntervals []*GoogleCloudRetailV2Interval `json:"facetIntervals,omitempty"`
	// IgnoredFacetValues: Each instance represents a list of attribute values to
	// ignore as facet values for a specific time range. The maximum number of
	// instances per CatalogAttribute is 25.
	IgnoredFacetValues []*GoogleCloudRetailV2CatalogAttributeFacetConfigIgnoredFacetValues `json:"ignoredFacetValues,omitempty"`
	// MergedFacet: Use this field only if you want to merge a facet key into
	// another facet key.
	MergedFacet *GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacet `json:"mergedFacet,omitempty"`
	// MergedFacetValues: Each instance replaces a list of facet values by a merged
	// facet value. If a facet value is not in any list, then it will stay the
	// same. To avoid conflicts, only paths of length 1 are accepted. In other
	// words, if "dark_blue" merged into "BLUE", then the latter can't merge into
	// "blues" because this would create a path of length 2. The maximum number of
	// instances of MergedFacetValue per CatalogAttribute is 100. This feature is
	// available only for textual custom attributes.
	MergedFacetValues []*GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacetValue `json:"mergedFacetValues,omitempty"`
	// RerankConfig: Set this field only if you want to rerank based on facet
	// values engaged by the user for the current key. This option is only possible
	// for custom facetable textual keys.
	RerankConfig *GoogleCloudRetailV2CatalogAttributeFacetConfigRerankConfig `json:"rerankConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FacetIntervals") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FacetIntervals") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CatalogAttributeFacetConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CatalogAttributeFacetConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CatalogAttributeFacetConfigIgnoredFacetValues: Facet
// values to ignore on facets during the specified time range for the given
// SearchResponse.Facet.key attribute.
type GoogleCloudRetailV2CatalogAttributeFacetConfigIgnoredFacetValues struct {
	// EndTime: If start time is empty and end time is not empty, then ignore these
	// facet values before end time.
	EndTime string `json:"endTime,omitempty"`
	// StartTime: Time range for the current list of facet values to ignore. If
	// multiple time ranges are specified for an facet value for the current
	// attribute, consider all of them. If both are empty, ignore always. If start
	// time and end time are set, then start time must be before end time. If start
	// time is not empty and end time is empty, then will ignore these facet values
	// after the start time.
	StartTime string `json:"startTime,omitempty"`
	// Values: List of facet values to ignore for the following time range. The
	// facet values are the same as the attribute values. There is a limit of 10
	// values per instance of IgnoredFacetValues. Each value can have at most 128
	// characters.
	Values []string `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EndTime") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EndTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CatalogAttributeFacetConfigIgnoredFacetValues) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CatalogAttributeFacetConfigIgnoredFacetValues
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacet: The current facet
// key (i.e. attribute config) maps into the merged_facet_key. A facet key can
// have at most one child. The current facet key and the merged facet key need
// both to be textual custom attributes or both numerical custom attributes
// (same type).
type GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacet struct {
	// MergedFacetKey: The merged facet key should be a valid facet key that is
	// different than the facet key of the current catalog attribute. We refer this
	// is merged facet key as the child of the current catalog attribute. This
	// merged facet key can't be a parent of another facet key (i.e. no directed
	// path of length 2). This merged facet key needs to be either a textual custom
	// attribute or a numerical custom attribute.
	MergedFacetKey string `json:"mergedFacetKey,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MergedFacetKey") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MergedFacetKey") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacet) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacet
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacetValue: Replaces a
// set of textual facet values by the same (possibly different) merged facet
// value. Each facet value should appear at most once as a value per
// CatalogAttribute. This feature is available only for textual custom
// attributes.
type GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacetValue struct {
	// MergedValue: All the previous values are replaced by this merged facet
	// value. This merged_value must be non-empty and can have up to 128
	// characters.
	MergedValue string `json:"mergedValue,omitempty"`
	// Values: All the facet values that are replaces by the same merged_value that
	// follows. The maximum number of values per MergedFacetValue is 25. Each value
	// can have up to 128 characters.
	Values []string `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MergedValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MergedValue") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacetValue) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CatalogAttributeFacetConfigMergedFacetValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CatalogAttributeFacetConfigRerankConfig: Options to
// rerank based on facet values engaged by the user for the current key. That
// key needs to be a custom textual key and facetable. To use this control, you
// also need to pass all the facet keys engaged by the user in the request
// using the field [SearchRequest.FacetSpec]. In particular, if you don't pass
// the facet keys engaged that you want to rerank on, this control won't be
// effective. Moreover, to obtain better results, the facet values that you
// want to rerank on should be close to English (ideally made of words,
// underscores, and spaces).
type GoogleCloudRetailV2CatalogAttributeFacetConfigRerankConfig struct {
	// FacetValues: If empty, rerank on all facet values for the current key.
	// Otherwise, will rerank on the facet values from this list only.
	FacetValues []string `json:"facetValues,omitempty"`
	// RerankFacet: If set to true, then we also rerank the dynamic facets based on
	// the facet values engaged by the user for the current attribute key during
	// serving.
	RerankFacet bool `json:"rerankFacet,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FacetValues") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FacetValues") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CatalogAttributeFacetConfigRerankConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CatalogAttributeFacetConfigRerankConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CollectUserEventRequest: Request message for
// CollectUserEvent method.
type GoogleCloudRetailV2CollectUserEventRequest struct {
	// Ets: The event timestamp in milliseconds. This prevents browser caching of
	// otherwise identical get requests. The name is abbreviated to reduce the
	// payload bytes.
	Ets int64 `json:"ets,omitempty,string"`
	// PrebuiltRule: The prebuilt rule name that can convert a specific type of
	// raw_json. For example: "ga4_bq" rule for the GA4 user event schema.
	PrebuiltRule string `json:"prebuiltRule,omitempty"`
	// RawJson: An arbitrary serialized JSON string that contains necessary
	// information that can comprise a user event. When this field is specified,
	// the user_event field will be ignored. Note: line-delimited JSON is not
	// supported, a single JSON only.
	RawJson string `json:"rawJson,omitempty"`
	// Uri: The URL including cgi-parameters but excluding the hash fragment with a
	// length limit of 5,000 characters. This is often more useful than the referer
	// URL, because many browsers only send the domain for 3rd party requests.
	Uri string `json:"uri,omitempty"`
	// UserEvent: Required. URL encoded UserEvent proto with a length limit of
	// 2,000,000 characters.
	UserEvent string `json:"userEvent,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Ets") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Ets") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CollectUserEventRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CollectUserEventRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ColorInfo: The color information of a Product.
type GoogleCloudRetailV2ColorInfo struct {
	// ColorFamilies: The standard color families. Strongly recommended to use the
	// following standard color groups: "Red", "Pink", "Orange", "Yellow",
	// "Purple", "Green", "Cyan", "Blue", "Brown", "White", "Gray", "Black" and
	// "Mixed". Normally it is expected to have only 1 color family. May consider
	// using single "Mixed" instead of multiple values. A maximum of 5 values are
	// allowed. Each value must be a UTF-8 encoded string with a length limit of
	// 128 characters. Otherwise, an INVALID_ARGUMENT error is returned. Google
	// Merchant Center property color
	// (https://support.google.com/merchants/answer/6324487). Schema.org property
	// Product.color (https://schema.org/color). The colorFamilies field as a
	// system attribute is not a required field but strongly recommended to be
	// specified. Google Search models treat this field as more important than a
	// custom product attribute when specified.
	ColorFamilies []string `json:"colorFamilies,omitempty"`
	// Colors: The color display names, which may be different from standard color
	// family names, such as the color aliases used in the website frontend.
	// Normally it is expected to have only 1 color. May consider using single
	// "Mixed" instead of multiple values. A maximum of 75 colors are allowed. Each
	// value must be a UTF-8 encoded string with a length limit of 128 characters.
	// Otherwise, an INVALID_ARGUMENT error is returned. Google Merchant Center
	// property color (https://support.google.com/merchants/answer/6324487).
	// Schema.org property Product.color (https://schema.org/color).
	Colors []string `json:"colors,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ColorFamilies") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ColorFamilies") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ColorInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ColorInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompleteQueryResponse: Response of the autocomplete
// query.
type GoogleCloudRetailV2CompleteQueryResponse struct {
	// AttributeResults: A map of matched attribute suggestions. This field is only
	// available for `cloud-retail` dataset. Current supported keys: * `brands` *
	// `categories`
	AttributeResults map[string]GoogleCloudRetailV2CompleteQueryResponseAttributeResult `json:"attributeResults,omitempty"`
	// AttributionToken: A unique complete token. This should be included in the
	// UserEvent.completion_detail for search events resulting from this
	// completion, which enables accurate attribution of complete model
	// performance.
	AttributionToken string `json:"attributionToken,omitempty"`
	// CompletionResults: Results of the matching suggestions. The result list is
	// ordered and the first result is top suggestion.
	CompletionResults []*GoogleCloudRetailV2CompleteQueryResponseCompletionResult `json:"completionResults,omitempty"`
	// RecentSearchResults: Deprecated. Matched recent searches of this user. The
	// maximum number of recent searches is 10. This field is a restricted feature.
	// If you want to enable it, contact Retail Search support. This feature is
	// only available when CompleteQueryRequest.visitor_id field is set and
	// UserEvent is imported. The recent searches satisfy the follow rules: * They
	// are ordered from latest to oldest. * They are matched with
	// CompleteQueryRequest.query case insensitively. * They are transformed to
	// lower case. * They are UTF-8 safe. Recent searches are deduplicated. More
	// recent searches will be reserved when duplication happens.
	RecentSearchResults []*GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult `json:"recentSearchResults,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AttributeResults") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AttributeResults") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompleteQueryResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompleteQueryResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompleteQueryResponseAttributeResult: Resource that
// represents attribute results.
type GoogleCloudRetailV2CompleteQueryResponseAttributeResult struct {
	// Suggestions: The list of suggestions for the attribute.
	Suggestions []string `json:"suggestions,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Suggestions") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Suggestions") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompleteQueryResponseAttributeResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompleteQueryResponseAttributeResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompleteQueryResponseCompletionResult: Resource that
// represents completion results.
type GoogleCloudRetailV2CompleteQueryResponseCompletionResult struct {
	// Attributes: Custom attributes for the suggestion term. * For `user-data`,
	// the attributes are additional custom attributes ingested through BigQuery. *
	// For `cloud-retail`, the attributes are product attributes generated by Cloud
	// Retail. It requires UserEvent.product_details is imported properly.
	Attributes map[string]GoogleCloudRetailV2CustomAttribute `json:"attributes,omitempty"`
	// Suggestion: The suggestion for the query.
	Suggestion string `json:"suggestion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attributes") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Attributes") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompleteQueryResponseCompletionResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompleteQueryResponseCompletionResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult: Deprecated:
// Recent search of this user.
type GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult struct {
	// RecentSearch: The recent search query.
	RecentSearch string `json:"recentSearch,omitempty"`
	// ForceSendFields is a list of field names (e.g. "RecentSearch") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "RecentSearch") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompleteQueryResponseRecentSearchResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompletionConfig: Catalog level autocomplete config for
// customers to customize autocomplete feature's settings.
type GoogleCloudRetailV2CompletionConfig struct {
	// AllowlistInputConfig: Output only. The source data for the latest import of
	// the autocomplete allowlist phrases.
	AllowlistInputConfig *GoogleCloudRetailV2CompletionDataInputConfig `json:"allowlistInputConfig,omitempty"`
	// AutoLearning: If set to true, the auto learning function is enabled. Auto
	// learning uses user data to generate suggestions using ML techniques. Default
	// value is false. Only after enabling auto learning can users use
	// `cloud-retail` data in CompleteQueryRequest.
	AutoLearning bool `json:"autoLearning,omitempty"`
	// DenylistInputConfig: Output only. The source data for the latest import of
	// the autocomplete denylist phrases.
	DenylistInputConfig *GoogleCloudRetailV2CompletionDataInputConfig `json:"denylistInputConfig,omitempty"`
	// LastAllowlistImportOperation: Output only. Name of the LRO corresponding to
	// the latest allowlist import. Can use GetOperation API to retrieve the latest
	// state of the Long Running Operation.
	LastAllowlistImportOperation string `json:"lastAllowlistImportOperation,omitempty"`
	// LastDenylistImportOperation: Output only. Name of the LRO corresponding to
	// the latest denylist import. Can use GetOperation API to retrieve the latest
	// state of the Long Running Operation.
	LastDenylistImportOperation string `json:"lastDenylistImportOperation,omitempty"`
	// LastSuggestionsImportOperation: Output only. Name of the LRO corresponding
	// to the latest suggestion terms list import. Can use GetOperation API method
	// to retrieve the latest state of the Long Running Operation.
	LastSuggestionsImportOperation string `json:"lastSuggestionsImportOperation,omitempty"`
	// MatchingOrder: Specifies the matching order for autocomplete suggestions,
	// e.g., a query consisting of 'sh' with 'out-of-order' specified would suggest
	// "women's shoes", whereas a query of 'red s' with 'exact-prefix' specified
	// would suggest "red shoes". Currently supported values: * 'out-of-order' *
	// 'exact-prefix' Default value: 'exact-prefix'.
	MatchingOrder string `json:"matchingOrder,omitempty"`
	// MaxSuggestions: The maximum number of autocomplete suggestions returned per
	// term. Default value is 20. If left unset or set to 0, then will fallback to
	// default value. Value range is 1 to 20.
	MaxSuggestions int64 `json:"maxSuggestions,omitempty"`
	// MinPrefixLength: The minimum number of characters needed to be typed in
	// order to get suggestions. Default value is 2. If left unset or set to 0,
	// then will fallback to default value. Value range is 1 to 20.
	MinPrefixLength int64 `json:"minPrefixLength,omitempty"`
	// Name: Required. Immutable. Fully qualified name
	// `projects/*/locations/*/catalogs/*/completionConfig`
	Name string `json:"name,omitempty"`
	// SuggestionsInputConfig: Output only. The source data for the latest import
	// of the autocomplete suggestion phrases.
	SuggestionsInputConfig *GoogleCloudRetailV2CompletionDataInputConfig `json:"suggestionsInputConfig,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AllowlistInputConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AllowlistInputConfig") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompletionConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompletionConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompletionDataInputConfig: The input config source for
// completion data.
type GoogleCloudRetailV2CompletionDataInputConfig struct {
	// BigQuerySource: Required. BigQuery input source. Add the IAM permission
	// "BigQuery Data Viewer" for
	// cloud-retail-customer-data-access@system.gserviceaccount.com before using
	// this feature otherwise an error is thrown.
	BigQuerySource *GoogleCloudRetailV2BigQuerySource `json:"bigQuerySource,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigQuerySource") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigQuerySource") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompletionDataInputConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompletionDataInputConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CompletionDetail: Detailed completion information
// including completion attribution token and clicked completion info.
type GoogleCloudRetailV2CompletionDetail struct {
	// CompletionAttributionToken: Completion attribution token in
	// CompleteQueryResponse.attribution_token.
	CompletionAttributionToken string `json:"completionAttributionToken,omitempty"`
	// SelectedPosition: End user selected
	// CompleteQueryResponse.CompletionResult.suggestion position, starting from 0.
	SelectedPosition int64 `json:"selectedPosition,omitempty"`
	// SelectedSuggestion: End user selected
	// CompleteQueryResponse.CompletionResult.suggestion.
	SelectedSuggestion string `json:"selectedSuggestion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CompletionAttributionToken")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CompletionAttributionToken") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CompletionDetail) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CompletionDetail
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Condition: Metadata that is used to define a condition
// that triggers an action. A valid condition must specify at least one of
// 'query_terms' or 'products_filter'. If multiple fields are specified, the
// condition is met if all the fields are satisfied e.g. if a set of query
// terms and product_filter are set, then only items matching the
// product_filter for requests with a query matching the query terms wil get
// boosted.
type GoogleCloudRetailV2Condition struct {
	// ActiveTimeRange: Range of time(s) specifying when Condition is active.
	// Condition true if any time range matches.
	ActiveTimeRange []*GoogleCloudRetailV2ConditionTimeRange `json:"activeTimeRange,omitempty"`
	// PageCategories: Used to support browse uses cases. A list (up to 10 entries)
	// of categories or departments. The format should be the same as
	// UserEvent.page_categories;
	PageCategories []string `json:"pageCategories,omitempty"`
	// QueryTerms: A list (up to 10 entries) of terms to match the query on. If not
	// specified, match all queries. If many query terms are specified, the
	// condition is matched if any of the terms is a match (i.e. using the OR
	// operator).
	QueryTerms []*GoogleCloudRetailV2ConditionQueryTerm `json:"queryTerms,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ActiveTimeRange") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ActiveTimeRange") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Condition) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Condition
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConditionQueryTerm: Query terms that we want to match on.
type GoogleCloudRetailV2ConditionQueryTerm struct {
	// FullMatch: Whether this is supposed to be a full or partial match.
	FullMatch bool `json:"fullMatch,omitempty"`
	// Value: The value of the term to match on. Value cannot be empty. Value can
	// have at most 3 terms if specified as a partial match. Each space separated
	// string is considered as one term. For example, "a b c" is 3 terms and
	// allowed, but " a b c d" is 4 terms and not allowed for a partial match.
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FullMatch") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FullMatch") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConditionQueryTerm) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConditionQueryTerm
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConditionTimeRange: Used for time-dependent conditions.
// Example: Want to have rule applied for week long sale.
type GoogleCloudRetailV2ConditionTimeRange struct {
	// EndTime: End of time range. Range is inclusive.
	EndTime string `json:"endTime,omitempty"`
	// StartTime: Start of time range. Range is inclusive.
	StartTime string `json:"startTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EndTime") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EndTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConditionTimeRange) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConditionTimeRange
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Control: Configures dynamic metadata that can be linked
// to a ServingConfig and affect search or recommendation results at serving
// time.
type GoogleCloudRetailV2Control struct {
	// AssociatedServingConfigIds: Output only. List of serving config ids that are
	// associated with this control in the same Catalog. Note the association is
	// managed via the ServingConfig, this is an output only denormalized view.
	AssociatedServingConfigIds []string `json:"associatedServingConfigIds,omitempty"`
	// DisplayName: Required. The human readable control display name. Used in
	// Retail UI. This field must be a UTF-8 encoded string with a length limit of
	// 128 characters. Otherwise, an INVALID_ARGUMENT error is thrown.
	DisplayName string `json:"displayName,omitempty"`
	// Name: Immutable. Fully qualified name
	// `projects/*/locations/global/catalogs/*/controls/*`
	Name string `json:"name,omitempty"`
	// Rule: A rule control - a condition-action pair. Enacts a set action when the
	// condition is triggered. For example: Boost "gShoe" when query full matches
	// "Running Shoes".
	Rule *GoogleCloudRetailV2Rule `json:"rule,omitempty"`
	// SearchSolutionUseCase: Specifies the use case for the control. Affects what
	// condition fields can be set. Only settable by search controls. Will default
	// to SEARCH_SOLUTION_USE_CASE_SEARCH if not specified. Currently only allow
	// one search_solution_use_case per control.
	//
	// Possible values:
	//   "SEARCH_SOLUTION_USE_CASE_UNSPECIFIED" - The value when it's unspecified.
	// In this case, server behavior defaults to SEARCH_SOLUTION_USE_CASE_SEARCH.
	//   "SEARCH_SOLUTION_USE_CASE_SEARCH" - Search use case. Expects the traffic
	// has a non-empty query.
	//   "SEARCH_SOLUTION_USE_CASE_BROWSE" - Browse use case. Expects the traffic
	// has an empty query.
	SearchSolutionUseCase []string `json:"searchSolutionUseCase,omitempty"`
	// SolutionTypes: Required. Immutable. The solution types that the control is
	// used for. Currently we support setting only one type of solution at creation
	// time. Only `SOLUTION_TYPE_SEARCH` value is supported at the moment. If no
	// solution type is provided at creation time, will default to
	// SOLUTION_TYPE_SEARCH.
	//
	// Possible values:
	//   "SOLUTION_TYPE_UNSPECIFIED" - Default value.
	//   "SOLUTION_TYPE_RECOMMENDATION" - Used for Recommendations AI.
	//   "SOLUTION_TYPE_SEARCH" - Used for Retail Search.
	SolutionTypes []string `json:"solutionTypes,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AssociatedServingConfigIds")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AssociatedServingConfigIds") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Control) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Control
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchCustomizationConfig: The public proto
// to represent the conversational search customization config. It will be
// converted to the internal proto in the backend.
type GoogleCloudRetailV2ConversationalSearchCustomizationConfig struct {
	// Catalog: Required. Resource name of the catalog. Format:
	// projects/{project}/locations/{location}/catalogs/{catalog}
	Catalog string `json:"catalog,omitempty"`
	// IntentClassificationConfig: Optional. The configs for intent classification.
	IntentClassificationConfig *GoogleCloudRetailV2IntentClassificationConfig `json:"intentClassificationConfig,omitempty"`
	// RetailerDisplayName: Optional. The retailer's display name that could be
	// used in our LLM answers. Example - "Google"
	RetailerDisplayName string `json:"retailerDisplayName,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Catalog") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Catalog") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchCustomizationConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchCustomizationConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchRequest: Request message for
// ConversationalSearchService.ConversationalSearch method.
type GoogleCloudRetailV2ConversationalSearchRequest struct {
	// Branch: Required. The branch resource name, such as
	// `projects/*/locations/global/catalogs/default_catalog/branches/0`. Use
	// "default_branch" as the branch ID or leave this field empty, to search
	// products under the default branch.
	Branch string `json:"branch,omitempty"`
	// ConversationId: Optional. This field specifies the conversation id, which
	// maintains the state of the conversation between client side and server side.
	// Use the value from the previous
	// ConversationalSearchResponse.conversation_id. For the initial request, this
	// should be empty.
	ConversationId string `json:"conversationId,omitempty"`
	// ConversationalFilteringSpec: Optional. This field specifies all
	// conversational filtering related parameters.
	ConversationalFilteringSpec *GoogleCloudRetailV2ConversationalSearchRequestConversationalFilteringSpec `json:"conversationalFilteringSpec,omitempty"`
	// PageCategories: Optional. The categories associated with a category page.
	// Must be set for category navigation queries to achieve good search quality.
	// The format should be the same as UserEvent.page_categories; To represent the
	// full path of category, use the '>' sign, with one space on each side, to
	// separate different hierarchies. If '>' is part of the category name, replace
	// it with other character(s). Category pages include special pages such as
	// sales or promotions. For instance, a special sale page may have the category
	// hierarchy: "pageCategories" : ["Sales > 2017 Black Friday Deals"].
	PageCategories []string `json:"pageCategories,omitempty"`
	// Query: Optional. Raw search query to be searched for. If this field is
	// empty, the request is considered a category browsing request.
	Query string `json:"query,omitempty"`
	// SafetySettings: Optional. The safety settings to be applied to the generated
	// content.
	SafetySettings []*GoogleCloudRetailV2SafetySetting `json:"safetySettings,omitempty"`
	// SearchParams: Optional. Search parameters.
	SearchParams *GoogleCloudRetailV2ConversationalSearchRequestSearchParams `json:"searchParams,omitempty"`
	// UserInfo: Optional. User information.
	UserInfo *GoogleCloudRetailV2UserInfo `json:"userInfo,omitempty"`
	// UserLabels: Optional. The user labels applied to a resource must meet the
	// following requirements: * Each resource can have multiple labels, up to a
	// maximum of 64. * Each label must be a key-value pair. * Keys have a minimum
	// length of 1 character and a maximum length of 63 characters and cannot be
	// empty. Values can be empty and have a maximum length of 63 characters. *
	// Keys and values can contain only lowercase letters, numeric characters,
	// underscores, and dashes. All characters must use UTF-8 encoding, and
	// international characters are allowed. * The key portion of a label must be
	// unique. However, you can use the same key with multiple resources. * Keys
	// must start with a lowercase letter or international character. See Google
	// Cloud Document
	// (https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
	// for more details.
	UserLabels map[string]string `json:"userLabels,omitempty"`
	// VisitorId: Required. A unique identifier for tracking visitors. For example,
	// this could be implemented with an HTTP cookie, which should be able to
	// uniquely identify a visitor on a single device. This unique identifier
	// should not change if the visitor logs in or out of the website. This should
	// be the same identifier as UserEvent.visitor_id. The field must be a UTF-8
	// encoded string with a length limit of 128 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	VisitorId string `json:"visitorId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Branch") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Branch") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchRequestConversationalFilteringSpec:
// This field specifies all conversational filtering related parameters
// addition to conversational retail search.
type GoogleCloudRetailV2ConversationalSearchRequestConversationalFilteringSpec struct {
	// ConversationalFilteringMode: Optional. Mode to control Conversational
	// Filtering. Defaults to Mode.DISABLED if it's unset.
	//
	// Possible values:
	//   "MODE_UNSPECIFIED" - Default value.
	//   "DISABLED" - Disables Conversational Filtering when using Conversational
	// Search.
	//   "ENABLED" - Enables Conversational Filtering when using Conversational
	// Search.
	//   "CONVERSATIONAL_FILTER_ONLY" - Enables Conversational Filtering without
	// Conversational Search.
	ConversationalFilteringMode string `json:"conversationalFilteringMode,omitempty"`
	// EnableConversationalFiltering: Optional. This field is deprecated. Please
	// use ConversationalFilteringSpec.conversational_filtering_mode instead.
	EnableConversationalFiltering bool `json:"enableConversationalFiltering,omitempty"`
	// UserAnswer: Optional. This field specifies the current user answer during
	// the conversational filtering search. It can be either user selected from
	// suggested answers or user input plain text.
	UserAnswer *GoogleCloudRetailV2ConversationalSearchRequestUserAnswer `json:"userAnswer,omitempty"`
	// ForceSendFields is a list of field names (e.g.
	// "ConversationalFilteringMode") to unconditionally include in API requests.
	// By default, fields with empty or default values are omitted from API
	// requests. See https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields
	// for more details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ConversationalFilteringMode") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchRequestConversationalFilteringSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchRequestConversationalFilteringSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchRequestSearchParams: Search
// parameters.
type GoogleCloudRetailV2ConversationalSearchRequestSearchParams struct {
	// BoostSpec: Optional. The boost spec to specify the boosting of search
	// results. The syntax of the boost spec is the same as
	// SearchRequest.boost_spec.
	BoostSpec *GoogleCloudRetailV2SearchRequestBoostSpec `json:"boostSpec,omitempty"`
	// CanonicalFilter: Optional. The canonical filter string to restrict search
	// results. The syntax of the canonical filter string is the same as
	// SearchRequest.canonical_filter.
	CanonicalFilter string `json:"canonicalFilter,omitempty"`
	// Filter: Optional. The filter string to restrict search results. The syntax
	// of the filter string is the same as SearchRequest.filter.
	Filter string `json:"filter,omitempty"`
	// SortBy: Optional. The sort string to specify the sorting of search results.
	// The syntax of the sort string is the same as SearchRequest.order_by.
	SortBy string `json:"sortBy,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoostSpec") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoostSpec") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchRequestSearchParams) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchRequestSearchParams
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchRequestUserAnswer: This field
// specifies the current user answer during the conversational filtering
// search. This can be either user selected from suggested answers or user
// input plain text.
type GoogleCloudRetailV2ConversationalSearchRequestUserAnswer struct {
	// SelectedAnswer: Optional. This field specifies the selected answer during
	// the conversational search. This should be a subset of
	// ConversationalSearchResponse.FollowupQuestion.SuggestedAnswer.
	SelectedAnswer *GoogleCloudRetailV2ConversationalSearchRequestUserAnswerSelectedAnswer `json:"selectedAnswer,omitempty"`
	// TextAnswer: This field specifies the incremental input text from the user
	// during the conversational search.
	TextAnswer string `json:"textAnswer,omitempty"`
	// ForceSendFields is a list of field names (e.g. "SelectedAnswer") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "SelectedAnswer") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchRequestUserAnswer) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchRequestUserAnswer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchRequestUserAnswerSelectedAnswer: This
// field specifies the selected answers during the conversational search.
type GoogleCloudRetailV2ConversationalSearchRequestUserAnswerSelectedAnswer struct {
	// ProductAttributeValue: Optional. This field specifies the selected answer
	// which is a attribute key-value.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeValue") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchRequestUserAnswerSelectedAnswer) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchRequestUserAnswerSelectedAnswer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchResponse: Response message for
// ConversationalSearchService.ConversationalSearch method.
type GoogleCloudRetailV2ConversationalSearchResponse struct {
	// ConversationId: Conversation UUID. This field will be stored in client side
	// storage to maintain the conversation session with server and will be used
	// for next search request's ConversationalSearchRequest.conversation_id to
	// restore conversation state in server.
	ConversationId string `json:"conversationId,omitempty"`
	// ConversationalFilteringResult: This field specifies all related information
	// that is needed on client side for UI rendering of conversational filtering
	// search.
	ConversationalFilteringResult *GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResult `json:"conversationalFilteringResult,omitempty"`
	// ConversationalTextResponse: The conversational answer-based text response
	// generated by the Server.
	ConversationalTextResponse string `json:"conversationalTextResponse,omitempty"`
	// FollowupQuestion: The conversational followup question generated for Intent
	// refinement.
	FollowupQuestion *GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestion `json:"followupQuestion,omitempty"`
	// RefinedSearch: The proposed refined search queries. They can be used to
	// fetch the relevant search results. When using CONVERSATIONAL_FILTER_ONLY
	// mode, the refined_query from search response will be populated here.
	RefinedSearch []*GoogleCloudRetailV2ConversationalSearchResponseRefinedSearch `json:"refinedSearch,omitempty"`
	// State: Output only. The state of the response generation.
	//
	// Possible values:
	//   "STATE_UNSPECIFIED" - Unknown.
	//   "STREAMING" - Response generation is being streamed.
	//   "SUCCEEDED" - Response generation has succeeded.
	State string `json:"state,omitempty"`
	// UserQueryTypes: The types Retail classifies the search query as. Supported
	// values are: - "ORDER_SUPPORT" - "SIMPLE_PRODUCT_SEARCH" -
	// "INTENT_REFINEMENT" - "PRODUCT_DETAILS" - "PRODUCT_COMPARISON" -
	// "DEALS_AND_COUPONS" - "STORE_RELEVANT" - "BLOCKLISTED" - "BEST_PRODUCT" -
	// "RETAIL_SUPPORT" - "DISABLED"
	UserQueryTypes []string `json:"userQueryTypes,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ConversationId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ConversationId") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResult:
//
//	This field specifies all related information that is needed on client side
//
// for UI rendering of conversational filtering search.
type GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResult struct {
	// AdditionalFilter: This is the incremental additional filters implied from
	// the current user answer. User should add the suggested addition filters to
	// the previous ConversationalSearchRequest.SearchParams.filter and
	// SearchRequest.filter, and use the merged filter in the follow up requests.
	AdditionalFilter *GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResultAdditionalFilter `json:"additionalFilter,omitempty"`
	// FollowupQuestion: The conversational filtering question.
	FollowupQuestion *GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestion `json:"followupQuestion,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AdditionalFilter") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AdditionalFilter") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResultA
// dditionalFilter: Additional filter that client side need to apply.
type GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResultAdditionalFilter struct {
	// ProductAttributeValue: Product attribute value, including an attribute key
	// and an attribute value. Other types can be added here in the future.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeValue") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResultAdditionalFilter) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchResponseConversationalFilteringResultAdditionalFilter
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestion: The
// conversational followup question generated for Intent refinement.
type GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestion struct {
	// FollowupQuestion: The conversational followup question generated for Intent
	// refinement.
	FollowupQuestion string `json:"followupQuestion,omitempty"`
	// SuggestedAnswers: The answer options provided to client for the follow-up
	// question.
	SuggestedAnswers []*GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestionSuggestedAnswer `json:"suggestedAnswers,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FollowupQuestion") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FollowupQuestion") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestion) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestion
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestionSuggestedAnswe
// r: Suggested answers to the follow-up question. If it's numerical attribute,
// only ProductAttributeInterval will be set. If it's textual attribute, only
// productAttributeValue will be set.
type GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestionSuggestedAnswer struct {
	// ProductAttributeValue: Product attribute value, including an attribute key
	// and an attribute value. Other types can be added here in the future.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeValue") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestionSuggestedAnswer) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchResponseFollowupQuestionSuggestedAnswer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ConversationalSearchResponseRefinedSearch: The proposed
// refined search for intent-refinement/bundled shopping conversation. When
// using CONVERSATIONAL_FILTER_ONLY mode, the refined_query from search
// response will be populated here.
type GoogleCloudRetailV2ConversationalSearchResponseRefinedSearch struct {
	// Query: The query to be used for search.
	Query string `json:"query,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Query") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Query") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ConversationalSearchResponseRefinedSearch) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ConversationalSearchResponseRefinedSearch
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CreateModelMetadata: Metadata associated with a create
// operation.
type GoogleCloudRetailV2CreateModelMetadata struct {
	// Model: The resource name of the model that this create applies to. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}`
	Model string `json:"model,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Model") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Model") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CreateModelMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CreateModelMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2CustomAttribute: A custom attribute that is not
// explicitly modeled in Product.
type GoogleCloudRetailV2CustomAttribute struct {
	// Indexable: This field is normally ignored unless
	// AttributesConfig.attribute_config_level of the Catalog is set to the
	// deprecated 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode. For information about
	// product-level attribute configuration, see Configuration modes
	// (https://cloud.google.com/retail/docs/attribute-config#config-modes). If
	// true, custom attribute values are indexed, so that they can be filtered,
	// faceted or boosted in SearchService.Search. This field is ignored in a
	// UserEvent. See SearchRequest.filter, SearchRequest.facet_specs and
	// SearchRequest.boost_spec for more details.
	Indexable bool `json:"indexable,omitempty"`
	// Numbers: The numerical values of this custom attribute. For example, `[2.3,
	// 15.4]` when the key is "lengths_cm". Exactly one of text or numbers should
	// be set. Otherwise, an INVALID_ARGUMENT error is returned.
	Numbers []float64 `json:"numbers,omitempty"`
	// Searchable: This field is normally ignored unless
	// AttributesConfig.attribute_config_level of the Catalog is set to the
	// deprecated 'PRODUCT_LEVEL_ATTRIBUTE_CONFIG' mode. For information about
	// product-level attribute configuration, see Configuration modes
	// (https://cloud.google.com/retail/docs/attribute-config#config-modes). If
	// true, custom attribute values are searchable by text queries in
	// SearchService.Search. This field is ignored in a UserEvent. Only set if type
	// text is set. Otherwise, a INVALID_ARGUMENT error is returned.
	Searchable bool `json:"searchable,omitempty"`
	// Text: The textual values of this custom attribute. For example, `["yellow",
	// "green"]` when the key is "color". Empty string is not allowed. Otherwise,
	// an INVALID_ARGUMENT error is returned. Exactly one of text or numbers should
	// be set. Otherwise, an INVALID_ARGUMENT error is returned.
	Text []string `json:"text,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Indexable") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Indexable") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2CustomAttribute) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2CustomAttribute
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2CustomAttribute) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2CustomAttribute
	var s1 struct {
		Numbers []gensupport.JSONFloat64 `json:"numbers"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Numbers = make([]float64, len(s1.Numbers))
	for i := range s1.Numbers {
		s.Numbers[i] = float64(s1.Numbers[i])
	}
	return nil
}

// GoogleCloudRetailV2DoubleList: A message with a list of double values.
type GoogleCloudRetailV2DoubleList struct {
	// Values: The list of double values.
	Values []float64 `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Values") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Values") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2DoubleList) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2DoubleList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2DoubleList) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2DoubleList
	var s1 struct {
		Values []gensupport.JSONFloat64 `json:"values"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Values = make([]float64, len(s1.Values))
	for i := range s1.Values {
		s.Values[i] = float64(s1.Values[i])
	}
	return nil
}

// GoogleCloudRetailV2ExperimentInfo: Metadata for active A/B testing
// experiment.
type GoogleCloudRetailV2ExperimentInfo struct {
	// Experiment: The fully qualified resource name of the experiment that
	// provides the serving config under test, should an active experiment exist.
	// For example:
	// `projects/*/locations/global/catalogs/default_catalog/experiments/experiment_
	// id`
	Experiment string `json:"experiment,omitempty"`
	// ServingConfigExperiment: A/B test between existing Cloud Retail Search
	// ServingConfigs.
	ServingConfigExperiment *GoogleCloudRetailV2ExperimentInfoServingConfigExperiment `json:"servingConfigExperiment,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Experiment") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Experiment") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ExperimentInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ExperimentInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ExperimentInfoServingConfigExperiment: Metadata for
// active serving config A/B tests.
type GoogleCloudRetailV2ExperimentInfoServingConfigExperiment struct {
	// ExperimentServingConfig: The fully qualified resource name of the serving
	// config `Experiment.VariantArm.serving_config_id` responsible for generating
	// the search response. For example:
	// `projects/*/locations/*/catalogs/*/servingConfigs/*`.
	ExperimentServingConfig string `json:"experimentServingConfig,omitempty"`
	// OriginalServingConfig: The fully qualified resource name of the original
	// SearchRequest.placement in the search request prior to reassignment by
	// experiment API. For example:
	// `projects/*/locations/*/catalogs/*/servingConfigs/*`.
	OriginalServingConfig string `json:"originalServingConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExperimentServingConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExperimentServingConfig") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ExperimentInfoServingConfigExperiment) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ExperimentInfoServingConfigExperiment
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ExportAnalyticsMetricsRequest: Request message for the
// `ExportAnalyticsMetrics` method.
type GoogleCloudRetailV2ExportAnalyticsMetricsRequest struct {
	// Filter: A filtering expression to specify restrictions on returned metrics.
	// The expression is a sequence of terms. Each term applies a restriction to
	// the returned metrics. Use this expression to restrict results to a specific
	// time range. Currently we expect only one types of fields: * `timestamp`:
	// This can be specified twice, once with a less than operator and once with a
	// greater than operator. The `timestamp` restriction should result in one,
	// contiguous, valid, `timestamp` range. Some examples of valid filters
	// expressions: * Example 1: `timestamp > "2012-04-23T18:25:43.511Z" timestamp
	// < "2012-04-23T18:30:43.511Z" * Example 2: `timestamp >
	// "2012-04-23T18:25:43.511Z"
	Filter string `json:"filter,omitempty"`
	// OutputConfig: Required. The output location of the data. Only
	// `bigquery_destination` is supported, and `bigquery_destination.table_type`
	// must be set to `view`.
	OutputConfig *GoogleCloudRetailV2OutputConfig `json:"outputConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Filter") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ExportAnalyticsMetricsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ExportAnalyticsMetricsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ExportAnalyticsMetricsResponse: Response of the
// ExportAnalyticsMetricsRequest. If the long running operation was successful,
// then this message is returned by the google.longrunning.Operations.response
// field if the operation was successful.
type GoogleCloudRetailV2ExportAnalyticsMetricsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2ExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2OutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ExportAnalyticsMetricsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ExportAnalyticsMetricsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ExportErrorsConfig: Configuration of destination for
// Export related errors.
type GoogleCloudRetailV2ExportErrorsConfig struct {
	// GcsPrefix: Google Cloud Storage path for import errors. This must be an
	// empty, existing Cloud Storage bucket. Export errors will be written to a
	// file in this bucket, one per line, as a JSON-encoded `google.rpc.Status`
	// message.
	GcsPrefix string `json:"gcsPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPrefix") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ExportErrorsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ExportErrorsConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ExportMetadata: Metadata related to the progress of the
// Export operation. This is returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2ExportMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ExportMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ExportMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2FulfillmentInfo: Fulfillment information, such as the
// store IDs for in-store pickup or region IDs for different shipping methods.
type GoogleCloudRetailV2FulfillmentInfo struct {
	// PlaceIds: The IDs for this type, such as the store IDs for
	// FulfillmentInfo.type.pickup-in-store or the region IDs for
	// FulfillmentInfo.type.same-day-delivery. A maximum of 3000 values are
	// allowed. Each value must be a string with a length limit of 30 characters,
	// matching the pattern `[a-zA-Z0-9_-]+`, such as "store1" or "REGION-2".
	// Otherwise, an INVALID_ARGUMENT error is returned.
	PlaceIds []string `json:"placeIds,omitempty"`
	// Type: The fulfillment type, including commonly used types (such as pickup in
	// store and same day delivery), and custom types. Customers have to map custom
	// types to their display names before rendering UI. Supported values: *
	// "pickup-in-store" * "ship-to-store" * "same-day-delivery" *
	// "next-day-delivery" * "custom-type-1" * "custom-type-2" * "custom-type-3" *
	// "custom-type-4" * "custom-type-5" If this field is set to an invalid value
	// other than these, an INVALID_ARGUMENT error is returned.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PlaceIds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PlaceIds") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2FulfillmentInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2FulfillmentInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2GcsOutputResult: A Gcs output result.
type GoogleCloudRetailV2GcsOutputResult struct {
	// OutputUri: The uri of Gcs output
	OutputUri string `json:"outputUri,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OutputUri") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OutputUri") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2GcsOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2GcsOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2GcsSource: Google Cloud Storage location for input
// content.
type GoogleCloudRetailV2GcsSource struct {
	// DataSchema: The schema to use when parsing the data from the source.
	// Supported values for product imports: * `product` (default): One JSON
	// Product per line. Each product must have a valid Product.id. *
	// `product_merchant_center`: See Importing catalog data from Merchant Center
	// (https://cloud.google.com/retail/recommendations-ai/docs/upload-catalog#mc).
	// Supported values for user events imports: * `user_event` (default): One JSON
	// UserEvent per line. * `user_event_ga360`: Using
	// https://support.google.com/analytics/answer/3437719. Supported values for
	// control imports: * `control` (default): One JSON Control per line. Supported
	// values for catalog attribute imports: * `catalog_attribute` (default): One
	// CSV CatalogAttribute per line.
	DataSchema string `json:"dataSchema,omitempty"`
	// InputUris: Required. Google Cloud Storage URIs to input files. URI can be up
	// to 2000 characters long. URIs can match the full object path (for example,
	// `gs://bucket/directory/object.json`) or a pattern matching one or more
	// files, such as `gs://bucket/directory/*.json`. A request can contain at most
	// 100 files, and each file can be up to 2 GB. See Importing product
	// information
	// (https://cloud.google.com/retail/recommendations-ai/docs/upload-catalog) for
	// the expected file format and setup instructions.
	InputUris []string `json:"inputUris,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DataSchema") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DataSchema") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2GcsSource) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2GcsSource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2GenerativeQuestionConfig: Configuration for a single
// generated question.
type GoogleCloudRetailV2GenerativeQuestionConfig struct {
	// AllowedInConversation: Optional. Whether the question is asked at serving
	// time.
	AllowedInConversation bool `json:"allowedInConversation,omitempty"`
	// Catalog: Required. Resource name of the catalog. Format:
	// projects/{project}/locations/{location}/catalogs/{catalog}
	Catalog string `json:"catalog,omitempty"`
	// ExampleValues: Output only. Values that can be used to answer the question.
	ExampleValues []string `json:"exampleValues,omitempty"`
	// Facet: Required. The facet to which the question is associated.
	Facet string `json:"facet,omitempty"`
	// FinalQuestion: Optional. The question that will be used at serving time.
	// Question can have a max length of 300 bytes. When not populated,
	// generated_question should be used.
	FinalQuestion string `json:"finalQuestion,omitempty"`
	// Frequency: Output only. The ratio of how often a question was asked.
	Frequency float64 `json:"frequency,omitempty"`
	// GeneratedQuestion: Output only. The LLM generated question.
	GeneratedQuestion string `json:"generatedQuestion,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AllowedInConversation") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AllowedInConversation") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2GenerativeQuestionConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2GenerativeQuestionConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2GenerativeQuestionConfig) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2GenerativeQuestionConfig
	var s1 struct {
		Frequency gensupport.JSONFloat64 `json:"frequency"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Frequency = float64(s1.Frequency)
	return nil
}

// GoogleCloudRetailV2GenerativeQuestionsFeatureConfig: Configuration for
// overall generative question feature state.
type GoogleCloudRetailV2GenerativeQuestionsFeatureConfig struct {
	// Catalog: Required. Resource name of the affected catalog. Format:
	// projects/{project}/locations/{location}/catalogs/{catalog}
	Catalog string `json:"catalog,omitempty"`
	// FeatureEnabled: Optional. Determines whether questions will be used at
	// serving time. Note: This feature cannot be enabled until initial data
	// requirements are satisfied.
	FeatureEnabled bool `json:"featureEnabled,omitempty"`
	// MinimumProducts: Optional. Minimum number of products in the response to
	// trigger follow-up questions. Value must be 0 or positive.
	MinimumProducts int64 `json:"minimumProducts,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Catalog") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Catalog") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2GenerativeQuestionsFeatureConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2GenerativeQuestionsFeatureConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2GetDefaultBranchResponse: Response message of
// CatalogService.GetDefaultBranch.
type GoogleCloudRetailV2GetDefaultBranchResponse struct {
	// Branch: Full resource name of the branch id currently set as default branch.
	Branch string `json:"branch,omitempty"`
	// Note: This corresponds to SetDefaultBranchRequest.note field, when this
	// branch was set as default.
	Note string `json:"note,omitempty"`
	// SetTime: The time when this branch is set to default.
	SetTime string `json:"setTime,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Branch") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Branch") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2GetDefaultBranchResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2GetDefaultBranchResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Image: Product image. Recommendations AI and Retail
// Search use product images to improve prediction and search results. Product
// images can be returned in results, and are shown in prediction or search
// previews in the console. Please try to provide correct product images and
// avoid using images with size too small.
type GoogleCloudRetailV2Image struct {
	// Height: Height of the image in number of pixels. This field must be
	// nonnegative. Otherwise, an INVALID_ARGUMENT error is returned.
	Height int64 `json:"height,omitempty"`
	// Uri: Required. URI of the image. This field must be a valid UTF-8 encoded
	// URI with a length limit of 5,000 characters. Otherwise, an INVALID_ARGUMENT
	// error is returned. Google Merchant Center property image_link
	// (https://support.google.com/merchants/answer/6324350). Schema.org property
	// Product.image (https://schema.org/image).
	Uri string `json:"uri,omitempty"`
	// Width: Width of the image in number of pixels. This field must be
	// nonnegative. Otherwise, an INVALID_ARGUMENT error is returned.
	Width int64 `json:"width,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Height") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Height") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Image) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Image
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportCompletionDataRequest: Request message for
// ImportCompletionData methods.
type GoogleCloudRetailV2ImportCompletionDataRequest struct {
	// InputConfig: Required. The desired input location of the data.
	InputConfig *GoogleCloudRetailV2CompletionDataInputConfig `json:"inputConfig,omitempty"`
	// NotificationPubsubTopic: Pub/Sub topic for receiving notification. If this
	// field is set, when the import is finished, a notification is sent to
	// specified Pub/Sub topic. The message data is JSON string of a Operation.
	// Format of the Pub/Sub topic is `projects/{project}/topics/{topic}`.
	NotificationPubsubTopic string `json:"notificationPubsubTopic,omitempty"`
	// ForceSendFields is a list of field names (e.g. "InputConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "InputConfig") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportCompletionDataRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportCompletionDataRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportCompletionDataResponse: Response of the
// ImportCompletionDataRequest. If the long running operation is done, this
// message is returned by the google.longrunning.Operations.response field if
// the operation is successful.
type GoogleCloudRetailV2ImportCompletionDataResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportCompletionDataResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportCompletionDataResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportErrorsConfig: Configuration of destination for
// Import related errors.
type GoogleCloudRetailV2ImportErrorsConfig struct {
	// GcsPrefix: Google Cloud Storage prefix for import errors. This must be an
	// empty, existing Cloud Storage directory. Import errors are written to
	// sharded files in this directory, one per line, as a JSON-encoded
	// `google.rpc.Status` message.
	GcsPrefix string `json:"gcsPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPrefix") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportErrorsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportErrorsConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportMetadata: Metadata related to the progress of the
// Import operation. This is returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2ImportMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// FailureCount: Count of entries that encountered errors while processing.
	FailureCount int64 `json:"failureCount,omitempty,string"`
	// NotificationPubsubTopic: Pub/Sub topic for receiving notification. If this
	// field is set, when the import is finished, a notification is sent to
	// specified Pub/Sub topic. The message data is JSON string of a Operation.
	// Format of the Pub/Sub topic is `projects/{project}/topics/{topic}`.
	NotificationPubsubTopic string `json:"notificationPubsubTopic,omitempty"`
	// RequestId: Deprecated. This field is never set.
	RequestId string `json:"requestId,omitempty"`
	// SuccessCount: Count of entries that were processed successfully.
	SuccessCount int64 `json:"successCount,omitempty,string"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportProductsRequest: Request message for Import
// methods.
type GoogleCloudRetailV2ImportProductsRequest struct {
	// ErrorsConfig: The desired location of errors incurred during the Import.
	ErrorsConfig *GoogleCloudRetailV2ImportErrorsConfig `json:"errorsConfig,omitempty"`
	// InputConfig: Required. The desired input location of the data.
	InputConfig *GoogleCloudRetailV2ProductInputConfig `json:"inputConfig,omitempty"`
	// NotificationPubsubTopic: Full Pub/Sub topic name for receiving notification.
	// If this field is set, when the import is finished, a notification is sent to
	// specified Pub/Sub topic. The message data is JSON string of a Operation.
	// Format of the Pub/Sub topic is `projects/{project}/topics/{topic}`. It has
	// to be within the same project as ImportProductsRequest.parent. Make sure
	// that both `cloud-retail-customer-data-access@system.gserviceaccount.com` and
	// `service-@gcp-sa-retail.iam.gserviceaccount.com` have the
	// `pubsub.topics.publish` IAM permission on the topic. Only supported when
	// ImportProductsRequest.reconciliation_mode is set to `FULL`.
	NotificationPubsubTopic string `json:"notificationPubsubTopic,omitempty"`
	// ReconciliationMode: The mode of reconciliation between existing products and
	// the products to be imported. Defaults to ReconciliationMode.INCREMENTAL.
	//
	// Possible values:
	//   "RECONCILIATION_MODE_UNSPECIFIED" - Defaults to INCREMENTAL.
	//   "INCREMENTAL" - Inserts new products or updates existing products.
	//   "FULL" - Calculates diff and replaces the entire product dataset. Existing
	// products may be deleted if they are not present in the source location.
	ReconciliationMode string `json:"reconciliationMode,omitempty"`
	// RequestId: Deprecated. This field has no effect.
	RequestId string `json:"requestId,omitempty"`
	// UpdateMask: Indicates which fields in the provided imported `products` to
	// update. If not set, all fields are updated. If provided, only the existing
	// product fields are updated. Missing products will not be created.
	UpdateMask string `json:"updateMask,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorsConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorsConfig") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportProductsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportProductsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportProductsResponse: Response of the
// ImportProductsRequest. If the long running operation is done, then this
// message is returned by the google.longrunning.Operations.response field if
// the operation was successful.
type GoogleCloudRetailV2ImportProductsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: Echoes the destination for the complete errors in the request
	// if set.
	ErrorsConfig *GoogleCloudRetailV2ImportErrorsConfig `json:"errorsConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportUserEventsRequest: Request message for the
// ImportUserEvents request.
type GoogleCloudRetailV2ImportUserEventsRequest struct {
	// ErrorsConfig: The desired location of errors incurred during the Import.
	// Cannot be set for inline user event imports.
	ErrorsConfig *GoogleCloudRetailV2ImportErrorsConfig `json:"errorsConfig,omitempty"`
	// InputConfig: Required. The desired input location of the data.
	InputConfig *GoogleCloudRetailV2UserEventInputConfig `json:"inputConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorsConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorsConfig") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportUserEventsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportUserEventsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ImportUserEventsResponse: Response of the
// ImportUserEventsRequest. If the long running operation was successful, then
// this message is returned by the google.longrunning.Operations.response field
// if the operation was successful.
type GoogleCloudRetailV2ImportUserEventsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: Echoes the destination for the complete errors if this field
	// was set in the request.
	ErrorsConfig *GoogleCloudRetailV2ImportErrorsConfig `json:"errorsConfig,omitempty"`
	// ImportSummary: Aggregated statistics of user event import status.
	ImportSummary *GoogleCloudRetailV2UserEventImportSummary `json:"importSummary,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ImportUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ImportUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2IntentClassificationConfig: The public proto to represent
// the intent classification config. It will be converted to the internal proto
// in the backend.
type GoogleCloudRetailV2IntentClassificationConfig struct {
	// BlocklistKeywords: Optional. A list of keywords that will be used to
	// classify the query to the "BLOCKLISTED" intent type. The keywords are case
	// insensitive.
	BlocklistKeywords []string `json:"blocklistKeywords,omitempty"`
	// DisabledIntentTypes: Optional. A list of intent types that will be disabled
	// for this customer. The intent types must match one of the predefined intent
	// types defined at
	// https://cloud.google.com/retail/docs/reference/rpc/google.cloud.retail.v2alpha#querytype
	DisabledIntentTypes []string `json:"disabledIntentTypes,omitempty"`
	// Example: Optional. A list of examples for intent classification.
	Example []*GoogleCloudRetailV2IntentClassificationConfigExample `json:"example,omitempty"`
	// InlineSource: Optional. Inline source for intent classifications.
	InlineSource *GoogleCloudRetailV2IntentClassificationConfigInlineSource `json:"inlineSource,omitempty"`
	// ModelPreamble: Optional. Customers can use the preamble to specify any
	// requirements for blocklisting intent classification. This preamble will be
	// added to the blocklisting intent classification model prompt.
	ModelPreamble string `json:"modelPreamble,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BlocklistKeywords") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BlocklistKeywords") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2IntentClassificationConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2IntentClassificationConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2IntentClassificationConfigExample: An example for intent
// classification.
type GoogleCloudRetailV2IntentClassificationConfigExample struct {
	// ClassifiedPositive: Required. Whether the example is classified positively.
	ClassifiedPositive bool `json:"classifiedPositive,omitempty"`
	// IntentType: Optional. The intent_type must match one of the predefined
	// intent types defined at
	// https://cloud.google.com/retail/docs/reference/rpc/google.cloud.retail.v2alpha#querytype
	IntentType string `json:"intentType,omitempty"`
	// Query: Required. Example query.
	Query string `json:"query,omitempty"`
	// Reason: Optional. The reason for the intent classification. This is used to
	// explain the intent classification decision.
	Reason string `json:"reason,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClassifiedPositive") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClassifiedPositive") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2IntentClassificationConfigExample) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2IntentClassificationConfigExample
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2IntentClassificationConfigInlineForceIntent: An inline
// force intent classification configuration.
type GoogleCloudRetailV2IntentClassificationConfigInlineForceIntent struct {
	// IntentType: Optional. The intent_type must match one of the predefined
	// intent types defined at
	// https://cloud.google.com/retail/docs/reference/rpc/google.cloud.retail.v2alpha#querytype
	IntentType string `json:"intentType,omitempty"`
	// Operation: Optional. The operation to perform for the query.
	//
	// Possible values:
	//   "OPERATION_UNSPECIFIED" - Unspecified match operation.
	//   "EXACT_MATCH" - Exact match.
	//   "CONTAINS" - Contains match.
	Operation string `json:"operation,omitempty"`
	// Query: Optional. A example query.
	Query string `json:"query,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IntentType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IntentType") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2IntentClassificationConfigInlineForceIntent) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2IntentClassificationConfigInlineForceIntent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2IntentClassificationConfigInlineSource: Inline source for
// intent classifications.
type GoogleCloudRetailV2IntentClassificationConfigInlineSource struct {
	// InlineForceIntents: Optional. A list of inline force intent classifications.
	InlineForceIntents []*GoogleCloudRetailV2IntentClassificationConfigInlineForceIntent `json:"inlineForceIntents,omitempty"`
	// ForceSendFields is a list of field names (e.g. "InlineForceIntents") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "InlineForceIntents") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2IntentClassificationConfigInlineSource) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2IntentClassificationConfigInlineSource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Interval: A floating point interval.
type GoogleCloudRetailV2Interval struct {
	// ExclusiveMaximum: Exclusive upper bound.
	ExclusiveMaximum float64 `json:"exclusiveMaximum,omitempty"`
	// ExclusiveMinimum: Exclusive lower bound.
	ExclusiveMinimum float64 `json:"exclusiveMinimum,omitempty"`
	// Maximum: Inclusive upper bound.
	Maximum float64 `json:"maximum,omitempty"`
	// Minimum: Inclusive lower bound.
	Minimum float64 `json:"minimum,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExclusiveMaximum") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExclusiveMaximum") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Interval) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Interval
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2Interval) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2Interval
	var s1 struct {
		ExclusiveMaximum gensupport.JSONFloat64 `json:"exclusiveMaximum"`
		ExclusiveMinimum gensupport.JSONFloat64 `json:"exclusiveMinimum"`
		Maximum          gensupport.JSONFloat64 `json:"maximum"`
		Minimum          gensupport.JSONFloat64 `json:"minimum"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.ExclusiveMaximum = float64(s1.ExclusiveMaximum)
	s.ExclusiveMinimum = float64(s1.ExclusiveMinimum)
	s.Maximum = float64(s1.Maximum)
	s.Minimum = float64(s1.Minimum)
	return nil
}

// GoogleCloudRetailV2ListCatalogsResponse: Response for
// CatalogService.ListCatalogs method.
type GoogleCloudRetailV2ListCatalogsResponse struct {
	// Catalogs: All the customer's Catalogs.
	Catalogs []*GoogleCloudRetailV2Catalog `json:"catalogs,omitempty"`
	// NextPageToken: A token that can be sent as ListCatalogsRequest.page_token to
	// retrieve the next page. If this field is omitted, there are no subsequent
	// pages.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Catalogs") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Catalogs") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ListCatalogsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ListCatalogsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ListControlsResponse: Response for ListControls method.
type GoogleCloudRetailV2ListControlsResponse struct {
	// Controls: All the Controls for a given catalog.
	Controls []*GoogleCloudRetailV2Control `json:"controls,omitempty"`
	// NextPageToken: Pagination token, if not returned indicates the last page.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Controls") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Controls") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ListControlsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ListControlsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse: Response for
// ListQuestions method.
type GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse struct {
	// GenerativeQuestionConfigs: All the questions for a given catalog.
	GenerativeQuestionConfigs []*GoogleCloudRetailV2GenerativeQuestionConfig `json:"generativeQuestionConfigs,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "GenerativeQuestionConfigs")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GenerativeQuestionConfigs") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ListModelsResponse: Response to a ListModelRequest.
type GoogleCloudRetailV2ListModelsResponse struct {
	// Models: List of Models.
	Models []*GoogleCloudRetailV2Model `json:"models,omitempty"`
	// NextPageToken: Pagination token, if not returned indicates the last page.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Models") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Models") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ListModelsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ListModelsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ListProductsResponse: Response message for
// ProductService.ListProducts method.
type GoogleCloudRetailV2ListProductsResponse struct {
	// NextPageToken: A token that can be sent as ListProductsRequest.page_token to
	// retrieve the next page. If this field is omitted, there are no subsequent
	// pages.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// Products: The Products.
	Products []*GoogleCloudRetailV2Product `json:"products,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ListProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ListProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ListServingConfigsResponse: Response for
// ListServingConfigs method.
type GoogleCloudRetailV2ListServingConfigsResponse struct {
	// NextPageToken: Pagination token, if not returned indicates the last page.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// ServingConfigs: All the ServingConfigs for a given catalog.
	ServingConfigs []*GoogleCloudRetailV2ServingConfig `json:"servingConfigs,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ListServingConfigsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ListServingConfigsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2LocalInventory: The inventory information at a place
// (e.g. a store) identified by a place ID.
type GoogleCloudRetailV2LocalInventory struct {
	// Attributes: Optional. Additional local inventory attributes, for example,
	// store name, promotion tags, etc. This field needs to pass all below
	// criteria, otherwise an INVALID_ARGUMENT error is returned: * At most 30
	// attributes are allowed. * The key must be a UTF-8 encoded string with a
	// length limit of 32 characters. * The key must match the pattern:
	// `a-zA-Z0-9*`. For example, key0LikeThis or KEY_1_LIKE_THIS. * The attribute
	// values must be of the same type (text or number). * Only 1 value is allowed
	// for each attribute. * For text values, the length limit is 256 UTF-8
	// characters. * The attribute does not support search. The `searchable` field
	// should be unset or set to false. * The max summed total bytes of custom
	// attribute keys and values per product is 5MiB.
	Attributes map[string]GoogleCloudRetailV2CustomAttribute `json:"attributes,omitempty"`
	// FulfillmentTypes: Optional. Supported fulfillment types. Valid fulfillment
	// type values include commonly used types (such as pickup in store and same
	// day delivery), and custom types. Customers have to map custom types to their
	// display names before rendering UI. Supported values: * "pickup-in-store" *
	// "ship-to-store" * "same-day-delivery" * "next-day-delivery" *
	// "custom-type-1" * "custom-type-2" * "custom-type-3" * "custom-type-4" *
	// "custom-type-5" If this field is set to an invalid value other than these,
	// an INVALID_ARGUMENT error is returned. All the elements must be distinct.
	// Otherwise, an INVALID_ARGUMENT error is returned.
	FulfillmentTypes []string `json:"fulfillmentTypes,omitempty"`
	// PlaceId: Optional. The place ID for the current set of inventory
	// information.
	PlaceId string `json:"placeId,omitempty"`
	// PriceInfo: Optional. Product price and cost information. Google Merchant
	// Center property price (https://support.google.com/merchants/answer/6324371).
	PriceInfo *GoogleCloudRetailV2PriceInfo `json:"priceInfo,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attributes") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Attributes") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2LocalInventory) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2LocalInventory
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Model: Metadata that describes the training and serving
// parameters of a Model. A Model can be associated with a ServingConfig and
// then queried through the Predict API.
type GoogleCloudRetailV2Model struct {
	// CreateTime: Output only. Timestamp the Recommendation Model was created at.
	CreateTime string `json:"createTime,omitempty"`
	// DataState: Output only. The state of data requirements for this model:
	// `DATA_OK` and `DATA_ERROR`. Recommendation model cannot be trained if the
	// data is in `DATA_ERROR` state. Recommendation model can have `DATA_ERROR`
	// state even if serving state is `ACTIVE`: models were trained successfully
	// before, but cannot be refreshed because model no longer has sufficient data
	// for training.
	//
	// Possible values:
	//   "DATA_STATE_UNSPECIFIED" - Unspecified default value, should never be
	// explicitly set.
	//   "DATA_OK" - The model has sufficient training data.
	//   "DATA_ERROR" - The model does not have sufficient training data. Error
	// messages can be queried via Stackdriver.
	DataState string `json:"dataState,omitempty"`
	// DisplayName: Required. The display name of the model. Should be human
	// readable, used to display Recommendation Models in the Retail Cloud Console
	// Dashboard. UTF-8 encoded string with limit of 1024 characters.
	DisplayName string `json:"displayName,omitempty"`
	// FilteringOption: Optional. If `RECOMMENDATIONS_FILTERING_ENABLED`,
	// recommendation filtering by attributes is enabled for the model.
	//
	// Possible values:
	//   "RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED" - Value used when unset. In
	// this case, server behavior defaults to RECOMMENDATIONS_FILTERING_DISABLED.
	//   "RECOMMENDATIONS_FILTERING_DISABLED" - Recommendation filtering is
	// disabled.
	//   "RECOMMENDATIONS_FILTERING_ENABLED" - Recommendation filtering is enabled.
	FilteringOption string `json:"filteringOption,omitempty"`
	// LastTuneTime: Output only. The timestamp when the latest successful tune
	// finished.
	LastTuneTime string `json:"lastTuneTime,omitempty"`
	// ModelFeaturesConfig: Optional. Additional model features config.
	ModelFeaturesConfig *GoogleCloudRetailV2ModelModelFeaturesConfig `json:"modelFeaturesConfig,omitempty"`
	// Name: Required. The fully qualified resource name of the model. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}` catalog_id has char limit of 50. recommendation_model_id has
	// char limit of 40.
	Name string `json:"name,omitempty"`
	// OptimizationObjective: Optional. The optimization objective e.g. `cvr`.
	// Currently supported values: `ctr`, `cvr`, `revenue-per-order`. If not
	// specified, we choose default based on model type. Default depends on type of
	// recommendation: `recommended-for-you` => `ctr` `others-you-may-like` =>
	// `ctr` `frequently-bought-together` => `revenue_per_order` This field
	// together with optimization_objective describe model metadata to use to
	// control model training and serving. See
	// https://cloud.google.com/retail/docs/models for more details on what the
	// model metadata control and which combination of parameters are valid. For
	// invalid combinations of parameters (e.g. type = `frequently-bought-together`
	// and optimization_objective = `ctr`), you receive an error 400 if you try to
	// create/update a recommendation with this set of knobs.
	OptimizationObjective string `json:"optimizationObjective,omitempty"`
	// PeriodicTuningState: Optional. The state of periodic tuning. The period we
	// use is 3 months - to do a one-off tune earlier use the `TuneModel` method.
	// Default value is `PERIODIC_TUNING_ENABLED`.
	//
	// Possible values:
	//   "PERIODIC_TUNING_STATE_UNSPECIFIED" - Unspecified default value, should
	// never be explicitly set.
	//   "PERIODIC_TUNING_DISABLED" - The model has periodic tuning disabled.
	// Tuning can be reenabled by calling the `EnableModelPeriodicTuning` method or
	// by calling the `TuneModel` method.
	//   "ALL_TUNING_DISABLED" - The model cannot be tuned with periodic tuning OR
	// the `TuneModel` method. Hide the options in customer UI and reject any
	// requests through the backend self serve API.
	//   "PERIODIC_TUNING_ENABLED" - The model has periodic tuning enabled. Tuning
	// can be disabled by calling the `DisableModelPeriodicTuning` method.
	PeriodicTuningState string `json:"periodicTuningState,omitempty"`
	// ServingConfigLists: Output only. The list of valid serving configs
	// associated with the PageOptimizationConfig.
	ServingConfigLists []*GoogleCloudRetailV2ModelServingConfigList `json:"servingConfigLists,omitempty"`
	// ServingState: Output only. The serving state of the model: `ACTIVE`,
	// `NOT_ACTIVE`.
	//
	// Possible values:
	//   "SERVING_STATE_UNSPECIFIED" - Unspecified serving state.
	//   "INACTIVE" - The model is not serving.
	//   "ACTIVE" - The model is serving and can be queried.
	//   "TUNED" - The model is trained on tuned hyperparameters and can be
	// queried.
	ServingState string `json:"servingState,omitempty"`
	// TrainingState: Optional. The training state that the model is in (e.g.
	// `TRAINING` or `PAUSED`). Since part of the cost of running the service is
	// frequency of training - this can be used to determine when to train model in
	// order to control cost. If not specified: the default value for `CreateModel`
	// method is `TRAINING`. The default value for `UpdateModel` method is to keep
	// the state the same as before.
	//
	// Possible values:
	//   "TRAINING_STATE_UNSPECIFIED" - Unspecified training state.
	//   "PAUSED" - The model training is paused.
	//   "TRAINING" - The model is training.
	TrainingState string `json:"trainingState,omitempty"`
	// TuningOperation: Output only. The tune operation associated with the model.
	// Can be used to determine if there is an ongoing tune for this
	// recommendation. Empty field implies no tune is goig on.
	TuningOperation string `json:"tuningOperation,omitempty"`
	// Type: Required. The type of model e.g. `home-page`. Currently supported
	// values: `recommended-for-you`, `others-you-may-like`,
	// `frequently-bought-together`, `page-optimization`, `similar-items`,
	// `buy-it-again`, `on-sale-items`, and `recently-viewed`(readonly value). This
	// field together with optimization_objective describe model metadata to use to
	// control model training and serving. See
	// https://cloud.google.com/retail/docs/models for more details on what the
	// model metadata control and which combination of parameters are valid. For
	// invalid combinations of parameters (e.g. type = `frequently-bought-together`
	// and optimization_objective = `ctr`), you receive an error 400 if you try to
	// create/update a recommendation with this set of knobs.
	Type string `json:"type,omitempty"`
	// UpdateTime: Output only. Timestamp the Recommendation Model was last
	// updated. E.g. if a Recommendation Model was paused - this would be the time
	// the pause was initiated.
	UpdateTime string `json:"updateTime,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Model) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Model
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfig: Additional
// configs for the frequently-bought-together model type.
type GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfig struct {
	// ContextProductsType: Optional. Specifies the context of the model when it is
	// used in predict requests. Can only be set for the
	// `frequently-bought-together` type. If it isn't specified, it defaults to
	// MULTIPLE_CONTEXT_PRODUCTS.
	//
	// Possible values:
	//   "CONTEXT_PRODUCTS_TYPE_UNSPECIFIED" - Unspecified default value, should
	// never be explicitly set. Defaults to MULTIPLE_CONTEXT_PRODUCTS.
	//   "SINGLE_CONTEXT_PRODUCT" - Use only a single product as context for the
	// recommendation. Typically used on pages like add-to-cart or product details.
	//   "MULTIPLE_CONTEXT_PRODUCTS" - Use one or multiple products as context for
	// the recommendation. Typically used on shopping cart pages.
	ContextProductsType string `json:"contextProductsType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ContextProductsType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ContextProductsType") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ModelModelFeaturesConfig: Additional model features
// config.
type GoogleCloudRetailV2ModelModelFeaturesConfig struct {
	// FrequentlyBoughtTogetherConfig: Additional configs for
	// frequently-bought-together models.
	FrequentlyBoughtTogetherConfig *GoogleCloudRetailV2ModelFrequentlyBoughtTogetherFeaturesConfig `json:"frequentlyBoughtTogetherConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g.
	// "FrequentlyBoughtTogetherConfig") to unconditionally include in API
	// requests. By default, fields with empty or default values are omitted from
	// API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FrequentlyBoughtTogetherConfig")
	// to include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ModelModelFeaturesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ModelModelFeaturesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ModelServingConfigList: Represents an ordered combination
// of valid serving configs, which can be used for `PAGE_OPTIMIZATION`
// recommendations.
type GoogleCloudRetailV2ModelServingConfigList struct {
	// ServingConfigIds: Optional. A set of valid serving configs that may be used
	// for `PAGE_OPTIMIZATION`.
	ServingConfigIds []string `json:"servingConfigIds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ServingConfigIds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ServingConfigIds") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ModelServingConfigList) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ModelServingConfigList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2OutputConfig: The output configuration setting.
type GoogleCloudRetailV2OutputConfig struct {
	// BigqueryDestination: The BigQuery location where the output is to be written
	// to.
	BigqueryDestination *GoogleCloudRetailV2OutputConfigBigQueryDestination `json:"bigqueryDestination,omitempty"`
	// GcsDestination: The Google Cloud Storage location where the output is to be
	// written to.
	GcsDestination *GoogleCloudRetailV2OutputConfigGcsDestination `json:"gcsDestination,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigqueryDestination") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigqueryDestination") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2OutputConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2OutputConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2OutputConfigBigQueryDestination: The BigQuery output
// destination configuration.
type GoogleCloudRetailV2OutputConfigBigQueryDestination struct {
	// DatasetId: Required. The ID of a BigQuery Dataset.
	DatasetId string `json:"datasetId,omitempty"`
	// TableIdPrefix: Required. The prefix of exported BigQuery tables.
	TableIdPrefix string `json:"tableIdPrefix,omitempty"`
	// TableType: Required. Describes the table type. The following values are
	// supported: * `table`: A BigQuery native table. * `view`: A virtual table
	// defined by a SQL query.
	TableType string `json:"tableType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DatasetId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DatasetId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2OutputConfigBigQueryDestination) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2OutputConfigBigQueryDestination
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2OutputConfigGcsDestination: The Google Cloud Storage
// output destination configuration.
type GoogleCloudRetailV2OutputConfigGcsDestination struct {
	// OutputUriPrefix: Required. The output uri prefix for saving output data to
	// json files. Some mapping examples are as follows: output_uri_prefix sample
	// output(assuming the object is foo.json) ========================
	// ============================================= gs://bucket/
	// gs://bucket/foo.json gs://bucket/folder/ gs://bucket/folder/foo.json
	// gs://bucket/folder/item_ gs://bucket/folder/item_foo.json
	OutputUriPrefix string `json:"outputUriPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OutputUriPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OutputUriPrefix") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2OutputConfigGcsDestination) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2OutputConfigGcsDestination
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2OutputResult: Output result that stores the information
// about where the exported data is stored.
type GoogleCloudRetailV2OutputResult struct {
	// BigqueryResult: The BigQuery location where the result is stored.
	BigqueryResult []*GoogleCloudRetailV2BigQueryOutputResult `json:"bigqueryResult,omitempty"`
	// GcsResult: The Google Cloud Storage location where the result is stored.
	GcsResult []*GoogleCloudRetailV2GcsOutputResult `json:"gcsResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigqueryResult") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigqueryResult") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2OutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2OutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PanelInfo: Detailed panel information associated with a
// user event.
type GoogleCloudRetailV2PanelInfo struct {
	// AttributionToken: Optional. The attribution token of the panel.
	AttributionToken string `json:"attributionToken,omitempty"`
	// DisplayName: Optional. The display name of the panel.
	DisplayName string `json:"displayName,omitempty"`
	// PanelId: Required. The panel ID.
	PanelId string `json:"panelId,omitempty"`
	// PanelPosition: Optional. The ordered position of the panel, if shown to the
	// user with other panels. If set, then total_panels must also be set.
	PanelPosition int64 `json:"panelPosition,omitempty"`
	// ProductDetails: Optional. The product details associated with the panel.
	ProductDetails []*GoogleCloudRetailV2ProductDetail `json:"productDetails,omitempty"`
	// TotalPanels: Optional. The total number of panels, including this one, shown
	// to the user. Must be set if panel_position is set.
	TotalPanels int64 `json:"totalPanels,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AttributionToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AttributionToken") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PanelInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PanelInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PauseModelRequest: Request for pausing training of a
// model.
type GoogleCloudRetailV2PauseModelRequest struct {
}

// GoogleCloudRetailV2PinControlMetadata: Metadata for pinning to be returned
// in the response. This is used for distinguishing between applied vs dropped
// pins.
type GoogleCloudRetailV2PinControlMetadata struct {
	// AllMatchedPins: Map of all matched pins, keyed by pin position.
	AllMatchedPins map[string]GoogleCloudRetailV2PinControlMetadataProductPins `json:"allMatchedPins,omitempty"`
	// DroppedPins: Map of pins that were dropped due to overlap with other
	// matching pins, keyed by pin position.
	DroppedPins map[string]GoogleCloudRetailV2PinControlMetadataProductPins `json:"droppedPins,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AllMatchedPins") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AllMatchedPins") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PinControlMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PinControlMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PinControlMetadataProductPins: List of product ids which
// have associated pins.
type GoogleCloudRetailV2PinControlMetadataProductPins struct {
	// ProductId: List of product ids which have associated pins.
	ProductId []string `json:"productId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PinControlMetadataProductPins) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PinControlMetadataProductPins
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PredictRequest: Request message for Predict method.
type GoogleCloudRetailV2PredictRequest struct {
	// Filter: Filter for restricting prediction results with a length limit of
	// 5,000 characters. Accepts values for tags and the `filterOutOfStockItems`
	// flag. * Tag expressions. Restricts predictions to products that match all of
	// the specified tags. Boolean operators `OR` and `NOT` are supported if the
	// expression is enclosed in parentheses, and must be separated from the tag
	// values by a space. `-"tagA" is also supported and is equivalent to `NOT
	// "tagA". Tag values must be double quoted UTF-8 encoded strings with a size
	// limit of 1,000 characters. Note: "Recently viewed" models don't support tag
	// filtering at the moment. * filterOutOfStockItems. Restricts predictions to
	// products that do not have a stockState value of OUT_OF_STOCK. Examples: *
	// tag=("Red" OR "Blue") tag="New-Arrival" tag=(NOT "promotional") *
	// filterOutOfStockItems tag=(-"promotional") * filterOutOfStockItems If your
	// filter blocks all prediction results, the API will return *no* results. If
	// instead you want empty result sets to return generic (unfiltered) popular
	// products, set `strictFiltering` to False in `PredictRequest.params`. Note
	// that the API will never return items with storageStatus of "EXPIRED" or
	// "DELETED" regardless of filter choices. If `filterSyntaxV2` is set to true
	// under the `params` field, then attribute-based expressions are expected
	// instead of the above described tag-based syntax. Examples: * (colors:
	// ANY("Red", "Blue")) AND NOT (categories: ANY("Phones")) * (availability:
	// ANY("IN_STOCK")) AND (colors: ANY("Red") OR categories: ANY("Phones")) For
	// more information, see Filter recommendations
	// (https://cloud.google.com/retail/docs/filter-recs).
	Filter string `json:"filter,omitempty"`
	// Labels: The labels applied to a resource must meet the following
	// requirements: * Each resource can have multiple labels, up to a maximum of
	// 64. * Each label must be a key-value pair. * Keys have a minimum length of 1
	// character and a maximum length of 63 characters and cannot be empty. Values
	// can be empty and have a maximum length of 63 characters. * Keys and values
	// can contain only lowercase letters, numeric characters, underscores, and
	// dashes. All characters must use UTF-8 encoding, and international characters
	// are allowed. * The key portion of a label must be unique. However, you can
	// use the same key with multiple resources. * Keys must start with a lowercase
	// letter or international character. See Google Cloud Document
	// (https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
	// for more details.
	Labels map[string]string `json:"labels,omitempty"`
	// PageSize: Maximum number of results to return. Set this property to the
	// number of prediction results needed. If zero, the service will choose a
	// reasonable default. The maximum allowed value is 100. Values above 100 will
	// be coerced to 100.
	PageSize int64 `json:"pageSize,omitempty"`
	// PageToken: This field is not used; leave it unset.
	PageToken string `json:"pageToken,omitempty"`
	// Params: Additional domain specific parameters for the predictions. Allowed
	// values: * `returnProduct`: Boolean. If set to true, the associated product
	// object will be returned in the `results.metadata` field in the prediction
	// response. * `returnScore`: Boolean. If set to true, the prediction 'score'
	// corresponding to each returned product will be set in the `results.metadata`
	// field in the prediction response. The given 'score' indicates the
	// probability of a product being clicked/purchased given the user's context
	// and history. * `strictFiltering`: Boolean. True by default. If set to false,
	// the service will return generic (unfiltered) popular products instead of
	// empty if your filter blocks all prediction results. * `priceRerankLevel`:
	// String. Default empty. If set to be non-empty, then it needs to be one of
	// {'no-price-reranking', 'low-price-reranking', 'medium-price-reranking',
	// 'high-price-reranking'}. This gives request-level control and adjusts
	// prediction results based on product price. * `diversityLevel`: String.
	// Default empty. If set to be non-empty, then it needs to be one of
	// {'no-diversity', 'low-diversity', 'medium-diversity', 'high-diversity',
	// 'auto-diversity'}. This gives request-level control and adjusts prediction
	// results based on product category. * `filterSyntaxV2`: Boolean. False by
	// default. If set to true, the `filter` field is interpreteted according to
	// the new, attribute-based syntax.
	Params googleapi.RawMessage `json:"params,omitempty"`
	// UserEvent: Required. Context about the user, what they are looking at and
	// what action they took to trigger the predict request. Note that this user
	// event detail won't be ingested to userEvent logs. Thus, a separate userEvent
	// write request is required for event logging. Don't set UserEvent.visitor_id
	// or UserInfo.user_id to the same fixed ID for different users. If you are
	// trying to receive non-personalized recommendations (not recommended; this
	// can negatively impact model performance), instead set UserEvent.visitor_id
	// to a random unique ID and leave UserInfo.user_id unset.
	UserEvent *GoogleCloudRetailV2UserEvent `json:"userEvent,omitempty"`
	// ValidateOnly: Use validate only mode for this prediction query. If set to
	// true, a dummy model will be used that returns arbitrary products. Note that
	// the validate only mode should only be used for testing the API, or if the
	// model is not ready.
	ValidateOnly bool `json:"validateOnly,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Filter") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PredictRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PredictRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PredictResponse: Response message for predict method.
type GoogleCloudRetailV2PredictResponse struct {
	// AttributionToken: A unique attribution token. This should be included in the
	// UserEvent logs resulting from this recommendation, which enables accurate
	// attribution of recommendation model performance.
	AttributionToken string `json:"attributionToken,omitempty"`
	// MissingIds: IDs of products in the request that were missing from the
	// inventory.
	MissingIds []string `json:"missingIds,omitempty"`
	// Results: A list of recommended products. The order represents the ranking
	// (from the most relevant product to the least).
	Results []*GoogleCloudRetailV2PredictResponsePredictionResult `json:"results,omitempty"`
	// ValidateOnly: True if the validateOnly property was set in the request.
	ValidateOnly bool `json:"validateOnly,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AttributionToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AttributionToken") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PredictResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PredictResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PredictResponsePredictionResult: PredictionResult
// represents the recommendation prediction results.
type GoogleCloudRetailV2PredictResponsePredictionResult struct {
	// Id: ID of the recommended product
	Id string `json:"id,omitempty"`
	// Metadata: Additional product metadata / annotations. Possible values: *
	// `product`: JSON representation of the product. Is set if `returnProduct` is
	// set to true in `PredictRequest.params`. * `score`: Prediction score in
	// double value. Is set if `returnScore` is set to true in
	// `PredictRequest.params`.
	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Id") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Id") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PredictResponsePredictionResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PredictResponsePredictionResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PriceInfo: The price information of a Product.
type GoogleCloudRetailV2PriceInfo struct {
	// Cost: The costs associated with the sale of a particular product. Used for
	// gross profit reporting. * Profit = price - cost Google Merchant Center
	// property cost_of_goods_sold
	// (https://support.google.com/merchants/answer/9017895).
	Cost float64 `json:"cost,omitempty"`
	// CurrencyCode: The 3-letter currency code defined in ISO 4217
	// (https://www.iso.org/iso-4217-currency-codes.html). If this field is an
	// unrecognizable currency code, an INVALID_ARGUMENT error is returned. The
	// Product.Type.VARIANT Products with the same Product.primary_product_id must
	// share the same currency_code. Otherwise, a FAILED_PRECONDITION error is
	// returned.
	CurrencyCode string `json:"currencyCode,omitempty"`
	// OriginalPrice: Price of the product without any discount. If zero, by
	// default set to be the price. If set, original_price should be greater than
	// or equal to price, otherwise an INVALID_ARGUMENT error is thrown.
	OriginalPrice float64 `json:"originalPrice,omitempty"`
	// Price: Price of the product. Google Merchant Center property price
	// (https://support.google.com/merchants/answer/6324371). Schema.org property
	// Offer.price (https://schema.org/price).
	Price float64 `json:"price,omitempty"`
	// PriceEffectiveTime: The timestamp when the price starts to be effective.
	// This can be set as a future timestamp, and the price is only used for search
	// after price_effective_time. If so, the original_price must be set and
	// original_price is used before price_effective_time. Do not set if price is
	// always effective because it will cause additional latency during search.
	PriceEffectiveTime string `json:"priceEffectiveTime,omitempty"`
	// PriceExpireTime: The timestamp when the price stops to be effective. The
	// price is used for search before price_expire_time. If this field is set, the
	// original_price must be set and original_price is used after
	// price_expire_time. Do not set if price is always effective because it will
	// cause additional latency during search.
	PriceExpireTime string `json:"priceExpireTime,omitempty"`
	// PriceRange: Output only. The price range of all the child
	// Product.Type.VARIANT Products grouped together on the Product.Type.PRIMARY
	// Product. Only populated for Product.Type.PRIMARY Products. Note: This field
	// is OUTPUT_ONLY for ProductService.GetProduct. Do not set this field in API
	// requests.
	PriceRange *GoogleCloudRetailV2PriceInfoPriceRange `json:"priceRange,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Cost") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Cost") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PriceInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PriceInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2PriceInfo) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2PriceInfo
	var s1 struct {
		Cost          gensupport.JSONFloat64 `json:"cost"`
		OriginalPrice gensupport.JSONFloat64 `json:"originalPrice"`
		Price         gensupport.JSONFloat64 `json:"price"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Cost = float64(s1.Cost)
	s.OriginalPrice = float64(s1.OriginalPrice)
	s.Price = float64(s1.Price)
	return nil
}

// GoogleCloudRetailV2PriceInfoPriceRange: The price range of all variant
// Product having the same Product.primary_product_id.
type GoogleCloudRetailV2PriceInfoPriceRange struct {
	// OriginalPrice: The inclusive Product.pricing_info.original_price internal of
	// all variant Product having the same Product.primary_product_id.
	OriginalPrice *GoogleCloudRetailV2Interval `json:"originalPrice,omitempty"`
	// Price: The inclusive Product.pricing_info.price interval of all variant
	// Product having the same Product.primary_product_id.
	Price *GoogleCloudRetailV2Interval `json:"price,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OriginalPrice") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OriginalPrice") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PriceInfoPriceRange) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PriceInfoPriceRange
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Product: Product captures all metadata information of
// items to be recommended or searched.
type GoogleCloudRetailV2Product struct {
	// Attributes: Highly encouraged. Extra product attributes to be included. For
	// example, for products, this could include the store name, vendor, style,
	// color, etc. These are very strong signals for recommendation model, thus we
	// highly recommend providing the attributes here. Features that can take on
	// one of a limited number of possible values. Two types of features can be set
	// are: Textual features. some examples would be the brand/maker of a product,
	// or country of a customer. Numerical features. Some examples would be the
	// height/weight of a product, or age of a customer. For example: `{ "vendor":
	// {"text": ["vendor123", "vendor456"]}, "lengths_cm": {"numbers":[2.3, 15.4]},
	// "heights_cm": {"numbers":[8.1, 6.4]} }`. This field needs to pass all below
	// criteria, otherwise an INVALID_ARGUMENT error is returned: * Max entries
	// count: 200. * The key must be a UTF-8 encoded string with a length limit of
	// 128 characters. * For indexable attribute, the key must match the pattern:
	// `a-zA-Z0-9*`. For example, `key0LikeThis` or `KEY_1_LIKE_THIS`. * For text
	// attributes, at most 400 values are allowed. Empty values are not allowed.
	// Each value must be a non-empty UTF-8 encoded string with a length limit of
	// 256 characters. * For number attributes, at most 400 values are allowed.
	Attributes map[string]GoogleCloudRetailV2CustomAttribute `json:"attributes,omitempty"`
	// Audience: The target group associated with a given audience (e.g. male,
	// veterans, car owners, musicians, etc.) of the product.
	Audience *GoogleCloudRetailV2Audience `json:"audience,omitempty"`
	// Availability: The online availability of the Product. Default to
	// Availability.IN_STOCK. For primary products with variants set the
	// availability of the primary as Availability.OUT_OF_STOCK and set the true
	// availability at the variant level. This way the primary product will be
	// considered "in stock" as long as it has at least one variant in stock. For
	// primary products with no variants set the true availability at the primary
	// level. Corresponding properties: Google Merchant Center property
	// availability (https://support.google.com/merchants/answer/6324448).
	// Schema.org property Offer.availability (https://schema.org/availability).
	//
	// Possible values:
	//   "AVAILABILITY_UNSPECIFIED" - Default product availability. Default to
	// Availability.IN_STOCK if unset.
	//   "IN_STOCK" - Product in stock.
	//   "OUT_OF_STOCK" - Product out of stock.
	//   "PREORDER" - Product that is in pre-order state.
	//   "BACKORDER" - Product that is back-ordered (i.e. temporarily out of
	// stock).
	Availability string `json:"availability,omitempty"`
	// AvailableQuantity: The available quantity of the item.
	AvailableQuantity int64 `json:"availableQuantity,omitempty"`
	// AvailableTime: The timestamp when this Product becomes available for
	// SearchService.Search. Note that this is only applicable to Type.PRIMARY and
	// Type.COLLECTION, and ignored for Type.VARIANT.
	AvailableTime string `json:"availableTime,omitempty"`
	// Brands: The brands of the product. A maximum of 30 brands are allowed unless
	// overridden through the Google Cloud console. Each brand must be a UTF-8
	// encoded string with a length limit of 1,000 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. Corresponding properties: Google
	// Merchant Center property brand
	// (https://support.google.com/merchants/answer/6324351). Schema.org property
	// Product.brand (https://schema.org/brand).
	Brands []string `json:"brands,omitempty"`
	// Categories: Optional. Product categories. This field is repeated for
	// supporting one product belonging to several parallel categories. Strongly
	// recommended using the full path for better search / recommendation quality.
	// To represent the full path of category, use the '>' sign, with one space on
	// each side, to separate different hierarchies. If '>' is part of the category
	// name, replace it with other character(s). For example, if a shoes product
	// belongs to both ["Shoes & Accessories" -> "Shoes"] and ["Sports & Fitness"
	// -> "Athletic Clothing" -> "Shoes"], it could be represented as:
	// "categories": [ "Shoes & Accessories > Shoes", "Sports & Fitness > Athletic
	// Clothing > Shoes" ] Must be set for Type.PRIMARY Product otherwise an
	// INVALID_ARGUMENT error is returned. At most 250 values are allowed per
	// Product unless overridden through the Google Cloud console. Empty values are
	// not allowed. Each value must be a UTF-8 encoded string with a length limit
	// of 5,000 characters. Otherwise, an INVALID_ARGUMENT error is returned.
	// Corresponding properties: Google Merchant Center property
	// google_product_category. Schema.org property [Product.category]
	// (https://schema.org/category). [mc_google_product_category]:
	// https://support.google.com/merchants/answer/6324436
	Categories []string `json:"categories,omitempty"`
	// CollectionMemberIds: The id of the collection members when type is
	// Type.COLLECTION. Non-existent product ids are allowed. The type of the
	// members must be either Type.PRIMARY or Type.VARIANT otherwise an
	// INVALID_ARGUMENT error is thrown. Should not set it for other types. A
	// maximum of 1000 values are allowed. Otherwise, an INVALID_ARGUMENT error is
	// return.
	CollectionMemberIds []string `json:"collectionMemberIds,omitempty"`
	// ColorInfo: The color of the product. Corresponding properties: Google
	// Merchant Center property color
	// (https://support.google.com/merchants/answer/6324487). Schema.org property
	// Product.color (https://schema.org/color).
	ColorInfo *GoogleCloudRetailV2ColorInfo `json:"colorInfo,omitempty"`
	// Conditions: The condition of the product. Strongly encouraged to use the
	// standard values: "new", "refurbished", "used". A maximum of 1 value is
	// allowed per Product. Each value must be a UTF-8 encoded string with a length
	// limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
	// Corresponding properties: Google Merchant Center property condition
	// (https://support.google.com/merchants/answer/6324469). Schema.org property
	// Offer.itemCondition (https://schema.org/itemCondition).
	Conditions []string `json:"conditions,omitempty"`
	// Description: Product description. This field must be a UTF-8 encoded string
	// with a length limit of 5,000 characters. Otherwise, an INVALID_ARGUMENT
	// error is returned. Corresponding properties: Google Merchant Center property
	// description (https://support.google.com/merchants/answer/6324468).
	// Schema.org property Product.description (https://schema.org/description).
	Description string `json:"description,omitempty"`
	// ExpireTime: Note that this field is applied in the following ways: * If the
	// Product is already expired when it is uploaded, this product is not indexed
	// for search. * If the Product is not expired when it is uploaded, only the
	// Type.PRIMARY's and Type.COLLECTION's expireTime is respected, and
	// Type.VARIANT's expireTime is not used. In general, we suggest the users to
	// delete the stale products explicitly, instead of using this field to
	// determine staleness. expire_time must be later than available_time and
	// publish_time, otherwise an INVALID_ARGUMENT error is thrown. Corresponding
	// properties: Google Merchant Center property expiration_date
	// (https://support.google.com/merchants/answer/6324499).
	ExpireTime string `json:"expireTime,omitempty"`
	// FulfillmentInfo: Fulfillment information, such as the store IDs for in-store
	// pickup or region IDs for different shipping methods. All the elements must
	// have distinct FulfillmentInfo.type. Otherwise, an INVALID_ARGUMENT error is
	// returned.
	FulfillmentInfo []*GoogleCloudRetailV2FulfillmentInfo `json:"fulfillmentInfo,omitempty"`
	// Gtin: The Global Trade Item Number (GTIN) of the product. This field must be
	// a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. This field must be a Unigram. Otherwise,
	// an INVALID_ARGUMENT error is returned. Corresponding properties: Google
	// Merchant Center property gtin
	// (https://support.google.com/merchants/answer/6324461). Schema.org property
	// Product.isbn (https://schema.org/isbn), Product.gtin8
	// (https://schema.org/gtin8), Product.gtin12 (https://schema.org/gtin12),
	// Product.gtin13 (https://schema.org/gtin13), or Product.gtin14
	// (https://schema.org/gtin14). If the value is not a valid GTIN, an
	// INVALID_ARGUMENT error is returned.
	Gtin string `json:"gtin,omitempty"`
	// Id: Immutable. Product identifier, which is the final component of name. For
	// example, this field is "id_1", if name is
	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch
	// /products/id_1`. This field must be a UTF-8 encoded string with a length
	// limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
	// Corresponding properties: Google Merchant Center property id
	// (https://support.google.com/merchants/answer/6324405). Schema.org property
	// Product.sku (https://schema.org/sku).
	Id string `json:"id,omitempty"`
	// Images: Product images for the product. We highly recommend putting the main
	// image first. A maximum of 300 images are allowed. Corresponding properties:
	// Google Merchant Center property image_link
	// (https://support.google.com/merchants/answer/6324350). Schema.org property
	// Product.image (https://schema.org/image).
	Images []*GoogleCloudRetailV2Image `json:"images,omitempty"`
	// LanguageCode: Language of the title/description and other string attributes.
	// Use language tags defined by BCP 47
	// (https://www.rfc-editor.org/rfc/bcp/bcp47.txt). For product prediction, this
	// field is ignored and the model automatically detects the text language. The
	// Product can include text in different languages, but duplicating Products to
	// provide text in multiple languages can result in degraded model performance.
	// For product search this field is in use. It defaults to "en-US" if unset.
	LanguageCode string `json:"languageCode,omitempty"`
	// LocalInventories: Output only. A list of local inventories specific to
	// different places. This field can be managed by
	// ProductService.AddLocalInventories and ProductService.RemoveLocalInventories
	// APIs if fine-grained, high-volume updates are necessary.
	LocalInventories []*GoogleCloudRetailV2LocalInventory `json:"localInventories,omitempty"`
	// Materials: The material of the product. For example, "leather", "wooden". A
	// maximum of 20 values are allowed. Each value must be a UTF-8 encoded string
	// with a length limit of 200 characters. Otherwise, an INVALID_ARGUMENT error
	// is returned. Corresponding properties: Google Merchant Center property
	// material (https://support.google.com/merchants/answer/6324410). Schema.org
	// property Product.material (https://schema.org/material).
	Materials []string `json:"materials,omitempty"`
	// Name: Immutable. Full resource name of the product, such as
	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch
	// /products/product_id`.
	Name string `json:"name,omitempty"`
	// Patterns: The pattern or graphic print of the product. For example,
	// "striped", "polka dot", "paisley". A maximum of 20 values are allowed per
	// Product. Each value must be a UTF-8 encoded string with a length limit of
	// 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
	// Corresponding properties: Google Merchant Center property pattern
	// (https://support.google.com/merchants/answer/6324483). Schema.org property
	// Product.pattern (https://schema.org/pattern).
	Patterns []string `json:"patterns,omitempty"`
	// PriceInfo: Product price and cost information. Corresponding properties:
	// Google Merchant Center property price
	// (https://support.google.com/merchants/answer/6324371).
	PriceInfo *GoogleCloudRetailV2PriceInfo `json:"priceInfo,omitempty"`
	// PrimaryProductId: Variant group identifier. Must be an id, with the same
	// parent branch with this product. Otherwise, an error is thrown. For
	// Type.PRIMARY Products, this field can only be empty or set to the same value
	// as id. For VARIANT Products, this field cannot be empty. A maximum of 2,000
	// products are allowed to share the same Type.PRIMARY Product. Otherwise, an
	// INVALID_ARGUMENT error is returned. Corresponding properties: Google
	// Merchant Center property item_group_id
	// (https://support.google.com/merchants/answer/6324507). Schema.org property
	// Product.inProductGroupWithID (https://schema.org/inProductGroupWithID).
	PrimaryProductId string `json:"primaryProductId,omitempty"`
	// Promotions: The promotions applied to the product. A maximum of 10 values
	// are allowed per Product. Only Promotion.promotion_id will be used, other
	// fields will be ignored if set.
	Promotions []*GoogleCloudRetailV2Promotion `json:"promotions,omitempty"`
	// PublishTime: The timestamp when the product is published by the retailer for
	// the first time, which indicates the freshness of the products. Note that
	// this field is different from available_time, given it purely describes
	// product freshness regardless of when it is available on search and
	// recommendation.
	PublishTime string `json:"publishTime,omitempty"`
	// Rating: The rating of this product.
	Rating *GoogleCloudRetailV2Rating `json:"rating,omitempty"`
	// RetrievableFields: Indicates which fields in the Products are returned in
	// SearchResponse. Supported fields for all types: * audience * availability *
	// brands * color_info * conditions * gtin * materials * name * patterns *
	// price_info * rating * sizes * title * uri Supported fields only for
	// Type.PRIMARY and Type.COLLECTION: * categories * description * images
	// Supported fields only for Type.VARIANT: * Only the first image in images To
	// mark attributes as retrievable, include paths of the form "attributes.key"
	// where "key" is the key of a custom attribute, as specified in attributes.
	// For Type.PRIMARY and Type.COLLECTION, the following fields are always
	// returned in SearchResponse by default: * name For Type.VARIANT, the
	// following fields are always returned in by default: * name * color_info
	// Note: Returning more fields in SearchResponse can increase response payload
	// size and serving latency. This field is deprecated. Use the retrievable
	// site-wide control instead.
	RetrievableFields string `json:"retrievableFields,omitempty"`
	// Sizes: The size of the product. To represent different size systems or size
	// types, consider using this format: [[[size_system:]size_type:]size_value].
	// For example, in "US:MENS:M", "US" represents size system; "MENS" represents
	// size type; "M" represents size value. In "GIRLS:27", size system is empty;
	// "GIRLS" represents size type; "27" represents size value. In "32 inches",
	// both size system and size type are empty, while size value is "32 inches". A
	// maximum of 20 values are allowed per Product. Each value must be a UTF-8
	// encoded string with a length limit of 128 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. Corresponding properties: Google
	// Merchant Center property size
	// (https://support.google.com/merchants/answer/6324492), size_type
	// (https://support.google.com/merchants/answer/6324497), and size_system
	// (https://support.google.com/merchants/answer/6324502). Schema.org property
	// Product.size (https://schema.org/size).
	Sizes []string `json:"sizes,omitempty"`
	// Tags: Custom tags associated with the product. At most 250 values are
	// allowed per Product. This value must be a UTF-8 encoded string with a length
	// limit of 1,000 characters. Otherwise, an INVALID_ARGUMENT error is returned.
	// This tag can be used for filtering recommendation results by passing the tag
	// as part of the PredictRequest.filter. Corresponding properties: Google
	// Merchant Center property custom_label_0–4
	// (https://support.google.com/merchants/answer/6324473).
	Tags []string `json:"tags,omitempty"`
	// Title: Required. Product title. This field must be a UTF-8 encoded string
	// with a length limit of 1,000 characters. Otherwise, an INVALID_ARGUMENT
	// error is returned. Corresponding properties: Google Merchant Center property
	// title (https://support.google.com/merchants/answer/6324415). Schema.org
	// property Product.name (https://schema.org/name).
	Title string `json:"title,omitempty"`
	// Ttl: Input only. The TTL (time to live) of the product. Note that this is
	// only applicable to Type.PRIMARY and Type.COLLECTION, and ignored for
	// Type.VARIANT. In general, we suggest the users to delete the stale products
	// explicitly, instead of using this field to determine staleness. If it is
	// set, it must be a non-negative value, and expire_time is set as current
	// timestamp plus ttl. The derived expire_time is returned in the output and
	// ttl is left blank when retrieving the Product. If it is set, the product is
	// not available for SearchService.Search after current timestamp plus ttl.
	// However, the product can still be retrieved by ProductService.GetProduct and
	// ProductService.ListProducts.
	Ttl string `json:"ttl,omitempty"`
	// Type: Immutable. The type of the product. Default to
	// Catalog.product_level_config.ingestion_product_type if unset.
	//
	// Possible values:
	//   "TYPE_UNSPECIFIED" - Default value. Default to
	// Catalog.product_level_config.ingestion_product_type if unset.
	//   "PRIMARY" - The primary type. As the primary unit for predicting, indexing
	// and search serving, a Type.PRIMARY Product is grouped with multiple
	// Type.VARIANT Products.
	//   "VARIANT" - The variant type. Type.VARIANT Products usually share some
	// common attributes on the same Type.PRIMARY Products, but they have variant
	// attributes like different colors, sizes and prices, etc.
	//   "COLLECTION" - The collection type. Collection products are bundled
	// Type.PRIMARY Products or Type.VARIANT Products that are sold together, such
	// as a jewelry set with necklaces, earrings and rings, etc.
	Type string `json:"type,omitempty"`
	// Uri: Canonical URL directly linking to the product detail page. It is
	// strongly recommended to provide a valid uri for the product, otherwise the
	// service performance could be significantly degraded. This field must be a
	// UTF-8 encoded string with a length limit of 5,000 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. Corresponding properties: Google
	// Merchant Center property link
	// (https://support.google.com/merchants/answer/6324416). Schema.org property
	// Offer.url (https://schema.org/url).
	Uri string `json:"uri,omitempty"`
	// Variants: Output only. Product variants grouped together on primary product
	// which share similar product attributes. It's automatically grouped by
	// primary_product_id for all the product variants. Only populated for
	// Type.PRIMARY Products. Note: This field is OUTPUT_ONLY for
	// ProductService.GetProduct. Do not set this field in API requests.
	Variants []*GoogleCloudRetailV2Product `json:"variants,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Attributes") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Attributes") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Product) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Product
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ProductAttributeInterval: Product attribute name and
// numeric interval.
type GoogleCloudRetailV2ProductAttributeInterval struct {
	// Interval: The numeric interval (e.g. [10, 20))
	Interval *GoogleCloudRetailV2Interval `json:"interval,omitempty"`
	// Name: The attribute name (e.g. "length")
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Interval") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Interval") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ProductAttributeInterval) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ProductAttributeInterval
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ProductAttributeValue: Product attribute which structured
// by an attribute name and value. This structure is used in conversational
// search filters and answers. For example, if we have `name=color` and
// `value=red`, this means that the color is `red`.
type GoogleCloudRetailV2ProductAttributeValue struct {
	// Name: The attribute name.
	Name string `json:"name,omitempty"`
	// Value: The attribute value.
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Name") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Name") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ProductAttributeValue) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ProductAttributeValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ProductDetail: Detailed product information associated
// with a user event.
type GoogleCloudRetailV2ProductDetail struct {
	// Product: Required. Product information. Required field(s): * Product.id
	// Optional override field(s): * Product.price_info If any supported optional
	// fields are provided, we will treat them as a full override when looking up
	// product information from the catalog. Thus, it is important to ensure that
	// the overriding fields are accurate and complete. All other product fields
	// are ignored and instead populated via catalog lookup after event ingestion.
	Product *GoogleCloudRetailV2Product `json:"product,omitempty"`
	// Quantity: Quantity of the product associated with the user event. For
	// example, this field will be 2 if two products are added to the shopping cart
	// for `purchase-complete` event. Required for `add-to-cart` and
	// `purchase-complete` event types.
	Quantity int64 `json:"quantity,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Product") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Product") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ProductDetail) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ProductDetail
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ProductInlineSource: The inline source for the input
// config for ImportProducts method.
type GoogleCloudRetailV2ProductInlineSource struct {
	// Products: Required. A list of products to update/create. Each product must
	// have a valid Product.id. Recommended max of 100 items.
	Products []*GoogleCloudRetailV2Product `json:"products,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Products") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Products") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ProductInlineSource) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ProductInlineSource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ProductInputConfig: The input config source for products.
type GoogleCloudRetailV2ProductInputConfig struct {
	// BigQuerySource: BigQuery input source.
	BigQuerySource *GoogleCloudRetailV2BigQuerySource `json:"bigQuerySource,omitempty"`
	// GcsSource: Google Cloud Storage location for the input content.
	GcsSource *GoogleCloudRetailV2GcsSource `json:"gcsSource,omitempty"`
	// ProductInlineSource: The Inline source for the input content for products.
	ProductInlineSource *GoogleCloudRetailV2ProductInlineSource `json:"productInlineSource,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigQuerySource") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigQuerySource") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ProductInputConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ProductInputConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ProductLevelConfig: Configures what level the product
// should be uploaded with regards to how users will be send events and how
// predictions will be made.
type GoogleCloudRetailV2ProductLevelConfig struct {
	// IngestionProductType: The type of Products allowed to be ingested into the
	// catalog. Acceptable values are: * `primary` (default): You can ingest
	// Products of all types. When ingesting a Product, its type will default to
	// Product.Type.PRIMARY if unset. * `variant` (incompatible with Retail
	// Search): You can only ingest Product.Type.VARIANT Products. This means
	// Product.primary_product_id cannot be empty. If this field is set to an
	// invalid value other than these, an INVALID_ARGUMENT error is returned. If
	// this field is `variant` and merchant_center_product_id_field is
	// `itemGroupId`, an INVALID_ARGUMENT error is returned. See Product levels
	// (https://cloud.google.com/retail/docs/catalog#product-levels) for more
	// details.
	IngestionProductType string `json:"ingestionProductType,omitempty"`
	// MerchantCenterProductIdField: Which field of Merchant Center Product
	// (/bigquery-transfer/docs/merchant-center-products-schema) should be imported
	// as Product.id. Acceptable values are: * `offerId` (default): Import
	// `offerId` as the product ID. * `itemGroupId`: Import `itemGroupId` as the
	// product ID. Notice that Retail API will choose one item from the ones with
	// the same `itemGroupId`, and use it to represent the item group. If this
	// field is set to an invalid value other than these, an INVALID_ARGUMENT error
	// is returned. If this field is `itemGroupId` and ingestion_product_type is
	// `variant`, an INVALID_ARGUMENT error is returned. See Product levels
	// (https://cloud.google.com/retail/docs/catalog#product-levels) for more
	// details.
	MerchantCenterProductIdField string `json:"merchantCenterProductIdField,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IngestionProductType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IngestionProductType") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ProductLevelConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ProductLevelConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Promotion: Promotion specification.
type GoogleCloudRetailV2Promotion struct {
	// PromotionId: Promotion identifier, which is the final component of name. For
	// example, this field is "free_gift", if name is
	// `projects/*/locations/global/catalogs/default_catalog/promotions/free_gift`.
	// The value must be a UTF-8 encoded string with a length limit of 128
	// characters, and match the pattern: `a-zA-Z*`. For example, id0LikeThis or
	// ID_1_LIKE_THIS. Otherwise, an INVALID_ARGUMENT error is returned.
	// Corresponds to Google Merchant Center property promotion_id
	// (https://support.google.com/merchants/answer/7050148).
	PromotionId string `json:"promotionId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PromotionId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PromotionId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Promotion) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Promotion
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PurchaseTransaction: A transaction represents the entire
// purchase transaction.
type GoogleCloudRetailV2PurchaseTransaction struct {
	// Cost: All the costs associated with the products. These can be manufacturing
	// costs, shipping expenses not borne by the end user, or any other costs, such
	// that: * Profit = revenue - tax - cost
	Cost float64 `json:"cost,omitempty"`
	// CurrencyCode: Required. Currency code. Use three-character ISO-4217 code.
	CurrencyCode string `json:"currencyCode,omitempty"`
	// Id: The transaction ID with a length limit of 128 characters.
	Id string `json:"id,omitempty"`
	// Revenue: Required. Total non-zero revenue or grand total associated with the
	// transaction. This value include shipping, tax, or other adjustments to total
	// revenue that you want to include as part of your revenue calculations.
	Revenue float64 `json:"revenue,omitempty"`
	// Tax: All the taxes associated with the transaction.
	Tax float64 `json:"tax,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Cost") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Cost") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PurchaseTransaction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PurchaseTransaction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2PurchaseTransaction) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2PurchaseTransaction
	var s1 struct {
		Cost    gensupport.JSONFloat64 `json:"cost"`
		Revenue gensupport.JSONFloat64 `json:"revenue"`
		Tax     gensupport.JSONFloat64 `json:"tax"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Cost = float64(s1.Cost)
	s.Revenue = float64(s1.Revenue)
	s.Tax = float64(s1.Tax)
	return nil
}

// GoogleCloudRetailV2PurgeMetadata: Metadata related to the progress of the
// Purge operation. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2PurgeMetadata struct {
}

// GoogleCloudRetailV2PurgeProductsMetadata: Metadata related to the progress
// of the PurgeProducts operation. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2PurgeProductsMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// FailureCount: Count of entries that encountered errors while processing.
	FailureCount int64 `json:"failureCount,omitempty,string"`
	// SuccessCount: Count of entries that were deleted successfully.
	SuccessCount int64 `json:"successCount,omitempty,string"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PurgeProductsMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PurgeProductsMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PurgeProductsRequest: Request message for PurgeProducts
// method.
type GoogleCloudRetailV2PurgeProductsRequest struct {
	// Filter: Required. The filter string to specify the products to be deleted
	// with a length limit of 5,000 characters. Empty string filter is not allowed.
	// "*" implies delete all items in a branch. The eligible fields for filtering
	// are: * `availability`: Double quoted Product.availability string. *
	// `create_time` : in ISO 8601 "zulu" format. Supported syntax: * Comparators
	// (">", "<", ">=", "<=", "="). Examples: * create_time <=
	// "2015-02-13T17:05:46Z" * availability = "IN_STOCK" * Conjunctions ("AND")
	// Examples: * create_time <= "2015-02-13T17:05:46Z" AND availability =
	// "PREORDER" * Disjunctions ("OR") Examples: * create_time <=
	// "2015-02-13T17:05:46Z" OR availability = "IN_STOCK" * Can support nested
	// queries. Examples: * (create_time <= "2015-02-13T17:05:46Z" AND availability
	// = "PREORDER") OR (create_time >= "2015-02-14T13:03:32Z" AND availability =
	// "IN_STOCK") * Filter Limits: * Filter should not contain more than 6
	// conditions. * Max nesting depth should not exceed 2 levels. Examples
	// queries: * Delete back order products created before a timestamp.
	// create_time <= "2015-02-13T17:05:46Z" OR availability = "BACKORDER"
	Filter string `json:"filter,omitempty"`
	// Force: Actually perform the purge. If `force` is set to false, the method
	// will return the expected purge count without deleting any products.
	Force bool `json:"force,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Filter") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PurgeProductsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PurgeProductsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PurgeProductsResponse: Response of the
// PurgeProductsRequest. If the long running operation is successfully done,
// then this message is returned by the google.longrunning.Operations.response
// field.
type GoogleCloudRetailV2PurgeProductsResponse struct {
	// PurgeCount: The total count of products purged as a result of the operation.
	PurgeCount int64 `json:"purgeCount,omitempty,string"`
	// PurgeSample: A sample of the product names that will be deleted. Only
	// populated if `force` is set to false. A max of 100 names will be returned
	// and the names are chosen at random.
	PurgeSample []string `json:"purgeSample,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PurgeCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PurgeCount") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PurgeProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PurgeProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PurgeUserEventsRequest: Request message for
// PurgeUserEvents method.
type GoogleCloudRetailV2PurgeUserEventsRequest struct {
	// Filter: Required. The filter string to specify the events to be deleted with
	// a length limit of 5,000 characters. Empty string filter is not allowed. The
	// eligible fields for filtering are: * `eventType`: Double quoted
	// UserEvent.event_type string. * `eventTime`: in ISO 8601 "zulu" format. *
	// `visitorId`: Double quoted string. Specifying this will delete all events
	// associated with a visitor. * `userId`: Double quoted string. Specifying this
	// will delete all events associated with a user. Examples: * Deleting all
	// events in a time range: `eventTime > "2012-04-23T18:25:43.511Z" eventTime <
	// "2012-04-23T18:30:43.511Z" * Deleting specific eventType in time range:
	// `eventTime > "2012-04-23T18:25:43.511Z" eventType = "detail-page-view" *
	// Deleting all events for a specific visitor: `visitorId = "visitor1024" The
	// filtering fields are assumed to have an implicit AND.
	Filter string `json:"filter,omitempty"`
	// Force: Actually perform the purge. If `force` is set to false, the method
	// will return the expected purge count without deleting any user events.
	Force bool `json:"force,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Filter") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PurgeUserEventsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PurgeUserEventsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2PurgeUserEventsResponse: Response of the
// PurgeUserEventsRequest. If the long running operation is successfully done,
// then this message is returned by the google.longrunning.Operations.response
// field.
type GoogleCloudRetailV2PurgeUserEventsResponse struct {
	// PurgedEventsCount: The total count of events purged as a result of the
	// operation.
	PurgedEventsCount int64 `json:"purgedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "PurgedEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PurgedEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2PurgeUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2PurgeUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Rating: The rating of a Product.
type GoogleCloudRetailV2Rating struct {
	// AverageRating: The average rating of the Product. The rating is scaled at
	// 1-5. Otherwise, an INVALID_ARGUMENT error is returned.
	AverageRating float64 `json:"averageRating,omitempty"`
	// RatingCount: The total number of ratings. This value is independent of the
	// value of rating_histogram. This value must be nonnegative. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	RatingCount int64 `json:"ratingCount,omitempty"`
	// RatingHistogram: List of rating counts per rating value (index = rating -
	// 1). The list is empty if there is no rating. If the list is non-empty, its
	// size is always 5. Otherwise, an INVALID_ARGUMENT error is returned. For
	// example, [41, 14, 13, 47, 303]. It means that the Product got 41 ratings
	// with 1 star, 14 ratings with 2 star, and so on.
	RatingHistogram []int64 `json:"ratingHistogram,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AverageRating") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AverageRating") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Rating) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Rating
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2Rating) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2Rating
	var s1 struct {
		AverageRating gensupport.JSONFloat64 `json:"averageRating"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.AverageRating = float64(s1.AverageRating)
	return nil
}

// GoogleCloudRetailV2RejoinUserEventsMetadata: Metadata for `RejoinUserEvents`
// method.
type GoogleCloudRetailV2RejoinUserEventsMetadata struct {
}

// GoogleCloudRetailV2RejoinUserEventsRequest: Request message for
// RejoinUserEvents method.
type GoogleCloudRetailV2RejoinUserEventsRequest struct {
	// UserEventRejoinScope: The type of the user event rejoin to define the scope
	// and range of the user events to be rejoined with the latest product catalog.
	// Defaults to `USER_EVENT_REJOIN_SCOPE_UNSPECIFIED` if this field is not set,
	// or set to an invalid integer value.
	//
	// Possible values:
	//   "USER_EVENT_REJOIN_SCOPE_UNSPECIFIED" - Rejoin all events with the latest
	// product catalog, including both joined events and unjoined events.
	//   "JOINED_EVENTS" - Only rejoin joined events with the latest product
	// catalog.
	//   "UNJOINED_EVENTS" - Only rejoin unjoined events with the latest product
	// catalog.
	UserEventRejoinScope string `json:"userEventRejoinScope,omitempty"`
	// ForceSendFields is a list of field names (e.g. "UserEventRejoinScope") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "UserEventRejoinScope") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RejoinUserEventsRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RejoinUserEventsRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RejoinUserEventsResponse: Response message for
// `RejoinUserEvents` method.
type GoogleCloudRetailV2RejoinUserEventsResponse struct {
	// RejoinedUserEventsCount: Number of user events that were joined with latest
	// product catalog.
	RejoinedUserEventsCount int64 `json:"rejoinedUserEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "RejoinedUserEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "RejoinedUserEventsCount") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RejoinUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RejoinUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RemoveCatalogAttributeRequest: Request for
// CatalogService.RemoveCatalogAttribute method.
type GoogleCloudRetailV2RemoveCatalogAttributeRequest struct {
	// Key: Required. The attribute name key of the CatalogAttribute to remove.
	Key string `json:"key,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Key") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Key") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RemoveCatalogAttributeRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RemoveCatalogAttributeRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RemoveControlRequest: Request for RemoveControl method.
type GoogleCloudRetailV2RemoveControlRequest struct {
	// ControlId: Required. The id of the control to apply. Assumed to be in the
	// same catalog as the serving config.
	ControlId string `json:"controlId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ControlId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ControlId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RemoveControlRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RemoveControlRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RemoveFulfillmentPlacesMetadata: Metadata related to the
// progress of the RemoveFulfillmentPlaces operation. Currently empty because
// there is no meaningful metadata populated from the
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2RemoveFulfillmentPlacesMetadata struct {
}

// GoogleCloudRetailV2RemoveFulfillmentPlacesRequest: Request message for
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2RemoveFulfillmentPlacesRequest struct {
	// AllowMissing: If set to true, and the Product is not found, the fulfillment
	// information will still be processed and retained for at most 1 day and
	// processed once the Product is created. If set to false, a NOT_FOUND error is
	// returned if the Product is not found.
	AllowMissing bool `json:"allowMissing,omitempty"`
	// PlaceIds: Required. The IDs for this type, such as the store IDs for
	// "pickup-in-store" or the region IDs for "same-day-delivery", to be removed
	// for this type. At least 1 value is required, and a maximum of 2000 values
	// are allowed. Each value must be a string with a length limit of 10
	// characters, matching the pattern `[a-zA-Z0-9_-]+`, such as "store1" or
	// "REGION-2". Otherwise, an INVALID_ARGUMENT error is returned.
	PlaceIds []string `json:"placeIds,omitempty"`
	// RemoveTime: The time when the fulfillment updates are issued, used to
	// prevent out-of-order updates on fulfillment information. If not provided,
	// the internal system time will be used.
	RemoveTime string `json:"removeTime,omitempty"`
	// Type: Required. The fulfillment type, including commonly used types (such as
	// pickup in store and same day delivery), and custom types. Supported values:
	// * "pickup-in-store" * "ship-to-store" * "same-day-delivery" *
	// "next-day-delivery" * "custom-type-1" * "custom-type-2" * "custom-type-3" *
	// "custom-type-4" * "custom-type-5" If this field is set to an invalid value
	// other than these, an INVALID_ARGUMENT error is returned. This field directly
	// corresponds to Product.fulfillment_info.type.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AllowMissing") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AllowMissing") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RemoveFulfillmentPlacesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RemoveFulfillmentPlacesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RemoveFulfillmentPlacesResponse: Response of the
// RemoveFulfillmentPlacesRequest. Currently empty because there is no
// meaningful response populated from the
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2RemoveFulfillmentPlacesResponse struct {
}

// GoogleCloudRetailV2RemoveLocalInventoriesMetadata: Metadata related to the
// progress of the RemoveLocalInventories operation. Currently empty because
// there is no meaningful metadata populated from the
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2RemoveLocalInventoriesMetadata struct {
}

// GoogleCloudRetailV2RemoveLocalInventoriesRequest: Request message for
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2RemoveLocalInventoriesRequest struct {
	// AllowMissing: If set to true, and the Product is not found, the local
	// inventory removal request will still be processed and retained for at most 1
	// day and processed once the Product is created. If set to false, a NOT_FOUND
	// error is returned if the Product is not found.
	AllowMissing bool `json:"allowMissing,omitempty"`
	// PlaceIds: Required. A list of place IDs to have their inventory deleted. At
	// most 3000 place IDs are allowed per request.
	PlaceIds []string `json:"placeIds,omitempty"`
	// RemoveTime: The time when the inventory deletions are issued. Used to
	// prevent out-of-order updates and deletions on local inventory fields. If not
	// provided, the internal system time will be used.
	RemoveTime string `json:"removeTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AllowMissing") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AllowMissing") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RemoveLocalInventoriesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RemoveLocalInventoriesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RemoveLocalInventoriesResponse: Response of the
// ProductService.RemoveLocalInventories API. Currently empty because there is
// no meaningful response populated from the
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2RemoveLocalInventoriesResponse struct {
}

// GoogleCloudRetailV2ReplaceCatalogAttributeRequest: Request for
// CatalogService.ReplaceCatalogAttribute method.
type GoogleCloudRetailV2ReplaceCatalogAttributeRequest struct {
	// CatalogAttribute: Required. The updated CatalogAttribute.
	CatalogAttribute *GoogleCloudRetailV2CatalogAttribute `json:"catalogAttribute,omitempty"`
	// UpdateMask: Indicates which fields in the provided CatalogAttribute to
	// update. The following are NOT supported: * CatalogAttribute.key If not set,
	// all supported fields are updated.
	UpdateMask string `json:"updateMask,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CatalogAttribute") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CatalogAttribute") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ReplaceCatalogAttributeRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ReplaceCatalogAttributeRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ResumeModelRequest: Request for resuming training of a
// model.
type GoogleCloudRetailV2ResumeModelRequest struct {
}

// GoogleCloudRetailV2Rule: A rule is a condition-action pair * A condition
// defines when a rule is to be triggered. * An action specifies what occurs on
// that trigger. Currently rules only work for controls with
// SOLUTION_TYPE_SEARCH.
type GoogleCloudRetailV2Rule struct {
	// BoostAction: A boost action.
	BoostAction *GoogleCloudRetailV2RuleBoostAction `json:"boostAction,omitempty"`
	// Condition: Required. The condition that triggers the rule. If the condition
	// is empty, the rule will always apply.
	Condition *GoogleCloudRetailV2Condition `json:"condition,omitempty"`
	// DoNotAssociateAction: Prevents term from being associated with other terms.
	DoNotAssociateAction *GoogleCloudRetailV2RuleDoNotAssociateAction `json:"doNotAssociateAction,omitempty"`
	// FilterAction: Filters results.
	FilterAction *GoogleCloudRetailV2RuleFilterAction `json:"filterAction,omitempty"`
	// ForceReturnFacetAction: Force returns an attribute as a facet in the
	// request.
	ForceReturnFacetAction *GoogleCloudRetailV2RuleForceReturnFacetAction `json:"forceReturnFacetAction,omitempty"`
	// IgnoreAction: Ignores specific terms from query during search.
	IgnoreAction *GoogleCloudRetailV2RuleIgnoreAction `json:"ignoreAction,omitempty"`
	// OnewaySynonymsAction: Treats specific term as a synonym with a group of
	// terms. Group of terms will not be treated as synonyms with the specific
	// term.
	OnewaySynonymsAction *GoogleCloudRetailV2RuleOnewaySynonymsAction `json:"onewaySynonymsAction,omitempty"`
	// PinAction: Pins one or more specified products to a specific position in the
	// results.
	PinAction *GoogleCloudRetailV2RulePinAction `json:"pinAction,omitempty"`
	// RedirectAction: Redirects a shopper to a specific page.
	RedirectAction *GoogleCloudRetailV2RuleRedirectAction `json:"redirectAction,omitempty"`
	// RemoveFacetAction: Remove an attribute as a facet in the request (if
	// present).
	RemoveFacetAction *GoogleCloudRetailV2RuleRemoveFacetAction `json:"removeFacetAction,omitempty"`
	// ReplacementAction: Replaces specific terms in the query.
	ReplacementAction *GoogleCloudRetailV2RuleReplacementAction `json:"replacementAction,omitempty"`
	// TwowaySynonymsAction: Treats a set of terms as synonyms of one another.
	TwowaySynonymsAction *GoogleCloudRetailV2RuleTwowaySynonymsAction `json:"twowaySynonymsAction,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoostAction") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoostAction") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Rule) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Rule
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleBoostAction: A boost action to apply to results
// matching condition specified above.
type GoogleCloudRetailV2RuleBoostAction struct {
	// Boost: Strength of the condition boost, which must be in [-1, 1]. Negative
	// boost means demotion. Default is 0.0. Setting to 1.0 gives the item a big
	// promotion. However, it does not necessarily mean that the boosted item will
	// be the top result at all times, nor that other items will be excluded.
	// Results could still be shown even when none of them matches the condition.
	// And results that are significantly more relevant to the search query can
	// still trump your heavily favored but irrelevant items. Setting to -1.0 gives
	// the item a big demotion. However, results that are deeply relevant might
	// still be shown. The item will have an upstream battle to get a fairly high
	// ranking, but it is not blocked out completely. Setting to 0.0 means no boost
	// applied. The boosting condition is ignored.
	Boost float64 `json:"boost,omitempty"`
	// ProductsFilter: The filter can have a max size of 5000 characters. An
	// expression which specifies which products to apply an action to. The syntax
	// and supported fields are the same as a filter expression. See
	// SearchRequest.filter for detail syntax and limitations. Examples: * To boost
	// products with product ID "product_1" or "product_2", and color "Red" or
	// "Blue": *(id: ANY("product_1", "product_2")) * *AND * *(colorFamilies:
	// ANY("Red", "Blue")) *
	ProductsFilter string `json:"productsFilter,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Boost") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Boost") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleBoostAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleBoostAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2RuleBoostAction) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2RuleBoostAction
	var s1 struct {
		Boost gensupport.JSONFloat64 `json:"boost"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Boost = float64(s1.Boost)
	return nil
}

// GoogleCloudRetailV2RuleDoNotAssociateAction: Prevents `query_term` from
// being associated with specified terms during search. Example: Don't
// associate "gShoe" and "cheap".
type GoogleCloudRetailV2RuleDoNotAssociateAction struct {
	// DoNotAssociateTerms: Cannot contain duplicates or the query term. Can
	// specify up to 100 terms.
	DoNotAssociateTerms []string `json:"doNotAssociateTerms,omitempty"`
	// QueryTerms: Terms from the search query. Will not consider
	// do_not_associate_terms for search if in search query. Can specify up to 100
	// terms.
	QueryTerms []string `json:"queryTerms,omitempty"`
	// Terms: Will be [deprecated = true] post migration;
	Terms []string `json:"terms,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DoNotAssociateTerms") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DoNotAssociateTerms") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleDoNotAssociateAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleDoNotAssociateAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleFilterAction: * Rule Condition: - No
// Condition.query_terms provided is a global match. - 1 or more
// Condition.query_terms provided are combined with OR operator. * Action
// Input: The request query and filter that are applied to the retrieved
// products, in addition to any filters already provided with the
// SearchRequest. The AND operator is used to combine the query's existing
// filters with the filter rule(s). NOTE: May result in 0 results when filters
// conflict. * Action Result: Filters the returned objects to be ONLY those
// that passed the filter.
type GoogleCloudRetailV2RuleFilterAction struct {
	// Filter: A filter to apply on the matching condition results. Supported
	// features: * filter must be set. * Filter syntax is identical to
	// SearchRequest.filter. For more information, see Filter
	// (/retail/docs/filter-and-order#filter). * To filter products with product ID
	// "product_1" or "product_2", and color "Red" or "Blue": *(id:
	// ANY("product_1", "product_2")) * *AND * *(colorFamilies: ANY("Red", "Blue"))
	// *
	Filter string `json:"filter,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Filter") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleFilterAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleFilterAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleForceReturnFacetAction: Force returns an
// attribute/facet in the request around a certain position or above. * Rule
// Condition: Must specify non-empty Condition.query_terms (for search only) or
// Condition.page_categories (for browse only), but can't specify both. *
// Action Inputs: attribute name, position * Action Result: Will force return a
// facet key around a certain position or above if the condition is satisfied.
// Example: Suppose the query is "shoes", the Condition.query_terms is "shoes",
// the ForceReturnFacetAction.FacetPositionAdjustment.attribute_name is "size"
// and the ForceReturnFacetAction.FacetPositionAdjustment.position is 8. Two
// cases: a) The facet key "size" is not already in the top 8 slots, then the
// facet "size" will appear at a position close to 8. b) The facet key "size"
// in among the top 8 positions in the request, then it will stay at its
// current rank.
type GoogleCloudRetailV2RuleForceReturnFacetAction struct {
	// FacetPositionAdjustments: Each instance corresponds to a force return
	// attribute for the given condition. There can't be more 15 instances here.
	FacetPositionAdjustments []*GoogleCloudRetailV2RuleForceReturnFacetActionFacetPositionAdjustment `json:"facetPositionAdjustments,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FacetPositionAdjustments")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FacetPositionAdjustments") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleForceReturnFacetAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleForceReturnFacetAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleForceReturnFacetActionFacetPositionAdjustment: Each
// facet position adjustment consists of a single attribute name (i.e. facet
// key) along with a specified position.
type GoogleCloudRetailV2RuleForceReturnFacetActionFacetPositionAdjustment struct {
	// AttributeName: The attribute name to force return as a facet. Each attribute
	// name should be a valid attribute name, be non-empty and contain at most 80
	// characters long.
	AttributeName string `json:"attributeName,omitempty"`
	// Position: This is the position in the request as explained above. It should
	// be strictly positive be at most 100.
	Position int64 `json:"position,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AttributeName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AttributeName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleForceReturnFacetActionFacetPositionAdjustment) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleForceReturnFacetActionFacetPositionAdjustment
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleIgnoreAction: Prevents a term in the query from being
// used in search. Example: Don't search for "shoddy".
type GoogleCloudRetailV2RuleIgnoreAction struct {
	// IgnoreTerms: Terms to ignore in the search query.
	IgnoreTerms []string `json:"ignoreTerms,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IgnoreTerms") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IgnoreTerms") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleIgnoreAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleIgnoreAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleOnewaySynonymsAction: Maps a set of terms to a set of
// synonyms. Set of synonyms will be treated as synonyms of each query term
// only. `query_terms` will not be treated as synonyms of each other. Example:
// "sneakers" will use a synonym of "shoes". "shoes" will not use a synonym of
// "sneakers".
type GoogleCloudRetailV2RuleOnewaySynonymsAction struct {
	// OnewayTerms: Will be [deprecated = true] post migration;
	OnewayTerms []string `json:"onewayTerms,omitempty"`
	// QueryTerms: Terms from the search query. Will treat synonyms as their
	// synonyms. Not themselves synonyms of the synonyms. Can specify up to 100
	// terms.
	QueryTerms []string `json:"queryTerms,omitempty"`
	// Synonyms: Defines a set of synonyms. Cannot contain duplicates. Can specify
	// up to 100 synonyms.
	Synonyms []string `json:"synonyms,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OnewayTerms") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OnewayTerms") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleOnewaySynonymsAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleOnewaySynonymsAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RulePinAction: Pins one or more specified products to a
// specific position in the results. * Rule Condition: Must specify non-empty
// Condition.query_terms (for search only) or Condition.page_categories (for
// browse only), but can't specify both. * Action Input: mapping of
// `[pin_position, product_id]` pairs (pin position uses 1-based indexing). *
// Action Result: Will pin products with matching ids to the position specified
// in the final result order. Example: Suppose the query is `shoes`, the
// Condition.query_terms is `shoes` and the pin_map has `{1, "pid1"}`, then
// product with `pid1` will be pinned to the top position in the final results.
// If multiple PinActions are matched to a single request the actions will be
// processed from most to least recently updated. Pins to positions larger than
// the max allowed page size of 120 are not allowed.
type GoogleCloudRetailV2RulePinAction struct {
	// PinMap: Required. A map of positions to product_ids. Partial matches per
	// action are allowed, if a certain position in the map is already filled that
	// `[position, product_id]` pair will be ignored but the rest may still be
	// applied. This case will only occur if multiple pin actions are matched to a
	// single request, as the map guarantees that pin positions are unique within
	// the same action. Duplicate product_ids are not permitted within a single pin
	// map. The max size of this map is 120, equivalent to the max request page
	// size
	// (https://cloud.google.com/retail/docs/reference/rest/v2/projects.locations.catalogs.placements/search#request-body).
	PinMap map[string]string `json:"pinMap,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PinMap") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PinMap") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RulePinAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RulePinAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleRedirectAction: Redirects a shopper to a specific
// page. * Rule Condition: Must specify Condition.query_terms. * Action Input:
// Request Query * Action Result: Redirects shopper to provided uri.
type GoogleCloudRetailV2RuleRedirectAction struct {
	// RedirectUri: URL must have length equal or less than 2000 characters.
	RedirectUri string `json:"redirectUri,omitempty"`
	// ForceSendFields is a list of field names (e.g. "RedirectUri") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "RedirectUri") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleRedirectAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleRedirectAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleRemoveFacetAction: Removes an attribute/facet in the
// request if is present. * Rule Condition: Must specify non-empty
// Condition.query_terms (for search only) or Condition.page_categories (for
// browse only), but can't specify both. * Action Input: attribute name *
// Action Result: Will remove the attribute (as a facet) from the request if it
// is present. Example: Suppose the query is "shoes", the Condition.query_terms
// is "shoes" and the attribute name "size", then facet key "size" will be
// removed from the request (if it is present).
type GoogleCloudRetailV2RuleRemoveFacetAction struct {
	// AttributeNames: The attribute names (i.e. facet keys) to remove from the
	// dynamic facets (if present in the request). There can't be more 3 attribute
	// names. Each attribute name should be a valid attribute name, be non-empty
	// and contain at most 80 characters.
	AttributeNames []string `json:"attributeNames,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AttributeNames") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AttributeNames") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleRemoveFacetAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleRemoveFacetAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleReplacementAction: Replaces a term in the query.
// Multiple replacement candidates can be specified. All `query_terms` will be
// replaced with the replacement term. Example: Replace "gShoe" with "google
// shoe".
type GoogleCloudRetailV2RuleReplacementAction struct {
	// QueryTerms: Terms from the search query. Will be replaced by replacement
	// term. Can specify up to 100 terms.
	QueryTerms []string `json:"queryTerms,omitempty"`
	// ReplacementTerm: Term that will be used for replacement.
	ReplacementTerm string `json:"replacementTerm,omitempty"`
	// Term: Will be [deprecated = true] post migration;
	Term string `json:"term,omitempty"`
	// ForceSendFields is a list of field names (e.g. "QueryTerms") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "QueryTerms") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleReplacementAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleReplacementAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2RuleTwowaySynonymsAction: Creates a set of terms that
// will be treated as synonyms of each other. Example: synonyms of "sneakers"
// and "shoes": * "sneakers" will use a synonym of "shoes". * "shoes" will use
// a synonym of "sneakers".
type GoogleCloudRetailV2RuleTwowaySynonymsAction struct {
	// Synonyms: Defines a set of synonyms. Can specify up to 100 synonyms. Must
	// specify at least 2 synonyms.
	Synonyms []string `json:"synonyms,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Synonyms") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Synonyms") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2RuleTwowaySynonymsAction) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2RuleTwowaySynonymsAction
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SafetySetting: Safety settings.
type GoogleCloudRetailV2SafetySetting struct {
	// Category: Harm category.
	//
	// Possible values:
	//   "HARM_CATEGORY_UNSPECIFIED" - The harm category is unspecified.
	//   "HARM_CATEGORY_HATE_SPEECH" - The harm category is hate speech.
	//   "HARM_CATEGORY_DANGEROUS_CONTENT" - The harm category is dangerous
	// content.
	//   "HARM_CATEGORY_HARASSMENT" - The harm category is harassment.
	//   "HARM_CATEGORY_SEXUALLY_EXPLICIT" - The harm category is sexually explicit
	// content.
	//   "HARM_CATEGORY_CIVIC_INTEGRITY" - The harm category is civic integrity.
	Category string `json:"category,omitempty"`
	// Method: Optional. Specify if the threshold is used for probability or
	// severity score. If not specified, the threshold is used for probability
	// score.
	//
	// Possible values:
	//   "HARM_BLOCK_METHOD_UNSPECIFIED" - The harm block method is unspecified.
	//   "SEVERITY" - The harm block method uses both probability and severity
	// scores.
	//   "PROBABILITY" - The harm block method uses the probability score.
	Method string `json:"method,omitempty"`
	// Threshold: The harm block threshold.
	//
	// Possible values:
	//   "HARM_BLOCK_THRESHOLD_UNSPECIFIED" - Unspecified harm block threshold.
	//   "BLOCK_LOW_AND_ABOVE" - Block low threshold and above (i.e. block more).
	//   "BLOCK_MEDIUM_AND_ABOVE" - Block medium threshold and above.
	//   "BLOCK_ONLY_HIGH" - Block only high threshold (i.e. block less).
	//   "BLOCK_NONE" - Block none.
	//   "OFF" - Turn off the safety filter.
	Threshold string `json:"threshold,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Category") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Category") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SafetySetting) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SafetySetting
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequest: Request message for SearchService.Search
// method.
type GoogleCloudRetailV2SearchRequest struct {
	// BoostSpec: Boost specification to boost certain products. For more
	// information, see Boost results
	// (https://cloud.google.com/retail/docs/boosting). Notice that if both
	// ServingConfig.boost_control_ids and SearchRequest.boost_spec are set, the
	// boost conditions from both places are evaluated. If a search request matches
	// multiple boost conditions, the final boost score is equal to the sum of the
	// boost scores from all matched boost conditions.
	BoostSpec *GoogleCloudRetailV2SearchRequestBoostSpec `json:"boostSpec,omitempty"`
	// Branch: The branch resource name, such as
	// `projects/*/locations/global/catalogs/default_catalog/branches/0`. Use
	// "default_branch" as the branch ID or leave this field empty, to search
	// products under the default branch.
	Branch string `json:"branch,omitempty"`
	// CanonicalFilter: The default filter that is applied when a user performs a
	// search without checking any filters on the search page. The filter applied
	// to every search request when quality improvement such as query expansion is
	// needed. In the case a query does not have a sufficient amount of results
	// this filter will be used to determine whether or not to enable the query
	// expansion flow. The original filter will still be used for the query
	// expanded search. This field is strongly recommended to achieve high search
	// quality. For more information about filter syntax, see SearchRequest.filter.
	CanonicalFilter string `json:"canonicalFilter,omitempty"`
	// ConversationalSearchSpec: Optional. This field specifies all conversational
	// related parameters addition to traditional retail search.
	ConversationalSearchSpec *GoogleCloudRetailV2SearchRequestConversationalSearchSpec `json:"conversationalSearchSpec,omitempty"`
	// DynamicFacetSpec: Deprecated. Refer to
	// https://cloud.google.com/retail/docs/configs#dynamic to enable dynamic
	// facets. Do not set this field. The specification for dynamically generated
	// facets. Notice that only textual facets can be dynamically generated.
	DynamicFacetSpec *GoogleCloudRetailV2SearchRequestDynamicFacetSpec `json:"dynamicFacetSpec,omitempty"`
	// Entity: The entity for customers that may run multiple different entities,
	// domains, sites or regions, for example, `Google US`, `Google Ads`, `Waymo`,
	// `google.com`, `youtube.com`, etc. If this is set, it should be exactly
	// matched with UserEvent.entity to get search results boosted by entity.
	Entity string `json:"entity,omitempty"`
	// FacetSpecs: Facet specifications for faceted search. If empty, no facets are
	// returned. A maximum of 200 values are allowed. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	FacetSpecs []*GoogleCloudRetailV2SearchRequestFacetSpec `json:"facetSpecs,omitempty"`
	// Filter: The filter syntax consists of an expression language for
	// constructing a predicate from one or more fields of the products being
	// filtered. Filter expression is case-sensitive. For more information, see
	// Filter (https://cloud.google.com/retail/docs/filter-and-order#filter). If
	// this field is unrecognizable, an INVALID_ARGUMENT is returned.
	Filter string `json:"filter,omitempty"`
	// Labels: The labels applied to a resource must meet the following
	// requirements: * Each resource can have multiple labels, up to a maximum of
	// 64. * Each label must be a key-value pair. * Keys have a minimum length of 1
	// character and a maximum length of 63 characters and cannot be empty. Values
	// can be empty and have a maximum length of 63 characters. * Keys and values
	// can contain only lowercase letters, numeric characters, underscores, and
	// dashes. All characters must use UTF-8 encoding, and international characters
	// are allowed. * The key portion of a label must be unique. However, you can
	// use the same key with multiple resources. * Keys must start with a lowercase
	// letter or international character. For more information, see Requirements
	// for labels
	// (https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements)
	// in the Resource Manager documentation.
	Labels map[string]string `json:"labels,omitempty"`
	// LanguageCode: Optional. The BCP-47 language code, such as "en-US" or
	// "sr-Latn" list (https://www.unicode.org/cldr/charts/46/summary/root.html).
	// For more information, see Standardized codes (https://google.aip.dev/143).
	// This field helps to better interpret the query. If a value isn't specified,
	// the query language code is automatically detected, which may not be
	// accurate.
	LanguageCode string `json:"languageCode,omitempty"`
	// Offset: A 0-indexed integer that specifies the current offset (that is,
	// starting result location, amongst the Products deemed by the API as
	// relevant) in search results. This field is only considered if page_token is
	// unset. If this field is negative, an INVALID_ARGUMENT is returned.
	Offset int64 `json:"offset,omitempty"`
	// OrderBy: The order in which products are returned. Products can be ordered
	// by a field in an Product object. Leave it unset if ordered by relevance.
	// OrderBy expression is case-sensitive. For more information, see Order
	// (https://cloud.google.com/retail/docs/filter-and-order#order). If this field
	// is unrecognizable, an INVALID_ARGUMENT is returned.
	OrderBy string `json:"orderBy,omitempty"`
	// PageCategories: Optional. The categories associated with a category page.
	// Must be set for category navigation queries to achieve good search quality.
	// The format should be the same as UserEvent.page_categories; To represent the
	// full path of category, use '>' sign, with one space on each side, to
	// separate different hierarchies. If '>' is part of the category name, replace
	// it with other character(s). Category pages include special pages such as
	// sales or promotions. For instance, a special sale page may have the category
	// hierarchy: "pageCategories" : ["Sales > 2017 Black Friday Deals"].
	PageCategories []string `json:"pageCategories,omitempty"`
	// PageSize: Maximum number of Products to return. If unspecified, defaults to
	// a reasonable value. The maximum allowed value is 120. Values above 120 will
	// be coerced to 120. If this field is negative, an INVALID_ARGUMENT is
	// returned.
	PageSize int64 `json:"pageSize,omitempty"`
	// PageToken: A page token SearchResponse.next_page_token, received from a
	// previous SearchService.Search call. Provide this to retrieve the subsequent
	// page. When paginating, all other parameters provided to SearchService.Search
	// must match the call that provided the page token. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	PageToken string `json:"pageToken,omitempty"`
	// PersonalizationSpec: The specification for personalization. Notice that if
	// both ServingConfig.personalization_spec and
	// SearchRequest.personalization_spec are set.
	// SearchRequest.personalization_spec will override
	// ServingConfig.personalization_spec.
	PersonalizationSpec *GoogleCloudRetailV2SearchRequestPersonalizationSpec `json:"personalizationSpec,omitempty"`
	// PlaceId: Optional. An id corresponding to a place, such as a store id or
	// region id. When specified, we use the price from the local inventory with
	// the matching product's LocalInventory.place_id for revenue optimization.
	// Note, the currency of the local inventory's price must match the currency of
	// the product's price.
	PlaceId string `json:"placeId,omitempty"`
	// Query: Raw search query. If this field is empty, the request is considered a
	// category browsing request and returned results are based on filter and
	// page_categories.
	Query string `json:"query,omitempty"`
	// QueryExpansionSpec: The query expansion specification that specifies the
	// conditions under which query expansion occurs. For more information, see
	// Query expansion
	// (https://cloud.google.com/retail/docs/result-size#query_expansion).
	QueryExpansionSpec *GoogleCloudRetailV2SearchRequestQueryExpansionSpec `json:"queryExpansionSpec,omitempty"`
	// RegionCode: Optional. The Unicode country/region code (CLDR) of a location,
	// such as "US" and "419" list
	// (https://www.unicode.org/cldr/charts/46/supplemental/territory_information.html).
	// For more information, see Standardized codes (https://google.aip.dev/143).
	// If set, then results will be boosted based on the region_code provided.
	RegionCode string `json:"regionCode,omitempty"`
	// SearchMode: The search mode of the search request. If not specified, a
	// single search request triggers both product search and faceted search.
	//
	// Possible values:
	//   "SEARCH_MODE_UNSPECIFIED" - Default value. In this case both product
	// search and faceted search will be performed. Both
	// SearchResponse.SearchResult and SearchResponse.Facet will be returned.
	//   "PRODUCT_SEARCH_ONLY" - Only product search will be performed. The faceted
	// search will be disabled. Only SearchResponse.SearchResult will be returned.
	// SearchResponse.Facet will not be returned, even if SearchRequest.facet_specs
	// or SearchRequest.dynamic_facet_spec is set.
	//   "FACETED_SEARCH_ONLY" - Only faceted search will be performed. The product
	// search will be disabled. When in this mode, one or both of
	// SearchRequest.facet_specs and SearchRequest.dynamic_facet_spec should be
	// set. Otherwise, an INVALID_ARGUMENT error is returned. Only
	// SearchResponse.Facet will be returned. SearchResponse.SearchResult will not
	// be returned.
	SearchMode string `json:"searchMode,omitempty"`
	// SpellCorrectionSpec: The spell correction specification that specifies the
	// mode under which spell correction will take effect.
	SpellCorrectionSpec *GoogleCloudRetailV2SearchRequestSpellCorrectionSpec `json:"spellCorrectionSpec,omitempty"`
	// TileNavigationSpec: Optional. This field specifies tile navigation related
	// parameters.
	TileNavigationSpec *GoogleCloudRetailV2SearchRequestTileNavigationSpec `json:"tileNavigationSpec,omitempty"`
	// UserAttributes: Optional. The user attributes that could be used for
	// personalization of search results. * Populate at most 100 key-value pairs
	// per query. * Only supports string keys and repeated string values. *
	// Duplicate keys are not allowed within a single query. Example:
	// user_attributes: [ { key: "pets" value { values: "dog" values: "cat" } }, {
	// key: "state" value { values: "CA" } } ]
	UserAttributes map[string]GoogleCloudRetailV2StringList `json:"userAttributes,omitempty"`
	// UserInfo: User information.
	UserInfo *GoogleCloudRetailV2UserInfo `json:"userInfo,omitempty"`
	// VariantRollupKeys: The keys to fetch and rollup the matching variant
	// Products attributes, FulfillmentInfo or LocalInventorys attributes. The
	// attributes from all the matching variant Products or LocalInventorys are
	// merged and de-duplicated. Notice that rollup attributes will lead to extra
	// query latency. Maximum number of keys is 30. For FulfillmentInfo, a
	// fulfillment type and a fulfillment ID must be provided in the format of
	// "fulfillmentType.fulfillmentId". E.g., in "pickupInStore.store123",
	// "pickupInStore" is fulfillment type and "store123" is the store ID.
	// Supported keys are: * colorFamilies * price * originalPrice * discount *
	// variantId * inventory(place_id,price) * inventory(place_id,original_price) *
	// inventory(place_id,attributes.key), where key is any key in the
	// Product.local_inventories.attributes map. * attributes.key, where key is any
	// key in the Product.attributes map. * pickupInStore.id, where id is any
	// FulfillmentInfo.place_ids for FulfillmentInfo.type "pickup-in-store". *
	// shipToStore.id, where id is any FulfillmentInfo.place_ids for
	// FulfillmentInfo.type "ship-to-store". * sameDayDelivery.id, where id is any
	// FulfillmentInfo.place_ids for FulfillmentInfo.type "same-day-delivery". *
	// nextDayDelivery.id, where id is any FulfillmentInfo.place_ids for
	// FulfillmentInfo.type "next-day-delivery". * customFulfillment1.id, where id
	// is any FulfillmentInfo.place_ids for FulfillmentInfo.type "custom-type-1". *
	// customFulfillment2.id, where id is any FulfillmentInfo.place_ids for
	// FulfillmentInfo.type "custom-type-2". * customFulfillment3.id, where id is
	// any FulfillmentInfo.place_ids for FulfillmentInfo.type "custom-type-3". *
	// customFulfillment4.id, where id is any FulfillmentInfo.place_ids for
	// FulfillmentInfo.type "custom-type-4". * customFulfillment5.id, where id is
	// any FulfillmentInfo.place_ids for FulfillmentInfo.type "custom-type-5". If
	// this field is set to an invalid value other than these, an INVALID_ARGUMENT
	// error is returned.
	VariantRollupKeys []string `json:"variantRollupKeys,omitempty"`
	// VisitorId: Required. A unique identifier for tracking visitors. For example,
	// this could be implemented with an HTTP cookie, which should be able to
	// uniquely identify a visitor on a single device. This unique identifier
	// should not change if the visitor logs in or out of the website. This should
	// be the same identifier as UserEvent.visitor_id. The field must be a UTF-8
	// encoded string with a length limit of 128 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	VisitorId string `json:"visitorId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoostSpec") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoostSpec") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestBoostSpec: Boost specification to boost
// certain items.
type GoogleCloudRetailV2SearchRequestBoostSpec struct {
	// ConditionBoostSpecs: Condition boost specifications. If a product matches
	// multiple conditions in the specifications, boost scores from these
	// specifications are all applied and combined in a non-linear way. Maximum
	// number of specifications is 20.
	ConditionBoostSpecs []*GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec `json:"conditionBoostSpecs,omitempty"`
	// SkipBoostSpecValidation: Whether to skip boostspec validation. If this field
	// is set to true, invalid BoostSpec.condition_boost_specs will be ignored and
	// valid BoostSpec.condition_boost_specs will still be applied.
	SkipBoostSpecValidation bool `json:"skipBoostSpecValidation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ConditionBoostSpecs") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ConditionBoostSpecs") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestBoostSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestBoostSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec: Boost applies
// to products which match a condition.
type GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec struct {
	// Boost: Strength of the condition boost, which should be in [-1, 1]. Negative
	// boost means demotion. Default is 0.0. Setting to 1.0 gives the item a big
	// promotion. However, it does not necessarily mean that the boosted item will
	// be the top result at all times, nor that other items will be excluded.
	// Results could still be shown even when none of them matches the condition.
	// And results that are significantly more relevant to the search query can
	// still trump your heavily favored but irrelevant items. Setting to -1.0 gives
	// the item a big demotion. However, results that are deeply relevant might
	// still be shown. The item will have an upstream battle to get a fairly high
	// ranking, but it is not blocked out completely. Setting to 0.0 means no boost
	// applied. The boosting condition is ignored.
	Boost float64 `json:"boost,omitempty"`
	// Condition: An expression which specifies a boost condition. The syntax and
	// supported fields are the same as a filter expression. See
	// SearchRequest.filter for detail syntax and limitations. Examples: * To boost
	// products with product ID "product_1" or "product_2", and color "Red" or
	// "Blue": * (id: ANY("product_1", "product_2")) AND (colorFamilies:
	// ANY("Red","Blue"))
	Condition string `json:"condition,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Boost") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Boost") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec
	var s1 struct {
		Boost gensupport.JSONFloat64 `json:"boost"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Boost = float64(s1.Boost)
	return nil
}

// GoogleCloudRetailV2SearchRequestConversationalSearchSpec: This field
// specifies all conversational related parameters addition to traditional
// retail search.
type GoogleCloudRetailV2SearchRequestConversationalSearchSpec struct {
	// ConversationId: This field specifies the conversation id, which maintains
	// the state of the conversation between client side and server side. Use the
	// value from the previous
	// SearchResponse.ConversationalSearchResult.conversation_id. For the initial
	// request, this should be empty.
	ConversationId string `json:"conversationId,omitempty"`
	// FollowupConversationRequested: This field specifies whether the customer
	// would like to do conversational search. If this field is set to true,
	// conversational related extra information will be returned from server side,
	// including follow-up question, answer options, etc.
	FollowupConversationRequested bool `json:"followupConversationRequested,omitempty"`
	// UserAnswer: This field specifies the current user answer during the
	// conversational search. This can be either user selected from suggested
	// answers or user input plain text.
	UserAnswer *GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswer `json:"userAnswer,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ConversationId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ConversationId") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestConversationalSearchSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestConversationalSearchSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswer: This
// field specifies the current user answer during the conversational search.
// This can be either user selected from suggested answers or user input plain
// text.
type GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswer struct {
	// SelectedAnswer: This field specifies the selected attributes during the
	// conversational search. This should be a subset of
	// SearchResponse.ConversationalSearchResult.suggested_answers.
	SelectedAnswer *GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswerSelectedAnswer `json:"selectedAnswer,omitempty"`
	// TextAnswer: This field specifies the incremental input text from the user
	// during the conversational search.
	TextAnswer string `json:"textAnswer,omitempty"`
	// ForceSendFields is a list of field names (e.g. "SelectedAnswer") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "SelectedAnswer") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswer) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswerSelectedAns
// wer: This field specifies the selected answers during the conversational
// search.
type GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswerSelectedAnswer struct {
	// ProductAttributeValue: This field specifies the selected answer which is a
	// attribute key-value.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// ProductAttributeValues: This field is deprecated and should not be set.
	ProductAttributeValues []*GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValues,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeValue") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswerSelectedAnswer) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestConversationalSearchSpecUserAnswerSelectedAnswer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestDynamicFacetSpec: The specifications of
// dynamically generated facets.
type GoogleCloudRetailV2SearchRequestDynamicFacetSpec struct {
	// Mode: Mode of the DynamicFacet feature. Defaults to Mode.DISABLED if it's
	// unset.
	//
	// Possible values:
	//   "MODE_UNSPECIFIED" - Default value.
	//   "DISABLED" - Disable Dynamic Facet.
	//   "ENABLED" - Automatic mode built by Google Retail Search.
	Mode string `json:"mode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Mode") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Mode") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestDynamicFacetSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestDynamicFacetSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestFacetSpec: A facet specification to perform
// faceted search.
type GoogleCloudRetailV2SearchRequestFacetSpec struct {
	// EnableDynamicPosition: Enables dynamic position for this facet. If set to
	// true, the position of this facet among all facets in the response is
	// determined by Google Retail Search. It is ordered together with dynamic
	// facets if dynamic facets is enabled. If set to false, the position of this
	// facet in the response is the same as in the request, and it is ranked before
	// the facets with dynamic position enable and all dynamic facets. For example,
	// you may always want to have rating facet returned in the response, but it's
	// not necessarily to always display the rating facet at the top. In that case,
	// you can set enable_dynamic_position to true so that the position of rating
	// facet in response is determined by Google Retail Search. Another example,
	// assuming you have the following facets in the request: * "rating",
	// enable_dynamic_position = true * "price", enable_dynamic_position = false *
	// "brands", enable_dynamic_position = false And also you have a dynamic facets
	// enable, which generates a facet "gender". Then, the final order of the
	// facets in the response can be ("price", "brands", "rating", "gender") or
	// ("price", "brands", "gender", "rating") depends on how Google Retail Search
	// orders "gender" and "rating" facets. However, notice that "price" and
	// "brands" are always ranked at first and second position because their
	// enable_dynamic_position values are false.
	EnableDynamicPosition bool `json:"enableDynamicPosition,omitempty"`
	// ExcludedFilterKeys: List of keys to exclude when faceting. By default,
	// FacetKey.key is not excluded from the filter unless it is listed in this
	// field. Listing a facet key in this field allows its values to appear as
	// facet results, even when they are filtered out of search results. Using this
	// field does not affect what search results are returned. For example, suppose
	// there are 100 products with the color facet "Red" and 200 products with the
	// color facet "Blue". A query containing the filter "colorFamilies:ANY("Red")"
	// and having "colorFamilies" as FacetKey.key would by default return only
	// "Red" products in the search results, and also return "Red" with count 100
	// as the only color facet. Although there are also blue products available,
	// "Blue" would not be shown as an available facet value. If "colorFamilies" is
	// listed in "excludedFilterKeys", then the query returns the facet values
	// "Red" with count 100 and "Blue" with count 200, because the "colorFamilies"
	// key is now excluded from the filter. Because this field doesn't affect
	// search results, the search results are still correctly filtered to return
	// only "Red" products. A maximum of 100 values are allowed. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	ExcludedFilterKeys []string `json:"excludedFilterKeys,omitempty"`
	// FacetKey: Required. The facet key specification.
	FacetKey *GoogleCloudRetailV2SearchRequestFacetSpecFacetKey `json:"facetKey,omitempty"`
	// Limit: Maximum of facet values that should be returned for this facet. If
	// unspecified, defaults to 50. The maximum allowed value is 300. Values above
	// 300 will be coerced to 300. If this field is negative, an INVALID_ARGUMENT
	// is returned.
	Limit int64 `json:"limit,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EnableDynamicPosition") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EnableDynamicPosition") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestFacetSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestFacetSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestFacetSpecFacetKey: Specifies how a facet is
// computed.
type GoogleCloudRetailV2SearchRequestFacetSpecFacetKey struct {
	// CaseInsensitive: True to make facet keys case insensitive when getting
	// faceting values with prefixes or contains; false otherwise.
	CaseInsensitive bool `json:"caseInsensitive,omitempty"`
	// Contains: Only get facet values that contains the given strings. For
	// example, suppose "categories" has three values "Women > Shoe", "Women >
	// Dress" and "Men > Shoe". If set "contains" to "Shoe", the "categories" facet
	// gives only "Women > Shoe" and "Men > Shoe". Only supported on textual
	// fields. Maximum is 10.
	Contains []string `json:"contains,omitempty"`
	// Intervals: Set only if values should be bucketized into intervals. Must be
	// set for facets with numerical values. Must not be set for facet with text
	// values. Maximum number of intervals is 40. For all numerical facet keys that
	// appear in the list of products from the catalog, the percentiles 0, 10, 30,
	// 50, 70, 90, and 100 are computed from their distribution weekly. If the
	// model assigns a high score to a numerical facet key and its intervals are
	// not specified in the search request, these percentiles become the bounds for
	// its intervals and are returned in the response. If the facet key intervals
	// are specified in the request, then the specified intervals are returned
	// instead.
	Intervals []*GoogleCloudRetailV2Interval `json:"intervals,omitempty"`
	// Key: Required. Supported textual and numerical facet keys in Product object,
	// over which the facet values are computed. Facet key is case-sensitive.
	// Allowed facet keys when FacetKey.query is not specified: * textual_field = *
	// "brands" * "categories" * "genders" * "ageGroups" * "availability" *
	// "colorFamilies" * "colors" * "sizes" * "materials" * "patterns" *
	// "conditions" * "attributes.key" * "pickupInStore" * "shipToStore" *
	// "sameDayDelivery" * "nextDayDelivery" * "customFulfillment1" *
	// "customFulfillment2" * "customFulfillment3" * "customFulfillment4" *
	// "customFulfillment5" * "inventory(place_id,attributes.key)" *
	// numerical_field = * "price" * "discount" * "rating" * "ratingCount" *
	// "attributes.key" * "inventory(place_id,price)" *
	// "inventory(place_id,original_price)" * "inventory(place_id,attributes.key)"
	Key string `json:"key,omitempty"`
	// OrderBy: The order in which SearchResponse.Facet.values are returned.
	// Allowed values are: * "count desc", which means order by
	// SearchResponse.Facet.values.count descending. * "value desc", which means
	// order by SearchResponse.Facet.values.value descending. Only applies to
	// textual facets. If not set, textual values are sorted in natural order
	// (https://en.wikipedia.org/wiki/Natural_sort_order); numerical intervals are
	// sorted in the order given by FacetSpec.FacetKey.intervals;
	// FulfillmentInfo.place_ids are sorted in the order given by
	// FacetSpec.FacetKey.restricted_values.
	OrderBy string `json:"orderBy,omitempty"`
	// Prefixes: Only get facet values that start with the given string prefix. For
	// example, suppose "categories" has three values "Women > Shoe", "Women >
	// Dress" and "Men > Shoe". If set "prefixes" to "Women", the "categories"
	// facet gives only "Women > Shoe" and "Women > Dress". Only supported on
	// textual fields. Maximum is 10.
	Prefixes []string `json:"prefixes,omitempty"`
	// Query: The query that is used to compute facet for the given facet key. When
	// provided, it overrides the default behavior of facet computation. The query
	// syntax is the same as a filter expression. See SearchRequest.filter for
	// detail syntax and limitations. Notice that there is no limitation on
	// FacetKey.key when query is specified. In the response,
	// SearchResponse.Facet.values.value is always "1" and
	// SearchResponse.Facet.values.count is the number of results that match the
	// query. For example, you can set a customized facet for "shipToStore", where
	// FacetKey.key is "customizedShipToStore", and FacetKey.query is
	// "availability: ANY(\"IN_STOCK\") AND shipToStore: ANY(\"123\")". Then the
	// facet counts the products that are both in stock and ship to store "123".
	Query string `json:"query,omitempty"`
	// RestrictedValues: Only get facet for the given restricted values. For
	// example, when using "pickupInStore" as key and set restricted values to
	// ["store123", "store456"], only facets for "store123" and "store456" are
	// returned. Only supported on predefined textual fields, custom textual
	// attributes and fulfillments. Maximum is 20. Must be set for the fulfillment
	// facet keys: * pickupInStore * shipToStore * sameDayDelivery *
	// nextDayDelivery * customFulfillment1 * customFulfillment2 *
	// customFulfillment3 * customFulfillment4 * customFulfillment5
	RestrictedValues []string `json:"restrictedValues,omitempty"`
	// ReturnMinMax: Returns the min and max value for each numerical facet
	// intervals. Ignored for textual facets.
	ReturnMinMax bool `json:"returnMinMax,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CaseInsensitive") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CaseInsensitive") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestFacetSpecFacetKey) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestFacetSpecFacetKey
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestPersonalizationSpec: The specification for
// personalization.
type GoogleCloudRetailV2SearchRequestPersonalizationSpec struct {
	// Mode: Defaults to Mode.AUTO.
	//
	// Possible values:
	//   "MODE_UNSPECIFIED" - Default value. In this case, server behavior defaults
	// to Mode.AUTO.
	//   "AUTO" - Let CRS decide whether to use personalization based on quality of
	// user event data.
	//   "DISABLED" - Disable personalization.
	Mode string `json:"mode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Mode") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Mode") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestPersonalizationSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestPersonalizationSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestQueryExpansionSpec: Specification to
// determine under which conditions query expansion should occur.
type GoogleCloudRetailV2SearchRequestQueryExpansionSpec struct {
	// Condition: The condition under which query expansion should occur. Default
	// to Condition.DISABLED.
	//
	// Possible values:
	//   "CONDITION_UNSPECIFIED" - Unspecified query expansion condition. In this
	// case, server behavior defaults to Condition.DISABLED.
	//   "DISABLED" - Disabled query expansion. Only the exact search query is
	// used, even if SearchResponse.total_size is zero.
	//   "AUTO" - Automatic query expansion built by Google Retail Search.
	Condition string `json:"condition,omitempty"`
	// PinUnexpandedResults: Whether to pin unexpanded results. The default value
	// is false. If this field is set to true, unexpanded products are always at
	// the top of the search results, followed by the expanded results.
	PinUnexpandedResults bool `json:"pinUnexpandedResults,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Condition") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Condition") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestQueryExpansionSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestQueryExpansionSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestSpellCorrectionSpec: The specification for
// query spell correction.
type GoogleCloudRetailV2SearchRequestSpellCorrectionSpec struct {
	// Mode: The mode under which spell correction should take effect to replace
	// the original search query. Default to Mode.AUTO.
	//
	// Possible values:
	//   "MODE_UNSPECIFIED" - Unspecified spell correction mode. In this case,
	// server behavior defaults to Mode.AUTO.
	//   "SUGGESTION_ONLY" - Google Retail Search will try to find a spell
	// suggestion if there is any and put in the SearchResponse.corrected_query.
	// The spell suggestion will not be used as the search query.
	//   "AUTO" - Automatic spell correction built by Google Retail Search. Search
	// will be based on the corrected query if found.
	Mode string `json:"mode,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Mode") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Mode") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestSpellCorrectionSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestSpellCorrectionSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchRequestTileNavigationSpec: This field specifies
// tile navigation related parameters.
type GoogleCloudRetailV2SearchRequestTileNavigationSpec struct {
	// AppliedTiles: This optional field specifies the tiles which are already
	// clicked in client side. While the feature works without this field set,
	// particularly for an initial query, it is highly recommended to set this
	// field because it can improve the quality of the search response and removes
	// possible duplicate tiles. NOTE: This field is not being used for filtering
	// search products. Client side should also put all the applied tiles in
	// SearchRequest.filter.
	AppliedTiles []*GoogleCloudRetailV2Tile `json:"appliedTiles,omitempty"`
	// TileNavigationRequested: This field specifies whether the customer would
	// like to request tile navigation.
	TileNavigationRequested bool `json:"tileNavigationRequested,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AppliedTiles") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppliedTiles") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchRequestTileNavigationSpec) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchRequestTileNavigationSpec
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponse: Response message for SearchService.Search
// method.
type GoogleCloudRetailV2SearchResponse struct {
	// AppliedControls: The fully qualified resource name of applied controls
	// (https://cloud.google.com/retail/docs/serving-control-rules).
	AppliedControls []string `json:"appliedControls,omitempty"`
	// AttributionToken: A unique search token. This should be included in the
	// UserEvent logs resulting from this search, which enables accurate
	// attribution of search model performance.
	AttributionToken string `json:"attributionToken,omitempty"`
	// ConversationalSearchResult: This field specifies all related information
	// that is needed on client side for UI rendering of conversational retail
	// search.
	ConversationalSearchResult *GoogleCloudRetailV2SearchResponseConversationalSearchResult `json:"conversationalSearchResult,omitempty"`
	// CorrectedQuery: Contains the spell corrected query, if found. The search
	// results are based on corrected_query by default. However, if
	// SearchRequest.SpellCorrectionSpec.mode is set to
	// SearchRequest.SpellCorrectionSpec.Mode.SUGGESTION_ONLY, the original query
	// is used for search.
	CorrectedQuery string `json:"correctedQuery,omitempty"`
	// ExperimentInfo: Metadata related to A/B testing experiment associated with
	// this response. Only exists when an experiment is triggered.
	ExperimentInfo []*GoogleCloudRetailV2ExperimentInfo `json:"experimentInfo,omitempty"`
	// Facets: Results of facets requested by user.
	Facets []*GoogleCloudRetailV2SearchResponseFacet `json:"facets,omitempty"`
	// InvalidConditionBoostSpecs: The invalid
	// SearchRequest.BoostSpec.condition_boost_specs that are not applied during
	// serving.
	InvalidConditionBoostSpecs []*GoogleCloudRetailV2SearchRequestBoostSpecConditionBoostSpec `json:"invalidConditionBoostSpecs,omitempty"`
	// NextPageToken: A token that can be sent as SearchRequest.page_token to
	// retrieve the next page. If this field is omitted, there are no subsequent
	// pages.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// PinControlMetadata: Metadata for pin controls which were applicable to the
	// request. This contains two map fields, one for all matched pins and one for
	// pins which were matched but not applied. The two maps are keyed by pin
	// position, and the values are the product ids which were matched to that pin.
	PinControlMetadata *GoogleCloudRetailV2PinControlMetadata `json:"pinControlMetadata,omitempty"`
	// QueryExpansionInfo: Query expansion information for the returned results.
	QueryExpansionInfo *GoogleCloudRetailV2SearchResponseQueryExpansionInfo `json:"queryExpansionInfo,omitempty"`
	// RedirectUri: The URI of a customer-defined redirect page. If redirect action
	// is triggered, no search is performed, and only redirect_uri and
	// attribution_token are set in the response.
	RedirectUri string `json:"redirectUri,omitempty"`
	// Results: A list of matched items. The order represents the ranking.
	Results []*GoogleCloudRetailV2SearchResponseSearchResult `json:"results,omitempty"`
	// TileNavigationResult: This field specifies all related information for tile
	// navigation that will be used in client side.
	TileNavigationResult *GoogleCloudRetailV2SearchResponseTileNavigationResult `json:"tileNavigationResult,omitempty"`
	// TotalSize: The estimated total count of matched items irrespective of
	// pagination. The count of results returned by pagination may be less than the
	// total_size that matches.
	TotalSize int64 `json:"totalSize,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AppliedControls") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppliedControls") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseConversationalSearchResult: This field
// specifies all related information that is needed on client side for UI
// rendering of conversational retail search.
type GoogleCloudRetailV2SearchResponseConversationalSearchResult struct {
	// AdditionalFilter: This is the incremental additional filters implied from
	// the current user answer. User should add the suggested addition filters to
	// the previous SearchRequest.filter, and use the merged filter in the follow
	// up search request.
	AdditionalFilter *GoogleCloudRetailV2SearchResponseConversationalSearchResultAdditionalFilter `json:"additionalFilter,omitempty"`
	// AdditionalFilters: This field is deprecated but will be kept for backward
	// compatibility. There is expected to have only one additional filter and the
	// value will be the same to the same as field `additional_filter`.
	AdditionalFilters []*GoogleCloudRetailV2SearchResponseConversationalSearchResultAdditionalFilter `json:"additionalFilters,omitempty"`
	// ConversationId: Conversation UUID. This field will be stored in client side
	// storage to maintain the conversation session with server and will be used
	// for next search request's
	// SearchRequest.ConversationalSearchSpec.conversation_id to restore
	// conversation state in server.
	ConversationId string `json:"conversationId,omitempty"`
	// FollowupQuestion: The follow-up question. e.g., `What is the color?`
	FollowupQuestion string `json:"followupQuestion,omitempty"`
	// RefinedQuery: The current refined query for the conversational search. This
	// field will be used in customer UI that the query in the search bar should be
	// replaced with the refined query. For example, if SearchRequest.query is
	// `dress` and next
	// SearchRequest.ConversationalSearchSpec.UserAnswer.text_answer is `red
	// color`, which does not match any product attribute value filters, the
	// refined query will be `dress, red color`.
	RefinedQuery string `json:"refinedQuery,omitempty"`
	// SuggestedAnswers: The answer options provided to client for the follow-up
	// question.
	SuggestedAnswers []*GoogleCloudRetailV2SearchResponseConversationalSearchResultSuggestedAnswer `json:"suggestedAnswers,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AdditionalFilter") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AdditionalFilter") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseConversationalSearchResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseConversationalSearchResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseConversationalSearchResultAdditionalFilter:
// Additional filter that client side need to apply.
type GoogleCloudRetailV2SearchResponseConversationalSearchResultAdditionalFilter struct {
	// ProductAttributeValue: Product attribute value, including an attribute key
	// and an attribute value. Other types can be added here in the future.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeValue") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseConversationalSearchResultAdditionalFilter) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseConversationalSearchResultAdditionalFilter
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseConversationalSearchResultSuggestedAnswer:
// Suggested answers to the follow-up question.
type GoogleCloudRetailV2SearchResponseConversationalSearchResultSuggestedAnswer struct {
	// ProductAttributeValue: Product attribute value, including an attribute key
	// and an attribute value. Other types can be added here in the future.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeValue") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseConversationalSearchResultSuggestedAnswer) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseConversationalSearchResultSuggestedAnswer
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseFacet: A facet result.
type GoogleCloudRetailV2SearchResponseFacet struct {
	// DynamicFacet: Whether the facet is dynamically generated.
	DynamicFacet bool `json:"dynamicFacet,omitempty"`
	// Key: The key for this facet. E.g., "colorFamilies" or "price" or
	// "attributes.attr1".
	Key string `json:"key,omitempty"`
	// Values: The facet values for this field.
	Values []*GoogleCloudRetailV2SearchResponseFacetFacetValue `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DynamicFacet") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DynamicFacet") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseFacet) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseFacet
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseFacetFacetValue: A facet value which
// contains value names and their count.
type GoogleCloudRetailV2SearchResponseFacetFacetValue struct {
	// Count: Number of items that have this facet value.
	Count int64 `json:"count,omitempty,string"`
	// Interval: Interval value for a facet, such as [10, 20) for facet "price".
	Interval *GoogleCloudRetailV2Interval `json:"interval,omitempty"`
	// MaxValue: The maximum value in the FacetValue.interval. Only supported on
	// numerical facets and returned if
	// SearchRequest.FacetSpec.FacetKey.return_min_max is true.
	MaxValue float64 `json:"maxValue,omitempty"`
	// MinValue: The minimum value in the FacetValue.interval. Only supported on
	// numerical facets and returned if
	// SearchRequest.FacetSpec.FacetKey.return_min_max is true.
	MinValue float64 `json:"minValue,omitempty"`
	// Value: Text value of a facet, such as "Black" for facet "colorFamilies".
	Value string `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Count") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Count") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseFacetFacetValue) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseFacetFacetValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleCloudRetailV2SearchResponseFacetFacetValue) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleCloudRetailV2SearchResponseFacetFacetValue
	var s1 struct {
		MaxValue gensupport.JSONFloat64 `json:"maxValue"`
		MinValue gensupport.JSONFloat64 `json:"minValue"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.MaxValue = float64(s1.MaxValue)
	s.MinValue = float64(s1.MinValue)
	return nil
}

// GoogleCloudRetailV2SearchResponseQueryExpansionInfo: Information describing
// query expansion including whether expansion has occurred.
type GoogleCloudRetailV2SearchResponseQueryExpansionInfo struct {
	// ExpandedQuery: Bool describing whether query expansion has occurred.
	ExpandedQuery bool `json:"expandedQuery,omitempty"`
	// PinnedResultCount: Number of pinned results. This field will only be set
	// when expansion happens and
	// SearchRequest.QueryExpansionSpec.pin_unexpanded_results is set to true.
	PinnedResultCount int64 `json:"pinnedResultCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "ExpandedQuery") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExpandedQuery") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseQueryExpansionInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseQueryExpansionInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseSearchResult: Represents the search
// results.
type GoogleCloudRetailV2SearchResponseSearchResult struct {
	// Id: Product.id of the searched Product.
	Id string `json:"id,omitempty"`
	// MatchingVariantCount: The count of matched variant Products.
	MatchingVariantCount int64 `json:"matchingVariantCount,omitempty"`
	// MatchingVariantFields: If a variant Product matches the search query, this
	// map indicates which Product fields are matched. The key is the Product.name,
	// the value is a field mask of the matched Product fields. If matched
	// attributes cannot be determined, this map will be empty. For example, a key
	// "sku1" with field mask "products.color_info" indicates there is a match
	// between "sku1" ColorInfo and the query.
	MatchingVariantFields map[string]string `json:"matchingVariantFields,omitempty"`
	// ModelScores: Google provided available scores.
	ModelScores map[string]GoogleCloudRetailV2DoubleList `json:"modelScores,omitempty"`
	// PersonalLabels: Specifies previous events related to this product for this
	// user based on UserEvent with same SearchRequest.visitor_id or
	// UserInfo.user_id. This is set only when
	// SearchRequest.PersonalizationSpec.mode is
	// SearchRequest.PersonalizationSpec.Mode.AUTO. Possible values: * `purchased`:
	// Indicates that this product has been purchased before.
	PersonalLabels []string `json:"personalLabels,omitempty"`
	// Product: The product data snippet in the search response. Only Product.name
	// is guaranteed to be populated. Product.variants contains the product
	// variants that match the search query. If there are multiple product variants
	// matching the query, top 5 most relevant product variants are returned and
	// ordered by relevancy. If relevancy can be deternmined, use
	// matching_variant_fields to look up matched product variants fields. If
	// relevancy cannot be determined, e.g. when searching "shoe" all products in a
	// shoe product can be a match, 5 product variants are returned but order is
	// meaningless.
	Product *GoogleCloudRetailV2Product `json:"product,omitempty"`
	// VariantRollupValues: The rollup matching variant Product attributes. The key
	// is one of the SearchRequest.variant_rollup_keys. The values are the merged
	// and de-duplicated Product attributes. Notice that the rollup values are
	// respect filter. For example, when filtering by "colorFamilies:ANY(\"red\")"
	// and rollup "colorFamilies", only "red" is returned. For textual and
	// numerical attributes, the rollup values is a list of string or double values
	// with type google.protobuf.ListValue. For example, if there are two variants
	// with colors "red" and "blue", the rollup values are { key: "colorFamilies"
	// value { list_value { values { string_value: "red" } values { string_value:
	// "blue" } } } } For FulfillmentInfo, the rollup values is a double value with
	// type google.protobuf.Value. For example, `{key: "pickupInStore.store1" value
	// { number_value: 10 }}` means a there are 10 variants in this product are
	// available in the store "store1".
	VariantRollupValues googleapi.RawMessage `json:"variantRollupValues,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Id") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Id") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseSearchResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseSearchResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SearchResponseTileNavigationResult: This field specifies
// all related information for tile navigation that will be used in client
// side.
type GoogleCloudRetailV2SearchResponseTileNavigationResult struct {
	// Tiles: The current tiles that are used for tile navigation, sorted by
	// engagement.
	Tiles []*GoogleCloudRetailV2Tile `json:"tiles,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Tiles") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Tiles") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SearchResponseTileNavigationResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SearchResponseTileNavigationResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2ServingConfig: Configures metadata that is used to
// generate serving time results (e.g. search results or recommendation
// predictions).
type GoogleCloudRetailV2ServingConfig struct {
	// BoostControlIds: Condition boost specifications. If a product matches
	// multiple conditions in the specifications, boost scores from these
	// specifications are all applied and combined in a non-linear way. Maximum
	// number of specifications is 100. Notice that if both
	// ServingConfig.boost_control_ids and SearchRequest.boost_spec are set, the
	// boost conditions from both places are evaluated. If a search request matches
	// multiple boost conditions, the final boost score is equal to the sum of the
	// boost scores from all matched boost conditions. Can only be set if
	// solution_types is SOLUTION_TYPE_SEARCH.
	BoostControlIds []string `json:"boostControlIds,omitempty"`
	// DisplayName: Required. The human readable serving config display name. Used
	// in Retail UI. This field must be a UTF-8 encoded string with a length limit
	// of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
	DisplayName string `json:"displayName,omitempty"`
	// DiversityLevel: How much diversity to use in recommendation model results
	// e.g. `medium-diversity` or `high-diversity`. Currently supported values: *
	// `no-diversity` * `low-diversity` * `medium-diversity` * `high-diversity` *
	// `auto-diversity` If not specified, we choose default based on recommendation
	// model type. Default value: `no-diversity`. Can only be set if solution_types
	// is SOLUTION_TYPE_RECOMMENDATION.
	DiversityLevel string `json:"diversityLevel,omitempty"`
	// DiversityType: What kind of diversity to use - data driven or rule based. If
	// unset, the server behavior defaults to RULE_BASED_DIVERSITY.
	//
	// Possible values:
	//   "DIVERSITY_TYPE_UNSPECIFIED" - Default value.
	//   "RULE_BASED_DIVERSITY" - Rule based diversity.
	//   "DATA_DRIVEN_DIVERSITY" - Data driven diversity.
	DiversityType string `json:"diversityType,omitempty"`
	// DoNotAssociateControlIds: Condition do not associate specifications. If
	// multiple do not associate conditions match, all matching do not associate
	// controls in the list will execute. - Order does not matter. - Maximum number
	// of specifications is 100. Can only be set if solution_types is
	// SOLUTION_TYPE_SEARCH.
	DoNotAssociateControlIds []string `json:"doNotAssociateControlIds,omitempty"`
	// DynamicFacetSpec: The specification for dynamically generated facets. Notice
	// that only textual facets can be dynamically generated. Can only be set if
	// solution_types is SOLUTION_TYPE_SEARCH.
	DynamicFacetSpec *GoogleCloudRetailV2SearchRequestDynamicFacetSpec `json:"dynamicFacetSpec,omitempty"`
	// EnableCategoryFilterLevel: Whether to add additional category filters on the
	// `similar-items` model. If not specified, we enable it by default. Allowed
	// values are: * `no-category-match`: No additional filtering of original
	// results from the model and the customer's filters. *
	// `relaxed-category-match`: Only keep results with categories that match at
	// least one item categories in the PredictRequests's context item. * If
	// customer also sends filters in the PredictRequest, then the results will
	// satisfy both conditions (user given and category match). Can only be set if
	// solution_types is SOLUTION_TYPE_RECOMMENDATION.
	EnableCategoryFilterLevel string `json:"enableCategoryFilterLevel,omitempty"`
	// FacetControlIds: Facet specifications for faceted search. If empty, no
	// facets are returned. The ids refer to the ids of Control resources with only
	// the Facet control set. These controls are assumed to be in the same Catalog
	// as the ServingConfig. A maximum of 100 values are allowed. Otherwise, an
	// INVALID_ARGUMENT error is returned. Can only be set if solution_types is
	// SOLUTION_TYPE_SEARCH.
	FacetControlIds []string `json:"facetControlIds,omitempty"`
	// FilterControlIds: Condition filter specifications. If a product matches
	// multiple conditions in the specifications, filters from these specifications
	// are all applied and combined via the AND operator. Maximum number of
	// specifications is 100. Can only be set if solution_types is
	// SOLUTION_TYPE_SEARCH.
	FilterControlIds []string `json:"filterControlIds,omitempty"`
	// IgnoreControlIds: Condition ignore specifications. If multiple ignore
	// conditions match, all matching ignore controls in the list will execute. -
	// Order does not matter. - Maximum number of specifications is 100. Can only
	// be set if solution_types is SOLUTION_TYPE_SEARCH.
	IgnoreControlIds []string `json:"ignoreControlIds,omitempty"`
	// IgnoreRecsDenylist: When the flag is enabled, the products in the denylist
	// will not be filtered out in the recommendation filtering results.
	IgnoreRecsDenylist bool `json:"ignoreRecsDenylist,omitempty"`
	// ModelId: The id of the model in the same Catalog to use at serving time.
	// Currently only RecommendationModels are supported:
	// https://cloud.google.com/retail/recommendations-ai/docs/create-models Can be
	// changed but only to a compatible model (e.g. others-you-may-like CTR to
	// others-you-may-like CVR). Required when solution_types is
	// SOLUTION_TYPE_RECOMMENDATION.
	ModelId string `json:"modelId,omitempty"`
	// Name: Immutable. Fully qualified name
	// `projects/*/locations/global/catalogs/*/servingConfig/*`
	Name string `json:"name,omitempty"`
	// OnewaySynonymsControlIds: Condition oneway synonyms specifications. If
	// multiple oneway synonyms conditions match, all matching oneway synonyms
	// controls in the list will execute. Order of controls in the list will not
	// matter. Maximum number of specifications is 100. Can only be set if
	// solution_types is SOLUTION_TYPE_SEARCH.
	OnewaySynonymsControlIds []string `json:"onewaySynonymsControlIds,omitempty"`
	// PersonalizationSpec: The specification for personalization spec. Can only be
	// set if solution_types is SOLUTION_TYPE_SEARCH. Notice that if both
	// ServingConfig.personalization_spec and SearchRequest.personalization_spec
	// are set. SearchRequest.personalization_spec will override
	// ServingConfig.personalization_spec.
	PersonalizationSpec *GoogleCloudRetailV2SearchRequestPersonalizationSpec `json:"personalizationSpec,omitempty"`
	// PriceRerankingLevel: How much price ranking we want in serving results.
	// Price reranking causes product items with a similar recommendation
	// probability to be ordered by price, with the highest-priced items first.
	// This setting could result in a decrease in click-through and conversion
	// rates. Allowed values are: * `no-price-reranking` * `low-price-reranking` *
	// `medium-price-reranking` * `high-price-reranking` If not specified, we
	// choose default based on model type. Default value: `no-price-reranking`. Can
	// only be set if solution_types is SOLUTION_TYPE_RECOMMENDATION.
	PriceRerankingLevel string `json:"priceRerankingLevel,omitempty"`
	// RedirectControlIds: Condition redirect specifications. Only the first
	// triggered redirect action is applied, even if multiple apply. Maximum number
	// of specifications is 1000. Can only be set if solution_types is
	// SOLUTION_TYPE_SEARCH.
	RedirectControlIds []string `json:"redirectControlIds,omitempty"`
	// ReplacementControlIds: Condition replacement specifications. - Applied
	// according to the order in the list. - A previously replaced term can not be
	// re-replaced. - Maximum number of specifications is 100. Can only be set if
	// solution_types is SOLUTION_TYPE_SEARCH.
	ReplacementControlIds []string `json:"replacementControlIds,omitempty"`
	// SolutionTypes: Required. Immutable. Specifies the solution types that a
	// serving config can be associated with. Currently we support setting only one
	// type of solution.
	//
	// Possible values:
	//   "SOLUTION_TYPE_UNSPECIFIED" - Default value.
	//   "SOLUTION_TYPE_RECOMMENDATION" - Used for Recommendations AI.
	//   "SOLUTION_TYPE_SEARCH" - Used for Retail Search.
	SolutionTypes []string `json:"solutionTypes,omitempty"`
	// TwowaySynonymsControlIds: Condition synonyms specifications. If multiple
	// syonyms conditions match, all matching synonyms control in the list will
	// execute. Order of controls in the list will not matter. Maximum number of
	// specifications is 100. Can only be set if solution_types is
	// SOLUTION_TYPE_SEARCH.
	TwowaySynonymsControlIds []string `json:"twowaySynonymsControlIds,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "BoostControlIds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoostControlIds") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2ServingConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2ServingConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SetDefaultBranchRequest: Request message to set a
// specified branch as new default_branch.
type GoogleCloudRetailV2SetDefaultBranchRequest struct {
	// BranchId: The final component of the resource name of a branch. This field
	// must be one of "0", "1" or "2". Otherwise, an INVALID_ARGUMENT error is
	// returned. If there are no sufficient active products in the targeted branch
	// and force is not set, a FAILED_PRECONDITION error is returned.
	BranchId string `json:"branchId,omitempty"`
	// Force: If set to true, it permits switching to a branch with branch_id even
	// if it has no sufficient active products.
	Force bool `json:"force,omitempty"`
	// Note: Some note on this request, this can be retrieved by
	// CatalogService.GetDefaultBranch before next valid default branch set occurs.
	// This field must be a UTF-8 encoded string with a length limit of 1,000
	// characters. Otherwise, an INVALID_ARGUMENT error is returned.
	Note string `json:"note,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BranchId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BranchId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SetDefaultBranchRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SetDefaultBranchRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SetInventoryMetadata: Metadata related to the progress of
// the SetInventory operation. Currently empty because there is no meaningful
// metadata populated from the ProductService.SetInventory method.
type GoogleCloudRetailV2SetInventoryMetadata struct {
}

// GoogleCloudRetailV2SetInventoryRequest: Request message for
// ProductService.SetInventory method.
type GoogleCloudRetailV2SetInventoryRequest struct {
	// AllowMissing: If set to true, and the Product with name Product.name is not
	// found, the inventory update will still be processed and retained for at most
	// 1 day until the Product is created. If set to false, a NOT_FOUND error is
	// returned if the Product is not found.
	AllowMissing bool `json:"allowMissing,omitempty"`
	// Inventory: Required. The inventory information to update. The allowable
	// fields to update are: * Product.price_info * Product.availability *
	// Product.available_quantity * Product.fulfillment_info The updated inventory
	// fields must be specified in SetInventoryRequest.set_mask. If
	// SetInventoryRequest.inventory.name is empty or invalid, an INVALID_ARGUMENT
	// error is returned. If the caller does not have permission to update the
	// Product named in Product.name, regardless of whether or not it exists, a
	// PERMISSION_DENIED error is returned. If the Product to update does not have
	// existing inventory information, the provided inventory information will be
	// inserted. If the Product to update has existing inventory information, the
	// provided inventory information will be merged while respecting the last
	// update time for each inventory field, using the provided or default value
	// for SetInventoryRequest.set_time. The caller can replace place IDs for a
	// subset of fulfillment types in the following ways: * Adds "fulfillment_info"
	// in SetInventoryRequest.set_mask * Specifies only the desired fulfillment
	// types and corresponding place IDs to update in
	// SetInventoryRequest.inventory.fulfillment_info The caller can clear all
	// place IDs from a subset of fulfillment types in the following ways: * Adds
	// "fulfillment_info" in SetInventoryRequest.set_mask * Specifies only the
	// desired fulfillment types to clear in
	// SetInventoryRequest.inventory.fulfillment_info * Checks that only the
	// desired fulfillment info types have empty
	// SetInventoryRequest.inventory.fulfillment_info.place_ids The last update
	// time is recorded for the following inventory fields: * Product.price_info *
	// Product.availability * Product.available_quantity * Product.fulfillment_info
	// If a full overwrite of inventory information while ignoring timestamps is
	// needed, ProductService.UpdateProduct should be invoked instead.
	Inventory *GoogleCloudRetailV2Product `json:"inventory,omitempty"`
	// SetMask: Indicates which inventory fields in the provided Product to update.
	// At least one field must be provided. If an unsupported or unknown field is
	// provided, an INVALID_ARGUMENT error is returned and the entire update will
	// be ignored.
	SetMask string `json:"setMask,omitempty"`
	// SetTime: The time when the request is issued, used to prevent out-of-order
	// updates on inventory fields with the last update time recorded. If not
	// provided, the internal system time will be used.
	SetTime string `json:"setTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AllowMissing") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AllowMissing") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2SetInventoryRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2SetInventoryRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2SetInventoryResponse: Response of the
// SetInventoryRequest. Currently empty because there is no meaningful response
// populated from the ProductService.SetInventory method.
type GoogleCloudRetailV2SetInventoryResponse struct {
}

// GoogleCloudRetailV2StringList: A list of string values.
type GoogleCloudRetailV2StringList struct {
	// Values: String values.
	Values []string `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Values") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Values") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2StringList) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2StringList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2Tile: This field specifies the tile information including
// an attribute key, attribute value. More fields will be added in the future,
// eg: product id or product counts, etc.
type GoogleCloudRetailV2Tile struct {
	// ProductAttributeInterval: The product attribute key-numeric interval.
	ProductAttributeInterval *GoogleCloudRetailV2ProductAttributeInterval `json:"productAttributeInterval,omitempty"`
	// ProductAttributeValue: The product attribute key-value.
	ProductAttributeValue *GoogleCloudRetailV2ProductAttributeValue `json:"productAttributeValue,omitempty"`
	// RepresentativeProductId: The representative product id for this tile.
	RepresentativeProductId string `json:"representativeProductId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ProductAttributeInterval")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ProductAttributeInterval") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2Tile) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2Tile
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2TuneModelMetadata: Metadata associated with a tune
// operation.
type GoogleCloudRetailV2TuneModelMetadata struct {
	// Model: The resource name of the model that this tune applies to. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}`
	Model string `json:"model,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Model") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Model") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2TuneModelMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2TuneModelMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2TuneModelRequest: Request to manually start a tuning
// process now (instead of waiting for the periodically scheduled tuning to
// happen).
type GoogleCloudRetailV2TuneModelRequest struct {
}

// GoogleCloudRetailV2TuneModelResponse: Response associated with a tune
// operation.
type GoogleCloudRetailV2TuneModelResponse struct {
}

// GoogleCloudRetailV2UpdateGenerativeQuestionConfigRequest: Request for
// UpdateGenerativeQuestionConfig method.
type GoogleCloudRetailV2UpdateGenerativeQuestionConfigRequest struct {
	// GenerativeQuestionConfig: Required. The question to update.
	GenerativeQuestionConfig *GoogleCloudRetailV2GenerativeQuestionConfig `json:"generativeQuestionConfig,omitempty"`
	// UpdateMask: Optional. Indicates which fields in the provided
	// GenerativeQuestionConfig to update. The following are NOT supported: *
	// GenerativeQuestionConfig.frequency If not set or empty, all supported fields
	// are updated.
	UpdateMask string `json:"updateMask,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GenerativeQuestionConfig")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GenerativeQuestionConfig") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2UpdateGenerativeQuestionConfigRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2UpdateGenerativeQuestionConfigRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2UserEvent: UserEvent captures all metadata information
// Retail API needs to know about how end users interact with customers'
// website.
type GoogleCloudRetailV2UserEvent struct {
	// Attributes: Extra user event features to include in the recommendation
	// model. If you provide custom attributes for ingested user events, also
	// include them in the user events that you associate with prediction requests.
	// Custom attribute formatting must be consistent between imported events and
	// events provided with prediction requests. This lets the Retail API use those
	// custom attributes when training models and serving predictions, which helps
	// improve recommendation quality. This field needs to pass all below criteria,
	// otherwise an INVALID_ARGUMENT error is returned: * The key must be a UTF-8
	// encoded string with a length limit of 5,000 characters. * For text
	// attributes, at most 400 values are allowed. Empty values are not allowed.
	// Each value must be a UTF-8 encoded string with a length limit of 256
	// characters. * For number attributes, at most 400 values are allowed. For
	// product recommendations, an example of extra user information is
	// traffic_channel, which is how a user arrives at the site. Users can arrive
	// at the site by coming to the site directly, coming through Google search, or
	// in other ways.
	Attributes map[string]GoogleCloudRetailV2CustomAttribute `json:"attributes,omitempty"`
	// AttributionToken: Highly recommended for user events that are the result of
	// PredictionService.Predict. This field enables accurate attribution of
	// recommendation model performance. The value must be a valid
	// PredictResponse.attribution_token for user events that are the result of
	// PredictionService.Predict. The value must be a valid
	// SearchResponse.attribution_token for user events that are the result of
	// SearchService.Search. This token enables us to accurately attribute page
	// view or purchase back to the event and the particular predict response
	// containing this clicked/purchased product. If user clicks on product K in
	// the recommendation results, pass PredictResponse.attribution_token as a URL
	// parameter to product K's page. When recording events on product K's page,
	// log the PredictResponse.attribution_token to this field.
	AttributionToken string `json:"attributionToken,omitempty"`
	// CartId: The ID or name of the associated shopping cart. This ID is used to
	// associate multiple items added or present in the cart before purchase. This
	// can only be set for `add-to-cart`, `purchase-complete`, or
	// `shopping-cart-page-view` events.
	CartId string `json:"cartId,omitempty"`
	// CompletionDetail: The main auto-completion details related to the event.
	// This field should be set for `search` event when autocomplete function is
	// enabled and the user clicks a suggestion for search.
	CompletionDetail *GoogleCloudRetailV2CompletionDetail `json:"completionDetail,omitempty"`
	// Entity: The entity for customers that may run multiple different entities,
	// domains, sites or regions, for example, `Google US`, `Google Ads`, `Waymo`,
	// `google.com`, `youtube.com`, etc. We recommend that you set this field to
	// get better per-entity search, completion, and prediction results.
	Entity string `json:"entity,omitempty"`
	// EventTime: Only required for UserEventService.ImportUserEvents method.
	// Timestamp of when the user event happened.
	EventTime string `json:"eventTime,omitempty"`
	// EventType: Required. User event type. Allowed values are: * `add-to-cart`:
	// Products being added to cart. * `remove-from-cart`: Products being removed
	// from cart. * `category-page-view`: Special pages such as sale or promotion
	// pages viewed. * `detail-page-view`: Products detail page viewed. *
	// `home-page-view`: Homepage viewed. * `purchase-complete`: User finishing a
	// purchase. * `search`: Product search. * `shopping-cart-page-view`: User
	// viewing a shopping cart.
	EventType string `json:"eventType,omitempty"`
	// ExperimentIds: A list of identifiers for the independent experiment groups
	// this user event belongs to. This is used to distinguish between user events
	// associated with different experiment setups (e.g. using Retail API, using
	// different recommendation models).
	ExperimentIds []string `json:"experimentIds,omitempty"`
	// Filter: The filter syntax consists of an expression language for
	// constructing a predicate from one or more fields of the products being
	// filtered. See SearchRequest.filter for definition and syntax. The value must
	// be a UTF-8 encoded string with a length limit of 1,000 characters.
	// Otherwise, an INVALID_ARGUMENT error is returned.
	Filter string `json:"filter,omitempty"`
	// Offset: An integer that specifies the current offset for pagination (the
	// 0-indexed starting location, amongst the products deemed by the API as
	// relevant). See SearchRequest.offset for definition. If this field is
	// negative, an INVALID_ARGUMENT is returned. This can only be set for `search`
	// events. Other event types should not set this field. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	Offset int64 `json:"offset,omitempty"`
	// OrderBy: The order in which products are returned. See
	// SearchRequest.order_by for definition and syntax. The value must be a UTF-8
	// encoded string with a length limit of 1,000 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. This can only be set for `search`
	// events. Other event types should not set this field. Otherwise, an
	// INVALID_ARGUMENT error is returned.
	OrderBy string `json:"orderBy,omitempty"`
	// PageCategories: Optional. The categories associated with a category page. To
	// represent the full path of category, use the '>' sign, with one space on
	// each side, to separate different hierarchies. If '>' is part of the category
	// name, replace it with other character(s). Category pages include special
	// pages such as sales or promotions. For instance, a special sale page may
	// have the category hierarchy: "pageCategories" : ["Sales > 2017 Black Friday
	// Deals"]. Required for `category-page-view` events. At least one of
	// search_query or page_categories is required for `search` events. Other event
	// types should not set this field. Otherwise, an INVALID_ARGUMENT error is
	// returned.
	PageCategories []string `json:"pageCategories,omitempty"`
	// PageViewId: A unique ID of a web page view. This should be kept the same for
	// all user events triggered from the same pageview. For example, an item
	// detail page view could trigger multiple events as the user is browsing the
	// page. The `pageViewId` property should be kept the same for all these events
	// so that they can be grouped together properly. When using the client side
	// event reporting with JavaScript pixel and Google Tag Manager, this value is
	// filled in automatically.
	PageViewId string `json:"pageViewId,omitempty"`
	// Panels: Optional. List of panels associated with this event. Used for
	// panel-level impression data.
	Panels []*GoogleCloudRetailV2PanelInfo `json:"panels,omitempty"`
	// ProductDetails: The main product details related to the event. This field is
	// optional except for the following event types: * `add-to-cart` *
	// `detail-page-view` * `purchase-complete` In a `search` event, this field
	// represents the products returned to the end user on the current page (the
	// end user may have not finished browsing the whole page yet). When a new page
	// is returned to the end user, after pagination/filtering/ordering even for
	// the same query, a new `search` event with different product_details is
	// desired. The end user may have not finished browsing the whole page yet.
	ProductDetails []*GoogleCloudRetailV2ProductDetail `json:"productDetails,omitempty"`
	// PurchaseTransaction: A transaction represents the entire purchase
	// transaction. Required for `purchase-complete` events. Other event types
	// should not set this field. Otherwise, an INVALID_ARGUMENT error is returned.
	PurchaseTransaction *GoogleCloudRetailV2PurchaseTransaction `json:"purchaseTransaction,omitempty"`
	// ReferrerUri: The referrer URL of the current page. When using the client
	// side event reporting with JavaScript pixel and Google Tag Manager, this
	// value is filled in automatically.
	ReferrerUri string `json:"referrerUri,omitempty"`
	// SearchQuery: The user's search query. See SearchRequest.query for
	// definition. The value must be a UTF-8 encoded string with a length limit of
	// 5,000 characters. Otherwise, an INVALID_ARGUMENT error is returned. At least
	// one of search_query or page_categories is required for `search` events.
	// Other event types should not set this field. Otherwise, an INVALID_ARGUMENT
	// error is returned.
	SearchQuery string `json:"searchQuery,omitempty"`
	// SessionId: A unique identifier for tracking a visitor session with a length
	// limit of 128 bytes. A session is an aggregation of an end user behavior in a
	// time span. A general guideline to populate the session_id: 1. If user has no
	// activity for 30 min, a new session_id should be assigned. 2. The session_id
	// should be unique across users, suggest use uuid or add visitor_id as prefix.
	SessionId string `json:"sessionId,omitempty"`
	// Uri: Complete URL (window.location.href) of the user's current page. When
	// using the client side event reporting with JavaScript pixel and Google Tag
	// Manager, this value is filled in automatically. Maximum length 5,000
	// characters.
	Uri string `json:"uri,omitempty"`
	// UserInfo: User information.
	UserInfo *GoogleCloudRetailV2UserInfo `json:"userInfo,omitempty"`
	// VisitorId: Required. A unique identifier for tracking visitors. For example,
	// this could be implemented with an HTTP cookie, which should be able to
	// uniquely identify a visitor on a single device. This unique identifier
	// should not change if the visitor log in/out of the website. Don't set the
	// field to the same fixed ID for different users. This mixes the event history
	// of those users together, which results in degraded model quality. The field
	// must be a UTF-8 encoded string with a length limit of 128 characters.
	// Otherwise, an INVALID_ARGUMENT error is returned. The field should not
	// contain PII or user-data. We recommend to use Google Analytics Client ID
	// (https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference#clientId)
	// for this field.
	VisitorId string `json:"visitorId,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Attributes") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Attributes") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2UserEvent) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2UserEvent
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2UserEventImportSummary: A summary of import result. The
// UserEventImportSummary summarizes the import status for user events.
type GoogleCloudRetailV2UserEventImportSummary struct {
	// JoinedEventsCount: Count of user events imported with complete existing
	// catalog information.
	JoinedEventsCount int64 `json:"joinedEventsCount,omitempty,string"`
	// UnjoinedEventsCount: Count of user events imported, but with catalog
	// information not found in the imported catalog.
	UnjoinedEventsCount int64 `json:"unjoinedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "JoinedEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "JoinedEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2UserEventImportSummary) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2UserEventImportSummary
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2UserEventInlineSource: The inline source for the input
// config for ImportUserEvents method.
type GoogleCloudRetailV2UserEventInlineSource struct {
	// UserEvents: Required. A list of user events to import. Recommended max of
	// 10k items.
	UserEvents []*GoogleCloudRetailV2UserEvent `json:"userEvents,omitempty"`
	// ForceSendFields is a list of field names (e.g. "UserEvents") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "UserEvents") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2UserEventInlineSource) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2UserEventInlineSource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2UserEventInputConfig: The input config source for user
// events.
type GoogleCloudRetailV2UserEventInputConfig struct {
	// BigQuerySource: Required. BigQuery input source.
	BigQuerySource *GoogleCloudRetailV2BigQuerySource `json:"bigQuerySource,omitempty"`
	// GcsSource: Required. Google Cloud Storage location for the input content.
	GcsSource *GoogleCloudRetailV2GcsSource `json:"gcsSource,omitempty"`
	// UserEventInlineSource: Required. The Inline source for the input content for
	// UserEvents.
	UserEventInlineSource *GoogleCloudRetailV2UserEventInlineSource `json:"userEventInlineSource,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigQuerySource") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigQuerySource") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2UserEventInputConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2UserEventInputConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2UserInfo: Information of an end user.
type GoogleCloudRetailV2UserInfo struct {
	// DirectUserRequest: True if the request is made directly from the end user,
	// in which case the ip_address and user_agent can be populated from the HTTP
	// request. This flag should be set only if the API request is made directly
	// from the end user such as a mobile app (and not if a gateway or a server is
	// processing and pushing the user events). This should not be set when using
	// the JavaScript tag in UserEventService.CollectUserEvent.
	DirectUserRequest bool `json:"directUserRequest,omitempty"`
	// IpAddress: The end user's IP address. This field is used to extract location
	// information for personalization. This field must be either an IPv4 address
	// (e.g. "104.133.9.80") or an IPv6 address (e.g.
	// "2001:0db8:85a3:0000:0000:8a2e:0370:7334"). Otherwise, an INVALID_ARGUMENT
	// error is returned. This should not be set when: * setting
	// SearchRequest.user_info. * using the JavaScript tag in
	// UserEventService.CollectUserEvent or if direct_user_request is set.
	IpAddress string `json:"ipAddress,omitempty"`
	// UserAgent: User agent as included in the HTTP header. The field must be a
	// UTF-8 encoded string with a length limit of 1,000 characters. Otherwise, an
	// INVALID_ARGUMENT error is returned. This should not be set when using the
	// client side event reporting with GTM or JavaScript tag in
	// UserEventService.CollectUserEvent or if direct_user_request is set.
	UserAgent string `json:"userAgent,omitempty"`
	// UserId: Highly recommended for logged-in users. Unique identifier for
	// logged-in user, such as a user name. Don't set for anonymous users. Always
	// use a hashed value for this ID. Don't set the field to the same fixed ID for
	// different users. This mixes the event history of those users together, which
	// results in degraded model quality. The field must be a UTF-8 encoded string
	// with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error
	// is returned.
	UserId string `json:"userId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DirectUserRequest") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DirectUserRequest") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2UserInfo) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2UserInfo
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaAddFulfillmentPlacesMetadata: Metadata related to
// the progress of the AddFulfillmentPlaces operation. Currently empty because
// there is no meaningful metadata populated from the
// ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2alphaAddFulfillmentPlacesMetadata struct {
}

// GoogleCloudRetailV2alphaAddFulfillmentPlacesResponse: Response of the
// AddFulfillmentPlacesRequest. Currently empty because there is no meaningful
// response populated from the ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2alphaAddFulfillmentPlacesResponse struct {
}

// GoogleCloudRetailV2alphaAddLocalInventoriesMetadata: Metadata related to the
// progress of the AddLocalInventories operation. Currently empty because there
// is no meaningful metadata populated from the
// ProductService.AddLocalInventories method.
type GoogleCloudRetailV2alphaAddLocalInventoriesMetadata struct {
}

// GoogleCloudRetailV2alphaAddLocalInventoriesResponse: Response of the
// ProductService.AddLocalInventories API. Currently empty because there is no
// meaningful response populated from the ProductService.AddLocalInventories
// method.
type GoogleCloudRetailV2alphaAddLocalInventoriesResponse struct {
}

// GoogleCloudRetailV2alphaBigQueryOutputResult: A BigQuery output result.
type GoogleCloudRetailV2alphaBigQueryOutputResult struct {
	// DatasetId: The ID of a BigQuery Dataset.
	DatasetId string `json:"datasetId,omitempty"`
	// TableId: The ID of a BigQuery Table.
	TableId string `json:"tableId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DatasetId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DatasetId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaBigQueryOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaBigQueryOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaCreateMerchantCenterAccountLinkMetadata: Common
// metadata related to the progress of the operations.
type GoogleCloudRetailV2alphaCreateMerchantCenterAccountLinkMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaCreateMerchantCenterAccountLinkMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaCreateMerchantCenterAccountLinkMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaCreateModelMetadata: Metadata associated with a
// create operation.
type GoogleCloudRetailV2alphaCreateModelMetadata struct {
	// Model: The resource name of the model that this create applies to. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}`
	Model string `json:"model,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Model") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Model") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaCreateModelMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaCreateModelMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaEnrollSolutionMetadata: Metadata related to the
// EnrollSolution method. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2alphaEnrollSolutionMetadata struct {
}

// GoogleCloudRetailV2alphaEnrollSolutionResponse: Response for EnrollSolution
// method.
type GoogleCloudRetailV2alphaEnrollSolutionResponse struct {
	// EnrolledSolution: Retail API solution that the project has enrolled.
	//
	// Possible values:
	//   "SOLUTION_TYPE_UNSPECIFIED" - Default value.
	//   "SOLUTION_TYPE_RECOMMENDATION" - Used for Recommendations AI.
	//   "SOLUTION_TYPE_SEARCH" - Used for Retail Search.
	EnrolledSolution string `json:"enrolledSolution,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EnrolledSolution") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EnrolledSolution") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaEnrollSolutionResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaEnrollSolutionResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaExportAnalyticsMetricsResponse: Response of the
// ExportAnalyticsMetricsRequest. If the long running operation was successful,
// then this message is returned by the google.longrunning.Operations.response
// field if the operation was successful.
type GoogleCloudRetailV2alphaExportAnalyticsMetricsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2alphaExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2alphaOutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaExportAnalyticsMetricsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaExportAnalyticsMetricsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaExportErrorsConfig: Configuration of destination for
// Export related errors.
type GoogleCloudRetailV2alphaExportErrorsConfig struct {
	// GcsPrefix: Google Cloud Storage path for import errors. This must be an
	// empty, existing Cloud Storage bucket. Export errors will be written to a
	// file in this bucket, one per line, as a JSON-encoded `google.rpc.Status`
	// message.
	GcsPrefix string `json:"gcsPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPrefix") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaExportErrorsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaExportErrorsConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaExportMetadata: Metadata related to the progress of
// the Export operation. This is returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2alphaExportMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaExportMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaExportMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaExportProductsResponse: Response of the
// ExportProductsRequest. If the long running operation is done, then this
// message is returned by the google.longrunning.Operations.response field if
// the operation was successful.
type GoogleCloudRetailV2alphaExportProductsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2alphaExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2alphaOutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaExportProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaExportProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaExportUserEventsResponse: Response of the
// ExportUserEventsRequest. If the long running operation was successful, then
// this message is returned by the google.longrunning.Operations.response field
// if the operation was successful.
type GoogleCloudRetailV2alphaExportUserEventsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2alphaExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2alphaOutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaExportUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaExportUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaGcsOutputResult: A Gcs output result.
type GoogleCloudRetailV2alphaGcsOutputResult struct {
	// OutputUri: The uri of Gcs output
	OutputUri string `json:"outputUri,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OutputUri") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OutputUri") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaGcsOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaGcsOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaImportCompletionDataResponse: Response of the
// ImportCompletionDataRequest. If the long running operation is done, this
// message is returned by the google.longrunning.Operations.response field if
// the operation is successful.
type GoogleCloudRetailV2alphaImportCompletionDataResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaImportCompletionDataResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaImportCompletionDataResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaImportErrorsConfig: Configuration of destination for
// Import related errors.
type GoogleCloudRetailV2alphaImportErrorsConfig struct {
	// GcsPrefix: Google Cloud Storage prefix for import errors. This must be an
	// empty, existing Cloud Storage directory. Import errors are written to
	// sharded files in this directory, one per line, as a JSON-encoded
	// `google.rpc.Status` message.
	GcsPrefix string `json:"gcsPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPrefix") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaImportErrorsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaImportErrorsConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaImportMetadata: Metadata related to the progress of
// the Import operation. This is returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2alphaImportMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// FailureCount: Count of entries that encountered errors while processing.
	FailureCount int64 `json:"failureCount,omitempty,string"`
	// NotificationPubsubTopic: Pub/Sub topic for receiving notification. If this
	// field is set, when the import is finished, a notification is sent to
	// specified Pub/Sub topic. The message data is JSON string of a Operation.
	// Format of the Pub/Sub topic is `projects/{project}/topics/{topic}`.
	NotificationPubsubTopic string `json:"notificationPubsubTopic,omitempty"`
	// RequestId: Deprecated. This field is never set.
	RequestId string `json:"requestId,omitempty"`
	// SuccessCount: Count of entries that were processed successfully.
	SuccessCount int64 `json:"successCount,omitempty,string"`
	// TransformedUserEventsMetadata: Metadata related to transform user events.
	TransformedUserEventsMetadata *GoogleCloudRetailV2alphaTransformedUserEventsMetadata `json:"transformedUserEventsMetadata,omitempty"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaImportMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaImportMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaImportProductsResponse: Response of the
// ImportProductsRequest. If the long running operation is done, then this
// message is returned by the google.longrunning.Operations.response field if
// the operation was successful.
type GoogleCloudRetailV2alphaImportProductsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: Echoes the destination for the complete errors in the request
	// if set.
	ErrorsConfig *GoogleCloudRetailV2alphaImportErrorsConfig `json:"errorsConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaImportProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaImportProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaImportUserEventsResponse: Response of the
// ImportUserEventsRequest. If the long running operation was successful, then
// this message is returned by the google.longrunning.Operations.response field
// if the operation was successful.
type GoogleCloudRetailV2alphaImportUserEventsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: Echoes the destination for the complete errors if this field
	// was set in the request.
	ErrorsConfig *GoogleCloudRetailV2alphaImportErrorsConfig `json:"errorsConfig,omitempty"`
	// ImportSummary: Aggregated statistics of user event import status.
	ImportSummary *GoogleCloudRetailV2alphaUserEventImportSummary `json:"importSummary,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaImportUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaImportUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaMerchantCenterAccountLink: Represents a link between
// a Merchant Center account and a branch. After a link is established,
// products from the linked Merchant Center account are streamed to the linked
// branch.
type GoogleCloudRetailV2alphaMerchantCenterAccountLink struct {
	// BranchId: Required. The branch ID (e.g. 0/1/2) within the catalog that
	// products from merchant_center_account_id are streamed to. When updating this
	// field, an empty value will use the currently configured default branch.
	// However, changing the default branch later on won't change the linked branch
	// here. A single branch ID can only have one linked Merchant Center account
	// ID.
	BranchId string `json:"branchId,omitempty"`
	// FeedFilters: Criteria for the Merchant Center feeds to be ingested via the
	// link. All offers will be ingested if the list is empty. Otherwise the offers
	// will be ingested from selected feeds.
	FeedFilters []*GoogleCloudRetailV2alphaMerchantCenterAccountLinkMerchantCenterFeedFilter `json:"feedFilters,omitempty"`
	// FeedLabel: The FeedLabel used to perform filtering. Note: this replaces
	// region_id
	// (https://developers.google.com/shopping-content/reference/rest/v2.1/products#Product.FIELDS.feed_label).
	// Example value: `US`. Example value: `FeedLabel1`.
	FeedLabel string `json:"feedLabel,omitempty"`
	// Id: Output only. Immutable. MerchantCenterAccountLink identifier, which is
	// the final component of name. This field is auto generated and follows the
	// convention: `BranchId_MerchantCenterAccountId`.
	// `projects/*/locations/global/catalogs/default_catalog/merchantCenterAccountLi
	// nks/id_1`.
	Id string `json:"id,omitempty"`
	// LanguageCode: Language of the title/description and other string attributes.
	// Use language tags defined by BCP 47
	// (https://www.rfc-editor.org/rfc/bcp/bcp47.txt). ISO 639-1. This specifies
	// the language of offers in Merchant Center that will be accepted. If empty,
	// no language filtering will be performed. Example value: `en`.
	LanguageCode string `json:"languageCode,omitempty"`
	// MerchantCenterAccountId: Required. The linked Merchant center account id
	// (https://developers.google.com/shopping-content/guides/accountstatuses). The
	// account must be a standalone account or a sub-account of a MCA.
	MerchantCenterAccountId int64 `json:"merchantCenterAccountId,omitempty,string"`
	// Name: Output only. Immutable. Full resource name of the Merchant Center
	// Account Link, such as
	// `projects/*/locations/global/catalogs/default_catalog/merchantCenterAccountLi
	// nks/merchant_center_account_link`.
	Name string `json:"name,omitempty"`
	// ProjectId: Output only. Google Cloud project ID.
	ProjectId string `json:"projectId,omitempty"`
	// Source: Optional. An optional arbitrary string that could be used as a tag
	// for tracking link source.
	Source string `json:"source,omitempty"`
	// State: Output only. Represents the state of the link.
	//
	// Possible values:
	//   "STATE_UNSPECIFIED" - Default value.
	//   "PENDING" - Link is created and LRO is not complete.
	//   "ACTIVE" - Link is active.
	//   "FAILED" - Link creation failed.
	State string `json:"state,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BranchId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BranchId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaMerchantCenterAccountLink) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaMerchantCenterAccountLink
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaMerchantCenterAccountLinkMerchantCenterFeedFilter:
// Merchant Center Feed filter criterion.
type GoogleCloudRetailV2alphaMerchantCenterAccountLinkMerchantCenterFeedFilter struct {
	// DataSourceId: AFM data source ID.
	DataSourceId int64 `json:"dataSourceId,omitempty,string"`
	// PrimaryFeedId: Merchant Center primary feed ID. Deprecated: use
	// data_source_id instead.
	PrimaryFeedId int64 `json:"primaryFeedId,omitempty,string"`
	// PrimaryFeedName: Merchant Center primary feed name. The name is used for the
	// display purposes only.
	PrimaryFeedName string `json:"primaryFeedName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DataSourceId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DataSourceId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaMerchantCenterAccountLinkMerchantCenterFeedFilter) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaMerchantCenterAccountLinkMerchantCenterFeedFilter
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModel: Metadata that describes the training and
// serving parameters of a Model. A Model can be associated with a
// ServingConfig and then queried through the Predict API.
type GoogleCloudRetailV2alphaModel struct {
	// CreateTime: Output only. Timestamp the Recommendation Model was created at.
	CreateTime string `json:"createTime,omitempty"`
	// DataState: Output only. The state of data requirements for this model:
	// `DATA_OK` and `DATA_ERROR`. Recommendation model cannot be trained if the
	// data is in `DATA_ERROR` state. Recommendation model can have `DATA_ERROR`
	// state even if serving state is `ACTIVE`: models were trained successfully
	// before, but cannot be refreshed because model no longer has sufficient data
	// for training.
	//
	// Possible values:
	//   "DATA_STATE_UNSPECIFIED" - Unspecified default value, should never be
	// explicitly set.
	//   "DATA_OK" - The model has sufficient training data.
	//   "DATA_ERROR" - The model does not have sufficient training data. Error
	// messages can be queried via Stackdriver.
	DataState string `json:"dataState,omitempty"`
	// DisplayName: Required. The display name of the model. Should be human
	// readable, used to display Recommendation Models in the Retail Cloud Console
	// Dashboard. UTF-8 encoded string with limit of 1024 characters.
	DisplayName string `json:"displayName,omitempty"`
	// FilteringOption: Optional. If `RECOMMENDATIONS_FILTERING_ENABLED`,
	// recommendation filtering by attributes is enabled for the model.
	//
	// Possible values:
	//   "RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED" - Value used when unset. In
	// this case, server behavior defaults to RECOMMENDATIONS_FILTERING_DISABLED.
	//   "RECOMMENDATIONS_FILTERING_DISABLED" - Recommendation filtering is
	// disabled.
	//   "RECOMMENDATIONS_FILTERING_ENABLED" - Recommendation filtering is enabled.
	FilteringOption string `json:"filteringOption,omitempty"`
	// LastTuneTime: Output only. The timestamp when the latest successful tune
	// finished.
	LastTuneTime string `json:"lastTuneTime,omitempty"`
	// ModelFeaturesConfig: Optional. Additional model features config.
	ModelFeaturesConfig *GoogleCloudRetailV2alphaModelModelFeaturesConfig `json:"modelFeaturesConfig,omitempty"`
	// Name: Required. The fully qualified resource name of the model. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}` catalog_id has char limit of 50. recommendation_model_id has
	// char limit of 40.
	Name string `json:"name,omitempty"`
	// OptimizationObjective: Optional. The optimization objective e.g. `cvr`.
	// Currently supported values: `ctr`, `cvr`, `revenue-per-order`. If not
	// specified, we choose default based on model type. Default depends on type of
	// recommendation: `recommended-for-you` => `ctr` `others-you-may-like` =>
	// `ctr` `frequently-bought-together` => `revenue_per_order` This field
	// together with optimization_objective describe model metadata to use to
	// control model training and serving. See
	// https://cloud.google.com/retail/docs/models for more details on what the
	// model metadata control and which combination of parameters are valid. For
	// invalid combinations of parameters (e.g. type = `frequently-bought-together`
	// and optimization_objective = `ctr`), you receive an error 400 if you try to
	// create/update a recommendation with this set of knobs.
	OptimizationObjective string `json:"optimizationObjective,omitempty"`
	// PageOptimizationConfig: Optional. The page optimization config.
	PageOptimizationConfig *GoogleCloudRetailV2alphaModelPageOptimizationConfig `json:"pageOptimizationConfig,omitempty"`
	// PeriodicTuningState: Optional. The state of periodic tuning. The period we
	// use is 3 months - to do a one-off tune earlier use the `TuneModel` method.
	// Default value is `PERIODIC_TUNING_ENABLED`.
	//
	// Possible values:
	//   "PERIODIC_TUNING_STATE_UNSPECIFIED" - Unspecified default value, should
	// never be explicitly set.
	//   "PERIODIC_TUNING_DISABLED" - The model has periodic tuning disabled.
	// Tuning can be reenabled by calling the `EnableModelPeriodicTuning` method or
	// by calling the `TuneModel` method.
	//   "ALL_TUNING_DISABLED" - The model cannot be tuned with periodic tuning OR
	// the `TuneModel` method. Hide the options in customer UI and reject any
	// requests through the backend self serve API.
	//   "PERIODIC_TUNING_ENABLED" - The model has periodic tuning enabled. Tuning
	// can be disabled by calling the `DisableModelPeriodicTuning` method.
	PeriodicTuningState string `json:"periodicTuningState,omitempty"`
	// ServingConfigLists: Output only. The list of valid serving configs
	// associated with the PageOptimizationConfig.
	ServingConfigLists []*GoogleCloudRetailV2alphaModelServingConfigList `json:"servingConfigLists,omitempty"`
	// ServingState: Output only. The serving state of the model: `ACTIVE`,
	// `NOT_ACTIVE`.
	//
	// Possible values:
	//   "SERVING_STATE_UNSPECIFIED" - Unspecified serving state.
	//   "INACTIVE" - The model is not serving.
	//   "ACTIVE" - The model is serving and can be queried.
	//   "TUNED" - The model is trained on tuned hyperparameters and can be
	// queried.
	ServingState string `json:"servingState,omitempty"`
	// TrainingState: Optional. The training state that the model is in (e.g.
	// `TRAINING` or `PAUSED`). Since part of the cost of running the service is
	// frequency of training - this can be used to determine when to train model in
	// order to control cost. If not specified: the default value for `CreateModel`
	// method is `TRAINING`. The default value for `UpdateModel` method is to keep
	// the state the same as before.
	//
	// Possible values:
	//   "TRAINING_STATE_UNSPECIFIED" - Unspecified training state.
	//   "PAUSED" - The model training is paused.
	//   "TRAINING" - The model is training.
	TrainingState string `json:"trainingState,omitempty"`
	// TuningOperation: Output only. The tune operation associated with the model.
	// Can be used to determine if there is an ongoing tune for this
	// recommendation. Empty field implies no tune is goig on.
	TuningOperation string `json:"tuningOperation,omitempty"`
	// Type: Required. The type of model e.g. `home-page`. Currently supported
	// values: `recommended-for-you`, `others-you-may-like`,
	// `frequently-bought-together`, `page-optimization`, `similar-items`,
	// `buy-it-again`, `on-sale-items`, and `recently-viewed`(readonly value). This
	// field together with optimization_objective describe model metadata to use to
	// control model training and serving. See
	// https://cloud.google.com/retail/docs/models for more details on what the
	// model metadata control and which combination of parameters are valid. For
	// invalid combinations of parameters (e.g. type = `frequently-bought-together`
	// and optimization_objective = `ctr`), you receive an error 400 if you try to
	// create/update a recommendation with this set of knobs.
	Type string `json:"type,omitempty"`
	// UpdateTime: Output only. Timestamp the Recommendation Model was last
	// updated. E.g. if a Recommendation Model was paused - this would be the time
	// the pause was initiated.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModel) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModel
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModelFrequentlyBoughtTogetherFeaturesConfig:
// Additional configs for the frequently-bought-together model type.
type GoogleCloudRetailV2alphaModelFrequentlyBoughtTogetherFeaturesConfig struct {
	// ContextProductsType: Optional. Specifies the context of the model when it is
	// used in predict requests. Can only be set for the
	// `frequently-bought-together` type. If it isn't specified, it defaults to
	// MULTIPLE_CONTEXT_PRODUCTS.
	//
	// Possible values:
	//   "CONTEXT_PRODUCTS_TYPE_UNSPECIFIED" - Unspecified default value, should
	// never be explicitly set. Defaults to MULTIPLE_CONTEXT_PRODUCTS.
	//   "SINGLE_CONTEXT_PRODUCT" - Use only a single product as context for the
	// recommendation. Typically used on pages like add-to-cart or product details.
	//   "MULTIPLE_CONTEXT_PRODUCTS" - Use one or multiple products as context for
	// the recommendation. Typically used on shopping cart pages.
	ContextProductsType string `json:"contextProductsType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ContextProductsType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ContextProductsType") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModelFrequentlyBoughtTogetherFeaturesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModelFrequentlyBoughtTogetherFeaturesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModelModelFeaturesConfig: Additional model features
// config.
type GoogleCloudRetailV2alphaModelModelFeaturesConfig struct {
	// FrequentlyBoughtTogetherConfig: Additional configs for
	// frequently-bought-together models.
	FrequentlyBoughtTogetherConfig *GoogleCloudRetailV2alphaModelFrequentlyBoughtTogetherFeaturesConfig `json:"frequentlyBoughtTogetherConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g.
	// "FrequentlyBoughtTogetherConfig") to unconditionally include in API
	// requests. By default, fields with empty or default values are omitted from
	// API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FrequentlyBoughtTogetherConfig")
	// to include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModelModelFeaturesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModelModelFeaturesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModelPageOptimizationConfig: The
// PageOptimizationConfig for model training. This determines how many panels
// to optimize for, and which serving configs to consider for each panel. The
// purpose of this model is to optimize which ServingConfig to show on which
// panels in way that optimizes the visitors shopping journey.
type GoogleCloudRetailV2alphaModelPageOptimizationConfig struct {
	// PageOptimizationEventType: Required. The type of UserEvent this page
	// optimization is shown for. Each page has an associated event type - this
	// will be the corresponding event type for the page that the page optimization
	// model is used on. Supported types: * `add-to-cart`: Products being added to
	// cart. * `detail-page-view`: Products detail page viewed. * `home-page-view`:
	// Homepage viewed * `category-page-view`: Homepage viewed *
	// `shopping-cart-page-view`: User viewing a shopping cart. `home-page-view`
	// only allows models with type `recommended-for-you`. All other
	// page_optimization_event_type allow all Model.types.
	PageOptimizationEventType string `json:"pageOptimizationEventType,omitempty"`
	// Panels: Required. A list of panel configurations. Limit = 5.
	Panels []*GoogleCloudRetailV2alphaModelPageOptimizationConfigPanel `json:"panels,omitempty"`
	// Restriction: Optional. How to restrict results across panels e.g. can the
	// same ServingConfig be shown on multiple panels at once. If unspecified,
	// default to `UNIQUE_MODEL_RESTRICTION`.
	//
	// Possible values:
	//   "RESTRICTION_UNSPECIFIED" - Unspecified value for restriction.
	//   "NO_RESTRICTION" - Allow any ServingConfig to be show on any number of
	// panels. Example: `Panel1 candidates`: pdp_ctr, pdp_cvr,
	// home_page_ctr_no_diversity `Panel2 candidates`: home_page_ctr_no_diversity,
	// home_page_ctr_diversity, pdp_cvr_no_diversity `Restriction` = NO_RESTRICTION
	// `Valid combinations`: * * (pdp_ctr, home_page_ctr_no_diversity) * (pdp_ctr,
	// home_page_ctr_diversity) * (pdp_ctr, pdp_cvr_no_diversity) * (pdp_cvr,
	// home_page_ctr_no_diversity) * (pdp_cvr, home_page_ctr_diversity) * (pdp_cvr,
	// pdp_cvr_no_diversity) * (home_page_ctr_no_diversity,
	// home_page_ctr_no_diversity) * (home_page_ctr_no_diversity,
	// home_page_ctr_diversity) * (home_page_ctr_no_diversity,
	// pdp_cvr_no_diversity) * `Invalid combinations`: []
	//   "UNIQUE_SERVING_CONFIG_RESTRICTION" - Do not allow the same
	// ServingConfig.name to be shown on multiple panels. Example: `Panel1
	// candidates`: * pdp_ctr, pdp_cvr, home_page_ctr_no_diversity * `Panel2
	// candidates`: * home_page_ctr_no_diversity, home_page_ctr_diversity_low,
	// pdp_cvr_no_diversity * `Restriction` = `UNIQUE_SERVING_CONFIG_RESTRICTION`
	// `Valid combinations`: * * (pdp_ctr, home_page_ctr_no_diversity) * (pdp_ctr,
	// home_page_ctr_diversity_low) * (pdp_ctr, pdp_cvr_no_diversity) * (pdp_ctr,
	// pdp_cvr_no_diversity) * (pdp_cvr, home_page_ctr_no_diversity) * (pdp_cvr,
	// home_page_ctr_diversity_low) * (pdp_cvr, pdp_cvr_no_diversity) *
	// (home_page_ctr_no_diversity, home_page_ctr_diversity_low) *
	// (home_page_ctr_no_diversity, pdp_cvr_no_diversity) * `Invalid combinations`:
	// * * (home_page_ctr_no_diversity, home_page_ctr_no_diversity) *
	//   "UNIQUE_MODEL_RESTRICTION" - Do not allow multiple ServingConfigs with
	// same Model.name to be show on on different panels. Example: `Panel1
	// candidates`: * pdp_ctr, pdp_cvr, home_page_ctr_no_diversity * `Panel2
	// candidates`: * home_page_ctr_no_diversity, home_page_ctr_diversity_low,
	// pdp_cvr_no_diversity * `Restriction` = `UNIQUE_MODEL_RESTRICTION` `Valid
	// combinations`: * * (pdp_ctr, home_page_ctr_no_diversity) * (pdp_ctr,
	// home_page_ctr_diversity) * (pdp_ctr, pdp_cvr_no_diversity) * (pdp_ctr,
	// pdp_cvr_no_diversity) * (pdp_cvr, home_page_ctr_no_diversity) * (pdp_cvr,
	// home_page_ctr_diversity_low) * (home_page_ctr_no_diversity,
	// pdp_cvr_no_diversity) * `Invalid combinations`: * *
	// (home_page_ctr_no_diversity, home_page_ctr_no_diversity) * (pdp_cvr,
	// pdp_cvr_no_diversity) *
	//   "UNIQUE_MODEL_TYPE_RESTRICTION" - Do not allow multiple ServingConfigs
	// with same Model.type to be shown on different panels. Example: `Panel1
	// candidates`: * pdp_ctr, pdp_cvr, home_page_ctr_no_diversity * `Panel2
	// candidates`: * home_page_ctr_no_diversity, home_page_ctr_diversity_low,
	// pdp_cvr_no_diversity * `Restriction` = `UNIQUE_MODEL_RESTRICTION` `Valid
	// combinations`: * * (pdp_ctr, home_page_ctr_no_diversity) * (pdp_ctr,
	// home_page_ctr_diversity) * (pdp_cvr, home_page_ctr_no_diversity) * (pdp_cvr,
	// home_page_ctr_diversity_low) * (home_page_ctr_no_diversity,
	// pdp_cvr_no_diversity) * `Invalid combinations`: * * (pdp_ctr,
	// pdp_cvr_no_diversity) * (pdp_ctr, pdp_cvr_no_diversity) * (pdp_cvr,
	// pdp_cvr_no_diversity) * (home_page_ctr_no_diversity,
	// home_page_ctr_no_diversity) * (home_page_ctr_no_diversity,
	// home_page_ctr_diversity) *
	Restriction string `json:"restriction,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PageOptimizationEventType")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PageOptimizationEventType") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModelPageOptimizationConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModelPageOptimizationConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModelPageOptimizationConfigCandidate: A candidate to
// consider for a given panel. Currently only ServingConfig are valid
// candidates.
type GoogleCloudRetailV2alphaModelPageOptimizationConfigCandidate struct {
	// ServingConfigId: This has to be a valid ServingConfig identifier. For
	// example, for a ServingConfig with full name:
	// `projects/*/locations/global/catalogs/default_catalog/servingConfigs/my_candi
	// date_config`, this would be `my_candidate_config`.
	ServingConfigId string `json:"servingConfigId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ServingConfigId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ServingConfigId") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModelPageOptimizationConfigCandidate) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModelPageOptimizationConfigCandidate
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModelPageOptimizationConfigPanel: An individual
// panel with a list of ServingConfigs to consider for it.
type GoogleCloudRetailV2alphaModelPageOptimizationConfigPanel struct {
	// Candidates: Required. The candidates to consider on the panel.
	Candidates []*GoogleCloudRetailV2alphaModelPageOptimizationConfigCandidate `json:"candidates,omitempty"`
	// DefaultCandidate: Required. The default candidate. If the model fails at
	// serving time, we fall back to the default.
	DefaultCandidate *GoogleCloudRetailV2alphaModelPageOptimizationConfigCandidate `json:"defaultCandidate,omitempty"`
	// DisplayName: Optional. The name to display for the panel.
	DisplayName string `json:"displayName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Candidates") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Candidates") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModelPageOptimizationConfigPanel) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModelPageOptimizationConfigPanel
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaModelServingConfigList: Represents an ordered
// combination of valid serving configs, which can be used for
// `PAGE_OPTIMIZATION` recommendations.
type GoogleCloudRetailV2alphaModelServingConfigList struct {
	// ServingConfigIds: Optional. A set of valid serving configs that may be used
	// for `PAGE_OPTIMIZATION`.
	ServingConfigIds []string `json:"servingConfigIds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ServingConfigIds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ServingConfigIds") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaModelServingConfigList) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaModelServingConfigList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaOutputResult: Output result that stores the
// information about where the exported data is stored.
type GoogleCloudRetailV2alphaOutputResult struct {
	// BigqueryResult: The BigQuery location where the result is stored.
	BigqueryResult []*GoogleCloudRetailV2alphaBigQueryOutputResult `json:"bigqueryResult,omitempty"`
	// GcsResult: The Google Cloud Storage location where the result is stored.
	GcsResult []*GoogleCloudRetailV2alphaGcsOutputResult `json:"gcsResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigqueryResult") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigqueryResult") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaPurgeMetadata: Metadata related to the progress of
// the Purge operation. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2alphaPurgeMetadata struct {
}

// GoogleCloudRetailV2alphaPurgeProductsMetadata: Metadata related to the
// progress of the PurgeProducts operation. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2alphaPurgeProductsMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// FailureCount: Count of entries that encountered errors while processing.
	FailureCount int64 `json:"failureCount,omitempty,string"`
	// SuccessCount: Count of entries that were deleted successfully.
	SuccessCount int64 `json:"successCount,omitempty,string"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaPurgeProductsMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaPurgeProductsMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaPurgeProductsResponse: Response of the
// PurgeProductsRequest. If the long running operation is successfully done,
// then this message is returned by the google.longrunning.Operations.response
// field.
type GoogleCloudRetailV2alphaPurgeProductsResponse struct {
	// PurgeCount: The total count of products purged as a result of the operation.
	PurgeCount int64 `json:"purgeCount,omitempty,string"`
	// PurgeSample: A sample of the product names that will be deleted. Only
	// populated if `force` is set to false. A max of 100 names will be returned
	// and the names are chosen at random.
	PurgeSample []string `json:"purgeSample,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PurgeCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PurgeCount") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaPurgeProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaPurgeProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaPurgeUserEventsResponse: Response of the
// PurgeUserEventsRequest. If the long running operation is successfully done,
// then this message is returned by the google.longrunning.Operations.response
// field.
type GoogleCloudRetailV2alphaPurgeUserEventsResponse struct {
	// PurgedEventsCount: The total count of events purged as a result of the
	// operation.
	PurgedEventsCount int64 `json:"purgedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "PurgedEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PurgedEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaPurgeUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaPurgeUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaRejoinUserEventsMetadata: Metadata for
// `RejoinUserEvents` method.
type GoogleCloudRetailV2alphaRejoinUserEventsMetadata struct {
}

// GoogleCloudRetailV2alphaRejoinUserEventsResponse: Response message for
// `RejoinUserEvents` method.
type GoogleCloudRetailV2alphaRejoinUserEventsResponse struct {
	// RejoinedUserEventsCount: Number of user events that were joined with latest
	// product catalog.
	RejoinedUserEventsCount int64 `json:"rejoinedUserEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "RejoinedUserEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "RejoinedUserEventsCount") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaRejoinUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaRejoinUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaRemoveFulfillmentPlacesMetadata: Metadata related to
// the progress of the RemoveFulfillmentPlaces operation. Currently empty
// because there is no meaningful metadata populated from the
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2alphaRemoveFulfillmentPlacesMetadata struct {
}

// GoogleCloudRetailV2alphaRemoveFulfillmentPlacesResponse: Response of the
// RemoveFulfillmentPlacesRequest. Currently empty because there is no
// meaningful response populated from the
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2alphaRemoveFulfillmentPlacesResponse struct {
}

// GoogleCloudRetailV2alphaRemoveLocalInventoriesMetadata: Metadata related to
// the progress of the RemoveLocalInventories operation. Currently empty
// because there is no meaningful metadata populated from the
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2alphaRemoveLocalInventoriesMetadata struct {
}

// GoogleCloudRetailV2alphaRemoveLocalInventoriesResponse: Response of the
// ProductService.RemoveLocalInventories API. Currently empty because there is
// no meaningful response populated from the
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2alphaRemoveLocalInventoriesResponse struct {
}

// GoogleCloudRetailV2alphaSetInventoryMetadata: Metadata related to the
// progress of the SetInventory operation. Currently empty because there is no
// meaningful metadata populated from the ProductService.SetInventory method.
type GoogleCloudRetailV2alphaSetInventoryMetadata struct {
}

// GoogleCloudRetailV2alphaSetInventoryResponse: Response of the
// SetInventoryRequest. Currently empty because there is no meaningful response
// populated from the ProductService.SetInventory method.
type GoogleCloudRetailV2alphaSetInventoryResponse struct {
}

// GoogleCloudRetailV2alphaTransformedUserEventsMetadata: Metadata related to
// transform user events operation.
type GoogleCloudRetailV2alphaTransformedUserEventsMetadata struct {
	// SourceEventsCount: Count of entries in the source user events BigQuery
	// table.
	SourceEventsCount int64 `json:"sourceEventsCount,omitempty,string"`
	// TransformedEventsCount: Count of entries in the transformed user events
	// BigQuery table, which could be different from the actually imported number
	// of user events.
	TransformedEventsCount int64 `json:"transformedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "SourceEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "SourceEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaTransformedUserEventsMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaTransformedUserEventsMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaTuneModelMetadata: Metadata associated with a tune
// operation.
type GoogleCloudRetailV2alphaTuneModelMetadata struct {
	// Model: The resource name of the model that this tune applies to. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}`
	Model string `json:"model,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Model") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Model") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaTuneModelMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaTuneModelMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2alphaTuneModelResponse: Response associated with a tune
// operation.
type GoogleCloudRetailV2alphaTuneModelResponse struct {
}

// GoogleCloudRetailV2alphaUserEventImportSummary: A summary of import result.
// The UserEventImportSummary summarizes the import status for user events.
type GoogleCloudRetailV2alphaUserEventImportSummary struct {
	// JoinedEventsCount: Count of user events imported with complete existing
	// catalog information.
	JoinedEventsCount int64 `json:"joinedEventsCount,omitempty,string"`
	// UnjoinedEventsCount: Count of user events imported, but with catalog
	// information not found in the imported catalog.
	UnjoinedEventsCount int64 `json:"unjoinedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "JoinedEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "JoinedEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2alphaUserEventImportSummary) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2alphaUserEventImportSummary
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaAddFulfillmentPlacesMetadata: Metadata related to the
// progress of the AddFulfillmentPlaces operation. Currently empty because
// there is no meaningful metadata populated from the
// ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2betaAddFulfillmentPlacesMetadata struct {
}

// GoogleCloudRetailV2betaAddFulfillmentPlacesResponse: Response of the
// AddFulfillmentPlacesRequest. Currently empty because there is no meaningful
// response populated from the ProductService.AddFulfillmentPlaces method.
type GoogleCloudRetailV2betaAddFulfillmentPlacesResponse struct {
}

// GoogleCloudRetailV2betaAddLocalInventoriesMetadata: Metadata related to the
// progress of the AddLocalInventories operation. Currently empty because there
// is no meaningful metadata populated from the
// ProductService.AddLocalInventories method.
type GoogleCloudRetailV2betaAddLocalInventoriesMetadata struct {
}

// GoogleCloudRetailV2betaAddLocalInventoriesResponse: Response of the
// ProductService.AddLocalInventories API. Currently empty because there is no
// meaningful response populated from the ProductService.AddLocalInventories
// method.
type GoogleCloudRetailV2betaAddLocalInventoriesResponse struct {
}

// GoogleCloudRetailV2betaBigQueryOutputResult: A BigQuery output result.
type GoogleCloudRetailV2betaBigQueryOutputResult struct {
	// DatasetId: The ID of a BigQuery Dataset.
	DatasetId string `json:"datasetId,omitempty"`
	// TableId: The ID of a BigQuery Table.
	TableId string `json:"tableId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DatasetId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DatasetId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaBigQueryOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaBigQueryOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaCreateModelMetadata: Metadata associated with a
// create operation.
type GoogleCloudRetailV2betaCreateModelMetadata struct {
	// Model: The resource name of the model that this create applies to. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}`
	Model string `json:"model,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Model") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Model") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaCreateModelMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaCreateModelMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaExportAnalyticsMetricsResponse: Response of the
// ExportAnalyticsMetricsRequest. If the long running operation was successful,
// then this message is returned by the google.longrunning.Operations.response
// field if the operation was successful.
type GoogleCloudRetailV2betaExportAnalyticsMetricsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2betaExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2betaOutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaExportAnalyticsMetricsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaExportAnalyticsMetricsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaExportErrorsConfig: Configuration of destination for
// Export related errors.
type GoogleCloudRetailV2betaExportErrorsConfig struct {
	// GcsPrefix: Google Cloud Storage path for import errors. This must be an
	// empty, existing Cloud Storage bucket. Export errors will be written to a
	// file in this bucket, one per line, as a JSON-encoded `google.rpc.Status`
	// message.
	GcsPrefix string `json:"gcsPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPrefix") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaExportErrorsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaExportErrorsConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaExportMetadata: Metadata related to the progress of
// the Export operation. This is returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2betaExportMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaExportMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaExportMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaExportProductsResponse: Response of the
// ExportProductsRequest. If the long running operation is done, then this
// message is returned by the google.longrunning.Operations.response field if
// the operation was successful.
type GoogleCloudRetailV2betaExportProductsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2betaExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2betaOutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaExportProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaExportProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaExportUserEventsResponse: Response of the
// ExportUserEventsRequest. If the long running operation was successful, then
// this message is returned by the google.longrunning.Operations.response field
// if the operation was successful.
type GoogleCloudRetailV2betaExportUserEventsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: This field is never set.
	ErrorsConfig *GoogleCloudRetailV2betaExportErrorsConfig `json:"errorsConfig,omitempty"`
	// OutputResult: Output result indicating where the data were exported to.
	OutputResult *GoogleCloudRetailV2betaOutputResult `json:"outputResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaExportUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaExportUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaGcsOutputResult: A Gcs output result.
type GoogleCloudRetailV2betaGcsOutputResult struct {
	// OutputUri: The uri of Gcs output
	OutputUri string `json:"outputUri,omitempty"`
	// ForceSendFields is a list of field names (e.g. "OutputUri") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "OutputUri") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaGcsOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaGcsOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaImportCompletionDataResponse: Response of the
// ImportCompletionDataRequest. If the long running operation is done, this
// message is returned by the google.longrunning.Operations.response field if
// the operation is successful.
type GoogleCloudRetailV2betaImportCompletionDataResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaImportCompletionDataResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaImportCompletionDataResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaImportErrorsConfig: Configuration of destination for
// Import related errors.
type GoogleCloudRetailV2betaImportErrorsConfig struct {
	// GcsPrefix: Google Cloud Storage prefix for import errors. This must be an
	// empty, existing Cloud Storage directory. Import errors are written to
	// sharded files in this directory, one per line, as a JSON-encoded
	// `google.rpc.Status` message.
	GcsPrefix string `json:"gcsPrefix,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GcsPrefix") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GcsPrefix") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaImportErrorsConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaImportErrorsConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaImportMetadata: Metadata related to the progress of
// the Import operation. This is returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2betaImportMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// FailureCount: Count of entries that encountered errors while processing.
	FailureCount int64 `json:"failureCount,omitempty,string"`
	// NotificationPubsubTopic: Pub/Sub topic for receiving notification. If this
	// field is set, when the import is finished, a notification is sent to
	// specified Pub/Sub topic. The message data is JSON string of a Operation.
	// Format of the Pub/Sub topic is `projects/{project}/topics/{topic}`.
	NotificationPubsubTopic string `json:"notificationPubsubTopic,omitempty"`
	// RequestId: Deprecated. This field is never set.
	RequestId string `json:"requestId,omitempty"`
	// SuccessCount: Count of entries that were processed successfully.
	SuccessCount int64 `json:"successCount,omitempty,string"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaImportMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaImportMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaImportProductsResponse: Response of the
// ImportProductsRequest. If the long running operation is done, then this
// message is returned by the google.longrunning.Operations.response field if
// the operation was successful.
type GoogleCloudRetailV2betaImportProductsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: Echoes the destination for the complete errors in the request
	// if set.
	ErrorsConfig *GoogleCloudRetailV2betaImportErrorsConfig `json:"errorsConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaImportProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaImportProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaImportUserEventsResponse: Response of the
// ImportUserEventsRequest. If the long running operation was successful, then
// this message is returned by the google.longrunning.Operations.response field
// if the operation was successful.
type GoogleCloudRetailV2betaImportUserEventsResponse struct {
	// ErrorSamples: A sample of errors encountered while processing the request.
	ErrorSamples []*GoogleRpcStatus `json:"errorSamples,omitempty"`
	// ErrorsConfig: Echoes the destination for the complete errors if this field
	// was set in the request.
	ErrorsConfig *GoogleCloudRetailV2betaImportErrorsConfig `json:"errorsConfig,omitempty"`
	// ImportSummary: Aggregated statistics of user event import status.
	ImportSummary *GoogleCloudRetailV2betaUserEventImportSummary `json:"importSummary,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ErrorSamples") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ErrorSamples") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaImportUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaImportUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaModel: Metadata that describes the training and
// serving parameters of a Model. A Model can be associated with a
// ServingConfig and then queried through the Predict API.
type GoogleCloudRetailV2betaModel struct {
	// CreateTime: Output only. Timestamp the Recommendation Model was created at.
	CreateTime string `json:"createTime,omitempty"`
	// DataState: Output only. The state of data requirements for this model:
	// `DATA_OK` and `DATA_ERROR`. Recommendation model cannot be trained if the
	// data is in `DATA_ERROR` state. Recommendation model can have `DATA_ERROR`
	// state even if serving state is `ACTIVE`: models were trained successfully
	// before, but cannot be refreshed because model no longer has sufficient data
	// for training.
	//
	// Possible values:
	//   "DATA_STATE_UNSPECIFIED" - Unspecified default value, should never be
	// explicitly set.
	//   "DATA_OK" - The model has sufficient training data.
	//   "DATA_ERROR" - The model does not have sufficient training data. Error
	// messages can be queried via Stackdriver.
	DataState string `json:"dataState,omitempty"`
	// DisplayName: Required. The display name of the model. Should be human
	// readable, used to display Recommendation Models in the Retail Cloud Console
	// Dashboard. UTF-8 encoded string with limit of 1024 characters.
	DisplayName string `json:"displayName,omitempty"`
	// FilteringOption: Optional. If `RECOMMENDATIONS_FILTERING_ENABLED`,
	// recommendation filtering by attributes is enabled for the model.
	//
	// Possible values:
	//   "RECOMMENDATIONS_FILTERING_OPTION_UNSPECIFIED" - Value used when unset. In
	// this case, server behavior defaults to RECOMMENDATIONS_FILTERING_DISABLED.
	//   "RECOMMENDATIONS_FILTERING_DISABLED" - Recommendation filtering is
	// disabled.
	//   "RECOMMENDATIONS_FILTERING_ENABLED" - Recommendation filtering is enabled.
	FilteringOption string `json:"filteringOption,omitempty"`
	// LastTuneTime: Output only. The timestamp when the latest successful tune
	// finished.
	LastTuneTime string `json:"lastTuneTime,omitempty"`
	// ModelFeaturesConfig: Optional. Additional model features config.
	ModelFeaturesConfig *GoogleCloudRetailV2betaModelModelFeaturesConfig `json:"modelFeaturesConfig,omitempty"`
	// Name: Required. The fully qualified resource name of the model. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}` catalog_id has char limit of 50. recommendation_model_id has
	// char limit of 40.
	Name string `json:"name,omitempty"`
	// OptimizationObjective: Optional. The optimization objective e.g. `cvr`.
	// Currently supported values: `ctr`, `cvr`, `revenue-per-order`. If not
	// specified, we choose default based on model type. Default depends on type of
	// recommendation: `recommended-for-you` => `ctr` `others-you-may-like` =>
	// `ctr` `frequently-bought-together` => `revenue_per_order` This field
	// together with optimization_objective describe model metadata to use to
	// control model training and serving. See
	// https://cloud.google.com/retail/docs/models for more details on what the
	// model metadata control and which combination of parameters are valid. For
	// invalid combinations of parameters (e.g. type = `frequently-bought-together`
	// and optimization_objective = `ctr`), you receive an error 400 if you try to
	// create/update a recommendation with this set of knobs.
	OptimizationObjective string `json:"optimizationObjective,omitempty"`
	// PeriodicTuningState: Optional. The state of periodic tuning. The period we
	// use is 3 months - to do a one-off tune earlier use the `TuneModel` method.
	// Default value is `PERIODIC_TUNING_ENABLED`.
	//
	// Possible values:
	//   "PERIODIC_TUNING_STATE_UNSPECIFIED" - Unspecified default value, should
	// never be explicitly set.
	//   "PERIODIC_TUNING_DISABLED" - The model has periodic tuning disabled.
	// Tuning can be reenabled by calling the `EnableModelPeriodicTuning` method or
	// by calling the `TuneModel` method.
	//   "ALL_TUNING_DISABLED" - The model cannot be tuned with periodic tuning OR
	// the `TuneModel` method. Hide the options in customer UI and reject any
	// requests through the backend self serve API.
	//   "PERIODIC_TUNING_ENABLED" - The model has periodic tuning enabled. Tuning
	// can be disabled by calling the `DisableModelPeriodicTuning` method.
	PeriodicTuningState string `json:"periodicTuningState,omitempty"`
	// ServingConfigLists: Output only. The list of valid serving configs
	// associated with the PageOptimizationConfig.
	ServingConfigLists []*GoogleCloudRetailV2betaModelServingConfigList `json:"servingConfigLists,omitempty"`
	// ServingState: Output only. The serving state of the model: `ACTIVE`,
	// `NOT_ACTIVE`.
	//
	// Possible values:
	//   "SERVING_STATE_UNSPECIFIED" - Unspecified serving state.
	//   "INACTIVE" - The model is not serving.
	//   "ACTIVE" - The model is serving and can be queried.
	//   "TUNED" - The model is trained on tuned hyperparameters and can be
	// queried.
	ServingState string `json:"servingState,omitempty"`
	// TrainingState: Optional. The training state that the model is in (e.g.
	// `TRAINING` or `PAUSED`). Since part of the cost of running the service is
	// frequency of training - this can be used to determine when to train model in
	// order to control cost. If not specified: the default value for `CreateModel`
	// method is `TRAINING`. The default value for `UpdateModel` method is to keep
	// the state the same as before.
	//
	// Possible values:
	//   "TRAINING_STATE_UNSPECIFIED" - Unspecified training state.
	//   "PAUSED" - The model training is paused.
	//   "TRAINING" - The model is training.
	TrainingState string `json:"trainingState,omitempty"`
	// TuningOperation: Output only. The tune operation associated with the model.
	// Can be used to determine if there is an ongoing tune for this
	// recommendation. Empty field implies no tune is goig on.
	TuningOperation string `json:"tuningOperation,omitempty"`
	// Type: Required. The type of model e.g. `home-page`. Currently supported
	// values: `recommended-for-you`, `others-you-may-like`,
	// `frequently-bought-together`, `page-optimization`, `similar-items`,
	// `buy-it-again`, `on-sale-items`, and `recently-viewed`(readonly value). This
	// field together with optimization_objective describe model metadata to use to
	// control model training and serving. See
	// https://cloud.google.com/retail/docs/models for more details on what the
	// model metadata control and which combination of parameters are valid. For
	// invalid combinations of parameters (e.g. type = `frequently-bought-together`
	// and optimization_objective = `ctr`), you receive an error 400 if you try to
	// create/update a recommendation with this set of knobs.
	Type string `json:"type,omitempty"`
	// UpdateTime: Output only. Timestamp the Recommendation Model was last
	// updated. E.g. if a Recommendation Model was paused - this would be the time
	// the pause was initiated.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaModel) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaModel
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaModelFrequentlyBoughtTogetherFeaturesConfig:
// Additional configs for the frequently-bought-together model type.
type GoogleCloudRetailV2betaModelFrequentlyBoughtTogetherFeaturesConfig struct {
	// ContextProductsType: Optional. Specifies the context of the model when it is
	// used in predict requests. Can only be set for the
	// `frequently-bought-together` type. If it isn't specified, it defaults to
	// MULTIPLE_CONTEXT_PRODUCTS.
	//
	// Possible values:
	//   "CONTEXT_PRODUCTS_TYPE_UNSPECIFIED" - Unspecified default value, should
	// never be explicitly set. Defaults to MULTIPLE_CONTEXT_PRODUCTS.
	//   "SINGLE_CONTEXT_PRODUCT" - Use only a single product as context for the
	// recommendation. Typically used on pages like add-to-cart or product details.
	//   "MULTIPLE_CONTEXT_PRODUCTS" - Use one or multiple products as context for
	// the recommendation. Typically used on shopping cart pages.
	ContextProductsType string `json:"contextProductsType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ContextProductsType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ContextProductsType") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaModelFrequentlyBoughtTogetherFeaturesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaModelFrequentlyBoughtTogetherFeaturesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaModelModelFeaturesConfig: Additional model features
// config.
type GoogleCloudRetailV2betaModelModelFeaturesConfig struct {
	// FrequentlyBoughtTogetherConfig: Additional configs for
	// frequently-bought-together models.
	FrequentlyBoughtTogetherConfig *GoogleCloudRetailV2betaModelFrequentlyBoughtTogetherFeaturesConfig `json:"frequentlyBoughtTogetherConfig,omitempty"`
	// ForceSendFields is a list of field names (e.g.
	// "FrequentlyBoughtTogetherConfig") to unconditionally include in API
	// requests. By default, fields with empty or default values are omitted from
	// API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FrequentlyBoughtTogetherConfig")
	// to include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaModelModelFeaturesConfig) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaModelModelFeaturesConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaModelServingConfigList: Represents an ordered
// combination of valid serving configs, which can be used for
// `PAGE_OPTIMIZATION` recommendations.
type GoogleCloudRetailV2betaModelServingConfigList struct {
	// ServingConfigIds: Optional. A set of valid serving configs that may be used
	// for `PAGE_OPTIMIZATION`.
	ServingConfigIds []string `json:"servingConfigIds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ServingConfigIds") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ServingConfigIds") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaModelServingConfigList) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaModelServingConfigList
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaOutputResult: Output result that stores the
// information about where the exported data is stored.
type GoogleCloudRetailV2betaOutputResult struct {
	// BigqueryResult: The BigQuery location where the result is stored.
	BigqueryResult []*GoogleCloudRetailV2betaBigQueryOutputResult `json:"bigqueryResult,omitempty"`
	// GcsResult: The Google Cloud Storage location where the result is stored.
	GcsResult []*GoogleCloudRetailV2betaGcsOutputResult `json:"gcsResult,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BigqueryResult") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BigqueryResult") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaOutputResult) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaOutputResult
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaPurgeMetadata: Metadata related to the progress of
// the Purge operation. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2betaPurgeMetadata struct {
}

// GoogleCloudRetailV2betaPurgeProductsMetadata: Metadata related to the
// progress of the PurgeProducts operation. This will be returned by the
// google.longrunning.Operation.metadata field.
type GoogleCloudRetailV2betaPurgeProductsMetadata struct {
	// CreateTime: Operation create time.
	CreateTime string `json:"createTime,omitempty"`
	// FailureCount: Count of entries that encountered errors while processing.
	FailureCount int64 `json:"failureCount,omitempty,string"`
	// SuccessCount: Count of entries that were deleted successfully.
	SuccessCount int64 `json:"successCount,omitempty,string"`
	// UpdateTime: Operation last update time. If the operation is done, this is
	// also the finish time.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaPurgeProductsMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaPurgeProductsMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaPurgeProductsResponse: Response of the
// PurgeProductsRequest. If the long running operation is successfully done,
// then this message is returned by the google.longrunning.Operations.response
// field.
type GoogleCloudRetailV2betaPurgeProductsResponse struct {
	// PurgeCount: The total count of products purged as a result of the operation.
	PurgeCount int64 `json:"purgeCount,omitempty,string"`
	// PurgeSample: A sample of the product names that will be deleted. Only
	// populated if `force` is set to false. A max of 100 names will be returned
	// and the names are chosen at random.
	PurgeSample []string `json:"purgeSample,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PurgeCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PurgeCount") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaPurgeProductsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaPurgeProductsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaPurgeUserEventsResponse: Response of the
// PurgeUserEventsRequest. If the long running operation is successfully done,
// then this message is returned by the google.longrunning.Operations.response
// field.
type GoogleCloudRetailV2betaPurgeUserEventsResponse struct {
	// PurgedEventsCount: The total count of events purged as a result of the
	// operation.
	PurgedEventsCount int64 `json:"purgedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "PurgedEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PurgedEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaPurgeUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaPurgeUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaRejoinUserEventsMetadata: Metadata for
// `RejoinUserEvents` method.
type GoogleCloudRetailV2betaRejoinUserEventsMetadata struct {
}

// GoogleCloudRetailV2betaRejoinUserEventsResponse: Response message for
// `RejoinUserEvents` method.
type GoogleCloudRetailV2betaRejoinUserEventsResponse struct {
	// RejoinedUserEventsCount: Number of user events that were joined with latest
	// product catalog.
	RejoinedUserEventsCount int64 `json:"rejoinedUserEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "RejoinedUserEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "RejoinedUserEventsCount") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaRejoinUserEventsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaRejoinUserEventsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaRemoveFulfillmentPlacesMetadata: Metadata related to
// the progress of the RemoveFulfillmentPlaces operation. Currently empty
// because there is no meaningful metadata populated from the
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2betaRemoveFulfillmentPlacesMetadata struct {
}

// GoogleCloudRetailV2betaRemoveFulfillmentPlacesResponse: Response of the
// RemoveFulfillmentPlacesRequest. Currently empty because there is no
// meaningful response populated from the
// ProductService.RemoveFulfillmentPlaces method.
type GoogleCloudRetailV2betaRemoveFulfillmentPlacesResponse struct {
}

// GoogleCloudRetailV2betaRemoveLocalInventoriesMetadata: Metadata related to
// the progress of the RemoveLocalInventories operation. Currently empty
// because there is no meaningful metadata populated from the
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2betaRemoveLocalInventoriesMetadata struct {
}

// GoogleCloudRetailV2betaRemoveLocalInventoriesResponse: Response of the
// ProductService.RemoveLocalInventories API. Currently empty because there is
// no meaningful response populated from the
// ProductService.RemoveLocalInventories method.
type GoogleCloudRetailV2betaRemoveLocalInventoriesResponse struct {
}

// GoogleCloudRetailV2betaSetInventoryMetadata: Metadata related to the
// progress of the SetInventory operation. Currently empty because there is no
// meaningful metadata populated from the ProductService.SetInventory method.
type GoogleCloudRetailV2betaSetInventoryMetadata struct {
}

// GoogleCloudRetailV2betaSetInventoryResponse: Response of the
// SetInventoryRequest. Currently empty because there is no meaningful response
// populated from the ProductService.SetInventory method.
type GoogleCloudRetailV2betaSetInventoryResponse struct {
}

// GoogleCloudRetailV2betaTuneModelMetadata: Metadata associated with a tune
// operation.
type GoogleCloudRetailV2betaTuneModelMetadata struct {
	// Model: The resource name of the model that this tune applies to. Format:
	// `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mode
	// ls/{model_id}`
	Model string `json:"model,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Model") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Model") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaTuneModelMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaTuneModelMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleCloudRetailV2betaTuneModelResponse: Response associated with a tune
// operation.
type GoogleCloudRetailV2betaTuneModelResponse struct {
}

// GoogleCloudRetailV2betaUserEventImportSummary: A summary of import result.
// The UserEventImportSummary summarizes the import status for user events.
type GoogleCloudRetailV2betaUserEventImportSummary struct {
	// JoinedEventsCount: Count of user events imported with complete existing
	// catalog information.
	JoinedEventsCount int64 `json:"joinedEventsCount,omitempty,string"`
	// UnjoinedEventsCount: Count of user events imported, but with catalog
	// information not found in the imported catalog.
	UnjoinedEventsCount int64 `json:"unjoinedEventsCount,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "JoinedEventsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "JoinedEventsCount") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleCloudRetailV2betaUserEventImportSummary) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleCloudRetailV2betaUserEventImportSummary
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleLongrunningListOperationsResponse: The response message for
// Operations.ListOperations.
type GoogleLongrunningListOperationsResponse struct {
	// NextPageToken: The standard List next-page token.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// Operations: A list of operations that matches the specified filter in the
	// request.
	Operations []*GoogleLongrunningOperation `json:"operations,omitempty"`
	// Unreachable: Unordered list. Unreachable resources. Populated when the
	// request sets `ListOperationsRequest.return_partial_success` and reads across
	// collections. For example, when attempting to list all resources across all
	// supported locations.
	Unreachable []string `json:"unreachable,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleLongrunningListOperationsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleLongrunningListOperationsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleLongrunningOperation: This resource represents a long-running
// operation that is the result of a network API call.
type GoogleLongrunningOperation struct {
	// Done: If the value is `false`, it means the operation is still in progress.
	// If `true`, the operation is completed, and either `error` or `response` is
	// available.
	Done bool `json:"done,omitempty"`
	// Error: The error result of the operation in case of failure or cancellation.
	Error *GoogleRpcStatus `json:"error,omitempty"`
	// Metadata: Service-specific metadata associated with the operation. It
	// typically contains progress information and common metadata such as create
	// time. Some services might not provide such metadata. Any method that returns
	// a long-running operation should document the metadata type, if any.
	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
	// Name: The server-assigned name, which is only unique within the same service
	// that originally returns it. If you use the default HTTP mapping, the `name`
	// should be a resource name ending with `operations/{unique_id}`.
	Name string `json:"name,omitempty"`
	// Response: The normal, successful response of the operation. If the original
	// method returns no data on success, such as `Delete`, the response is
	// `google.protobuf.Empty`. If the original method is standard
	// `Get`/`Create`/`Update`, the response should be the resource. For other
	// methods, the response should have the type `XxxResponse`, where `Xxx` is the
	// original method name. For example, if the original method name is
	// `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
	Response googleapi.RawMessage `json:"response,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Done") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Done") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleLongrunningOperation) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleLongrunningOperation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleProtobufEmpty: A generic empty message that you can re-use to avoid
// defining duplicated empty messages in your APIs. A typical example is to use
// it as the request or the response type of an API method. For instance:
// service Foo { rpc Bar(google.protobuf.Empty) returns
// (google.protobuf.Empty); }
type GoogleProtobufEmpty struct {
	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
}

// GoogleRpcStatus: The `Status` type defines a logical error model that is
// suitable for different programming environments, including REST APIs and RPC
// APIs. It is used by gRPC (https://github.com/grpc). Each `Status` message
// contains three pieces of data: error code, error message, and error details.
// You can find out more about this error model and how to work with it in the
// API Design Guide (https://cloud.google.com/apis/design/errors).
type GoogleRpcStatus struct {
	// Code: The status code, which should be an enum value of google.rpc.Code.
	Code int64 `json:"code,omitempty"`
	// Details: A list of messages that carry the error details. There is a common
	// set of message types for APIs to use.
	Details []googleapi.RawMessage `json:"details,omitempty"`
	// Message: A developer-facing error message, which should be in English. Any
	// user-facing error message should be localized and sent in the
	// google.rpc.Status.details field, or localized by the client.
	Message string `json:"message,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Code") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Code") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleRpcStatus) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleRpcStatus
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleTypeDate: Represents a whole or partial calendar date, such as a
// birthday. The time of day and time zone are either specified elsewhere or
// are insignificant. The date is relative to the Gregorian Calendar. This can
// represent one of the following: * A full date, with non-zero year, month,
// and day values. * A month and day, with a zero year (for example, an
// anniversary). * A year on its own, with a zero month and a zero day. * A
// year and month, with a zero day (for example, a credit card expiration
// date). Related types: * google.type.TimeOfDay * google.type.DateTime *
// google.protobuf.Timestamp
type GoogleTypeDate struct {
	// Day: Day of a month. Must be from 1 to 31 and valid for the year and month,
	// or 0 to specify a year by itself or a year and month where the day isn't
	// significant.
	Day int64 `json:"day,omitempty"`
	// Month: Month of a year. Must be from 1 to 12, or 0 to specify a year without
	// a month and day.
	Month int64 `json:"month,omitempty"`
	// Year: Year of the date. Must be from 1 to 9999, or 0 to specify a date
	// without a year.
	Year int64 `json:"year,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Day") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Day") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleTypeDate) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleTypeDate
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type ProjectsLocationsCatalogsCompleteQueryCall struct {
	s            *Service
	catalog      string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// CompleteQuery: Completes the specified prefix with keyword suggestions. This
// feature is only available for users who have Retail Search enabled. Enable
// Retail Search on Cloud Console before using this feature.
//
//   - catalog: Catalog for which the completion is performed. Full resource name
//     of catalog, such as
//     `projects/*/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsService) CompleteQuery(catalog string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c := &ProjectsLocationsCatalogsCompleteQueryCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	return c
}

// Dataset sets the optional parameter "dataset": Determines which dataset to
// use for fetching completion. "user-data" will use the dataset imported
// through CompletionService.ImportCompletionData. `cloud-retail` will use the
// dataset generated by Cloud Retail based on user events. If left empty,
// completions will be fetched from the `user-data` dataset. Current supported
// values: * user-data * cloud-retail: This option requires enabling
// auto-learning function first. See guidelines
// (https://cloud.google.com/retail/docs/completion-overview#generated-completion-dataset).
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Dataset(dataset string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("dataset", dataset)
	return c
}

// DeviceType sets the optional parameter "deviceType": The device type context
// for completion suggestions. We recommend that you leave this field empty. It
// can apply different suggestions on different device types, e.g. `DESKTOP`,
// `MOBILE`. If it is empty, the suggestions are across all device types.
// Supported formats: * `UNKNOWN_DEVICE_TYPE` * `DESKTOP` * `MOBILE` * A
// customized string starts with `OTHER_`, e.g. `OTHER_IPHONE`.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) DeviceType(deviceType string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("deviceType", deviceType)
	return c
}

// EnableAttributeSuggestions sets the optional parameter
// "enableAttributeSuggestions": If true, attribute suggestions are enabled and
// provided in the response. This field is only available for the
// `cloud-retail` dataset.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) EnableAttributeSuggestions(enableAttributeSuggestions bool) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("enableAttributeSuggestions", fmt.Sprint(enableAttributeSuggestions))
	return c
}

// Entity sets the optional parameter "entity": The entity for customers who
// run multiple entities, domains, sites, or regions, for example, `Google US`,
// `Google Ads`, `Waymo`, `google.com`, `youtube.com`, etc. If this is set, it
// must be an exact match with UserEvent.entity to get per-entity autocomplete
// results. This field will be applied to `completion_results` only. It has no
// effect on the `attribute_results`. Also, this entity should be limited to
// 256 characters, if too long, it will be truncated to 256 characters in both
// generation and serving time, and may lead to mis-match. To ensure it works,
// please set the entity with string within 256 characters.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Entity(entity string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("entity", entity)
	return c
}

// LanguageCodes sets the optional parameter "languageCodes": Note that this
// field applies for `user-data` dataset only. For requests with `cloud-retail`
// dataset, setting this field has no effect. The language filters applied to
// the output suggestions. If set, it should contain the language of the query.
// If not set, suggestions are returned without considering language
// restrictions. This is the BCP-47 language code, such as "en-US" or
// "sr-Latn". For more information, see Tags for Identifying Languages
// (https://tools.ietf.org/html/bcp47). The maximum number of language codes is
// 3.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) LanguageCodes(languageCodes ...string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.SetMulti("languageCodes", append([]string{}, languageCodes...))
	return c
}

// MaxSuggestions sets the optional parameter "maxSuggestions": Completion max
// suggestions. If left unset or set to 0, then will fallback to the configured
// value CompletionConfig.max_suggestions. The maximum allowed max suggestions
// is 20. If it is set higher, it will be capped by 20.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) MaxSuggestions(maxSuggestions int64) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("maxSuggestions", fmt.Sprint(maxSuggestions))
	return c
}

// Query sets the optional parameter "query": Required. The query used to
// generate suggestions. The maximum number of allowed characters is 255.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Query(query string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("query", query)
	return c
}

// VisitorId sets the optional parameter "visitorId": Recommended field. A
// unique identifier for tracking visitors. For example, this could be
// implemented with an HTTP cookie, which should be able to uniquely identify a
// visitor on a single device. This unique identifier should not change if the
// visitor logs in or out of the website. The field must be a UTF-8 encoded
// string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT
// error is returned.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) VisitorId(visitorId string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("visitorId", visitorId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Context(ctx context.Context) *ProjectsLocationsCatalogsCompleteQueryCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsCompleteQueryCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}:completeQuery")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.completeQuery", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.completeQuery" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2CompleteQueryResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsCompleteQueryCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2CompleteQueryResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2CompleteQueryResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.completeQuery", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsExportAnalyticsMetricsCall struct {
	s                                                *Service
	catalog                                          string
	googlecloudretailv2exportanalyticsmetricsrequest *GoogleCloudRetailV2ExportAnalyticsMetricsRequest
	urlParams_                                       gensupport.URLParams
	ctx_                                             context.Context
	header_                                          http.Header
}

// ExportAnalyticsMetrics: Exports analytics metrics. `Operation.response` is
// of type `ExportAnalyticsMetricsResponse`. `Operation.metadata` is of type
// `ExportMetadata`.
//
//   - catalog: Full resource name of the parent catalog. Expected format:
//     `projects/*/locations/*/catalogs/*`.
func (r *ProjectsLocationsCatalogsService) ExportAnalyticsMetrics(catalog string, googlecloudretailv2exportanalyticsmetricsrequest *GoogleCloudRetailV2ExportAnalyticsMetricsRequest) *ProjectsLocationsCatalogsExportAnalyticsMetricsCall {
	c := &ProjectsLocationsCatalogsExportAnalyticsMetricsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	c.googlecloudretailv2exportanalyticsmetricsrequest = googlecloudretailv2exportanalyticsmetricsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsExportAnalyticsMetricsCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsExportAnalyticsMetricsCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsExportAnalyticsMetricsCall) Context(ctx context.Context) *ProjectsLocationsCatalogsExportAnalyticsMetricsCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsExportAnalyticsMetricsCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsExportAnalyticsMetricsCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2exportanalyticsmetricsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}:exportAnalyticsMetrics")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.exportAnalyticsMetrics", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.exportAnalyticsMetrics" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsExportAnalyticsMetricsCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.exportAnalyticsMetrics", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGetAttributesConfigCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// GetAttributesConfig: Gets an AttributesConfig.
//
//   - name: Full AttributesConfig resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/at
//     tributesConfig`.
func (r *ProjectsLocationsCatalogsService) GetAttributesConfig(name string) *ProjectsLocationsCatalogsGetAttributesConfigCall {
	c := &ProjectsLocationsCatalogsGetAttributesConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGetAttributesConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGetAttributesConfigCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsGetAttributesConfigCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsGetAttributesConfigCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGetAttributesConfigCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGetAttributesConfigCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGetAttributesConfigCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGetAttributesConfigCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getAttributesConfig", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.getAttributesConfig" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2AttributesConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGetAttributesConfigCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2AttributesConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2AttributesConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getAttributesConfig", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGetCompletionConfigCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// GetCompletionConfig: Gets a CompletionConfig.
//
//   - name: Full CompletionConfig resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/co
//     mpletionConfig`.
func (r *ProjectsLocationsCatalogsService) GetCompletionConfig(name string) *ProjectsLocationsCatalogsGetCompletionConfigCall {
	c := &ProjectsLocationsCatalogsGetCompletionConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGetCompletionConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGetCompletionConfigCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsGetCompletionConfigCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsGetCompletionConfigCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGetCompletionConfigCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGetCompletionConfigCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGetCompletionConfigCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGetCompletionConfigCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getCompletionConfig", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.getCompletionConfig" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2CompletionConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGetCompletionConfigCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2CompletionConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2CompletionConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getCompletionConfig", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// GetConversationalSearchCustomizationConfig: Returns the conversational
// search customization config for a given catalog.
//
//   - name: Resource name of the parent catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsService) GetConversationalSearchCustomizationConfig(name string) *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall {
	c := &ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}/conversationalSearchCustomizationConfig")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getConversationalSearchCustomizationConfig", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.getConversationalSearchCustomizationConfig" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ConversationalSearchCustomizationConfig.ServerResponse.He
// ader or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGetConversationalSearchCustomizationConfigCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ConversationalSearchCustomizationConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ConversationalSearchCustomizationConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getConversationalSearchCustomizationConfig", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGetDefaultBranchCall struct {
	s            *Service
	catalog      string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// GetDefaultBranch: Get which branch is currently default branch set by
// CatalogService.SetDefaultBranch method under a specified parent catalog.
//
//   - catalog: The parent catalog resource name, such as
//     `projects/*/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsService) GetDefaultBranch(catalog string) *ProjectsLocationsCatalogsGetDefaultBranchCall {
	c := &ProjectsLocationsCatalogsGetDefaultBranchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGetDefaultBranchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGetDefaultBranchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsGetDefaultBranchCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsGetDefaultBranchCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGetDefaultBranchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGetDefaultBranchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGetDefaultBranchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGetDefaultBranchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}:getDefaultBranch")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getDefaultBranch", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.getDefaultBranch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2GetDefaultBranchResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGetDefaultBranchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2GetDefaultBranchResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2GetDefaultBranchResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getDefaultBranch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall struct {
	s            *Service
	catalog      string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// GetGenerativeQuestionFeature: Manages overal generative question feature
// state -- enables toggling feature on and off.
//
//   - catalog: Resource name of the parent catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsService) GetGenerativeQuestionFeature(catalog string) *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall {
	c := &ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}/generativeQuestionFeature")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getGenerativeQuestionFeature", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.getGenerativeQuestionFeature" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2GenerativeQuestionsFeatureConfig.ServerResponse.Header
// or (if a response was returned at all) in error.(*googleapi.Error).Header.
// Use googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGetGenerativeQuestionFeatureCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2GenerativeQuestionsFeatureConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2GenerativeQuestionsFeatureConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.getGenerativeQuestionFeature", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists all the Catalogs associated with the project.
//
//   - parent: The account resource name with an associated location. If the
//     caller does not have permission to list Catalogs under this location,
//     regardless of whether or not this location exists, a PERMISSION_DENIED
//     error is returned.
func (r *ProjectsLocationsCatalogsService) List(parent string) *ProjectsLocationsCatalogsListCall {
	c := &ProjectsLocationsCatalogsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// PageSize sets the optional parameter "pageSize": Maximum number of Catalogs
// to return. If unspecified, defaults to 50. The maximum allowed value is
// 1000. Values above 1000 will be coerced to 1000. If this field is negative,
// an INVALID_ARGUMENT is returned.
func (c *ProjectsLocationsCatalogsListCall) PageSize(pageSize int64) *ProjectsLocationsCatalogsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token
// ListCatalogsResponse.next_page_token, received from a previous
// CatalogService.ListCatalogs call. Provide this to retrieve the subsequent
// page. When paginating, all other parameters provided to
// CatalogService.ListCatalogs must match the call that provided the page
// token. Otherwise, an INVALID_ARGUMENT error is returned.
func (c *ProjectsLocationsCatalogsListCall) PageToken(pageToken string) *ProjectsLocationsCatalogsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/catalogs")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ListCatalogsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ListCatalogsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ListCatalogsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsListCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2ListCatalogsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsLocationsCatalogsPatchCall struct {
	s                          *Service
	name                       string
	googlecloudretailv2catalog *GoogleCloudRetailV2Catalog
	urlParams_                 gensupport.URLParams
	ctx_                       context.Context
	header_                    http.Header
}

// Patch: Updates the Catalogs.
//
// - name: Immutable. The fully qualified resource name of the catalog.
func (r *ProjectsLocationsCatalogsService) Patch(name string, googlecloudretailv2catalog *GoogleCloudRetailV2Catalog) *ProjectsLocationsCatalogsPatchCall {
	c := &ProjectsLocationsCatalogsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2catalog = googlecloudretailv2catalog
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided Catalog to update. If an unsupported or unknown field is
// provided, an INVALID_ARGUMENT error is returned.
func (c *ProjectsLocationsCatalogsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsPatchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2catalog)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Catalog.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsPatchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Catalog, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Catalog{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsSetDefaultBranchCall struct {
	s                                          *Service
	catalog                                    string
	googlecloudretailv2setdefaultbranchrequest *GoogleCloudRetailV2SetDefaultBranchRequest
	urlParams_                                 gensupport.URLParams
	ctx_                                       context.Context
	header_                                    http.Header
}

// SetDefaultBranch: Set a specified branch id as default branch. API methods
// such as SearchService.Search, ProductService.GetProduct,
// ProductService.ListProducts will treat requests using "default_branch" to
// the actual branch id set as default. For example, if
// `projects/*/locations/*/catalogs/*/branches/1` is set as default, setting
// SearchRequest.branch to
// `projects/*/locations/*/catalogs/*/branches/default_branch` is equivalent to
// setting SearchRequest.branch to
// `projects/*/locations/*/catalogs/*/branches/1`. Using multiple branches can
// be useful when developers would like to have a staging branch to test and
// verify for future usage. When it becomes ready, developers switch on the
// staging branch using this API while keeping using
// `projects/*/locations/*/catalogs/*/branches/default_branch` as
// SearchRequest.branch to route the traffic to this staging branch. CAUTION:
// If you have live predict/search traffic, switching the default branch could
// potentially cause outages if the ID space of the new branch is very
// different from the old one. More specifically: * PredictionService will only
// return product IDs from branch {newBranch}. * SearchService will only return
// product IDs from branch {newBranch} (if branch is not explicitly set). *
// UserEventService will only join events with products from branch
// {newBranch}.
//
//   - catalog: Full resource name of the catalog, such as
//     `projects/*/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsService) SetDefaultBranch(catalog string, googlecloudretailv2setdefaultbranchrequest *GoogleCloudRetailV2SetDefaultBranchRequest) *ProjectsLocationsCatalogsSetDefaultBranchCall {
	c := &ProjectsLocationsCatalogsSetDefaultBranchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	c.googlecloudretailv2setdefaultbranchrequest = googlecloudretailv2setdefaultbranchrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsSetDefaultBranchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsSetDefaultBranchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsSetDefaultBranchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsSetDefaultBranchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsSetDefaultBranchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsSetDefaultBranchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2setdefaultbranchrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}:setDefaultBranch")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.setDefaultBranch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.setDefaultBranch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleProtobufEmpty.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsLocationsCatalogsSetDefaultBranchCall) Do(opts ...googleapi.CallOption) (*GoogleProtobufEmpty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleProtobufEmpty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.setDefaultBranch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUpdateAttributesConfigCall struct {
	s                                   *Service
	name                                string
	googlecloudretailv2attributesconfig *GoogleCloudRetailV2AttributesConfig
	urlParams_                          gensupport.URLParams
	ctx_                                context.Context
	header_                             http.Header
}

// UpdateAttributesConfig: Updates the AttributesConfig. The catalog attributes
// in the request will be updated in the catalog, or inserted if they do not
// exist. Existing catalog attributes not included in the request will remain
// unchanged. Attributes that are assigned to products, but do not exist at the
// catalog level, are always included in the response. The product attribute is
// assigned default values for missing catalog attribute fields, e.g.,
// searchable and dynamic facetable options.
//
//   - name: Immutable. The fully qualified resource name of the attribute
//     config. Format: `projects/*/locations/*/catalogs/*/attributesConfig`.
func (r *ProjectsLocationsCatalogsService) UpdateAttributesConfig(name string, googlecloudretailv2attributesconfig *GoogleCloudRetailV2AttributesConfig) *ProjectsLocationsCatalogsUpdateAttributesConfigCall {
	c := &ProjectsLocationsCatalogsUpdateAttributesConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2attributesconfig = googlecloudretailv2attributesconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided AttributesConfig to update. The following is the only
// supported field: * AttributesConfig.catalog_attributes If not set, all
// supported fields are updated.
func (c *ProjectsLocationsCatalogsUpdateAttributesConfigCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsUpdateAttributesConfigCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUpdateAttributesConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUpdateAttributesConfigCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUpdateAttributesConfigCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUpdateAttributesConfigCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUpdateAttributesConfigCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUpdateAttributesConfigCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2attributesconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateAttributesConfig", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.updateAttributesConfig" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2AttributesConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUpdateAttributesConfigCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2AttributesConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2AttributesConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateAttributesConfig", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUpdateCompletionConfigCall struct {
	s                                   *Service
	name                                string
	googlecloudretailv2completionconfig *GoogleCloudRetailV2CompletionConfig
	urlParams_                          gensupport.URLParams
	ctx_                                context.Context
	header_                             http.Header
}

// UpdateCompletionConfig: Updates the CompletionConfigs.
//
//   - name: Immutable. Fully qualified name
//     `projects/*/locations/*/catalogs/*/completionConfig`.
func (r *ProjectsLocationsCatalogsService) UpdateCompletionConfig(name string, googlecloudretailv2completionconfig *GoogleCloudRetailV2CompletionConfig) *ProjectsLocationsCatalogsUpdateCompletionConfigCall {
	c := &ProjectsLocationsCatalogsUpdateCompletionConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2completionconfig = googlecloudretailv2completionconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided CompletionConfig to update. The following are the only
// supported fields: * CompletionConfig.matching_order *
// CompletionConfig.max_suggestions * CompletionConfig.min_prefix_length *
// CompletionConfig.auto_learning If not set, all supported fields are updated.
func (c *ProjectsLocationsCatalogsUpdateCompletionConfigCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsUpdateCompletionConfigCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUpdateCompletionConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUpdateCompletionConfigCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUpdateCompletionConfigCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUpdateCompletionConfigCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUpdateCompletionConfigCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUpdateCompletionConfigCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2completionconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateCompletionConfig", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.updateCompletionConfig" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2CompletionConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUpdateCompletionConfigCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2CompletionConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2CompletionConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateCompletionConfig", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall struct {
	s                                                          *Service
	catalog                                                    string
	googlecloudretailv2conversationalsearchcustomizationconfig *GoogleCloudRetailV2ConversationalSearchCustomizationConfig
	urlParams_                                                 gensupport.URLParams
	ctx_                                                       context.Context
	header_                                                    http.Header
}

// UpdateConversationalSearchCustomizationConfig: Updates the conversational
// search customization config for a given catalog.
//
//   - catalog: Resource name of the catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsService) UpdateConversationalSearchCustomizationConfig(catalog string, googlecloudretailv2conversationalsearchcustomizationconfig *GoogleCloudRetailV2ConversationalSearchCustomizationConfig) *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall {
	c := &ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	c.googlecloudretailv2conversationalsearchcustomizationconfig = googlecloudretailv2conversationalsearchcustomizationconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided ConversationalSearchCustomizationConfig to update. If not
// set or empty, all supported fields are updated.
func (c *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2conversationalsearchcustomizationconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}/conversationalSearchCustomizationConfig")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateConversationalSearchCustomizationConfig", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.updateConversationalSearchCustomizationConfig" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ConversationalSearchCustomizationConfig.ServerResponse.He
// ader or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUpdateConversationalSearchCustomizationConfigCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ConversationalSearchCustomizationConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ConversationalSearchCustomizationConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateConversationalSearchCustomizationConfig", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUpdateGenerativeQuestionCall struct {
	s                                           *Service
	catalog                                     string
	googlecloudretailv2generativequestionconfig *GoogleCloudRetailV2GenerativeQuestionConfig
	urlParams_                                  gensupport.URLParams
	ctx_                                        context.Context
	header_                                     http.Header
}

// UpdateGenerativeQuestion: Allows management of individual questions.
//
//   - catalog: Resource name of the catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsService) UpdateGenerativeQuestion(catalog string, googlecloudretailv2generativequestionconfig *GoogleCloudRetailV2GenerativeQuestionConfig) *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall {
	c := &ProjectsLocationsCatalogsUpdateGenerativeQuestionCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	c.googlecloudretailv2generativequestionconfig = googlecloudretailv2generativequestionconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided GenerativeQuestionConfig to update. The following are NOT
// supported: * GenerativeQuestionConfig.frequency If not set or empty, all
// supported fields are updated.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2generativequestionconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}/generativeQuestion")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateGenerativeQuestion", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.updateGenerativeQuestion" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2GenerativeQuestionConfig.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2GenerativeQuestionConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2GenerativeQuestionConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateGenerativeQuestion", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall struct {
	s                                                   *Service
	catalog                                             string
	googlecloudretailv2generativequestionsfeatureconfig *GoogleCloudRetailV2GenerativeQuestionsFeatureConfig
	urlParams_                                          gensupport.URLParams
	ctx_                                                context.Context
	header_                                             http.Header
}

// UpdateGenerativeQuestionFeature: Manages overal generative question feature
// state -- enables toggling feature on and off.
//
//   - catalog: Resource name of the affected catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsService) UpdateGenerativeQuestionFeature(catalog string, googlecloudretailv2generativequestionsfeatureconfig *GoogleCloudRetailV2GenerativeQuestionsFeatureConfig) *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall {
	c := &ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.catalog = catalog
	c.googlecloudretailv2generativequestionsfeatureconfig = googlecloudretailv2generativequestionsfeatureconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided GenerativeQuestionsFeatureConfig to update. If not set or
// empty, all supported fields are updated.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2generativequestionsfeatureconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+catalog}/generativeQuestionFeature")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"catalog": c.catalog,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateGenerativeQuestionFeature", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.updateGenerativeQuestionFeature" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2GenerativeQuestionsFeatureConfig.ServerResponse.Header
// or (if a response was returned at all) in error.(*googleapi.Error).Header.
// Use googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUpdateGenerativeQuestionFeatureCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2GenerativeQuestionsFeatureConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2GenerativeQuestionsFeatureConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.updateGenerativeQuestionFeature", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall struct {
	s                                             *Service
	attributesConfig                              string
	googlecloudretailv2addcatalogattributerequest *GoogleCloudRetailV2AddCatalogAttributeRequest
	urlParams_                                    gensupport.URLParams
	ctx_                                          context.Context
	header_                                       http.Header
}

// AddCatalogAttribute: Adds the specified CatalogAttribute to the
// AttributesConfig. If the CatalogAttribute to add already exists, an
// ALREADY_EXISTS error is returned.
//
//   - attributesConfig: Full AttributesConfig resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/at
//     tributesConfig`.
func (r *ProjectsLocationsCatalogsAttributesConfigService) AddCatalogAttribute(attributesConfig string, googlecloudretailv2addcatalogattributerequest *GoogleCloudRetailV2AddCatalogAttributeRequest) *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall {
	c := &ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.attributesConfig = attributesConfig
	c.googlecloudretailv2addcatalogattributerequest = googlecloudretailv2addcatalogattributerequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall) Context(ctx context.Context) *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2addcatalogattributerequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+attributesConfig}:addCatalogAttribute")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"attributesConfig": c.attributesConfig,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.attributesConfig.addCatalogAttribute", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.attributesConfig.addCatalogAttribute" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2AttributesConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsAttributesConfigAddCatalogAttributeCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2AttributesConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2AttributesConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.attributesConfig.addCatalogAttribute", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall struct {
	s                                                *Service
	attributesConfig                                 string
	googlecloudretailv2removecatalogattributerequest *GoogleCloudRetailV2RemoveCatalogAttributeRequest
	urlParams_                                       gensupport.URLParams
	ctx_                                             context.Context
	header_                                          http.Header
}

// RemoveCatalogAttribute: Removes the specified CatalogAttribute from the
// AttributesConfig. If the CatalogAttribute to remove does not exist, a
// NOT_FOUND error is returned.
//
//   - attributesConfig: Full AttributesConfig resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/at
//     tributesConfig`.
func (r *ProjectsLocationsCatalogsAttributesConfigService) RemoveCatalogAttribute(attributesConfig string, googlecloudretailv2removecatalogattributerequest *GoogleCloudRetailV2RemoveCatalogAttributeRequest) *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall {
	c := &ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.attributesConfig = attributesConfig
	c.googlecloudretailv2removecatalogattributerequest = googlecloudretailv2removecatalogattributerequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall) Context(ctx context.Context) *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2removecatalogattributerequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+attributesConfig}:removeCatalogAttribute")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"attributesConfig": c.attributesConfig,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.attributesConfig.removeCatalogAttribute", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.attributesConfig.removeCatalogAttribute" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2AttributesConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsAttributesConfigRemoveCatalogAttributeCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2AttributesConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2AttributesConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.attributesConfig.removeCatalogAttribute", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall struct {
	s                                                 *Service
	attributesConfig                                  string
	googlecloudretailv2replacecatalogattributerequest *GoogleCloudRetailV2ReplaceCatalogAttributeRequest
	urlParams_                                        gensupport.URLParams
	ctx_                                              context.Context
	header_                                           http.Header
}

// ReplaceCatalogAttribute: Replaces the specified CatalogAttribute in the
// AttributesConfig by updating the catalog attribute with the same
// CatalogAttribute.key. If the CatalogAttribute to replace does not exist, a
// NOT_FOUND error is returned.
//
//   - attributesConfig: Full AttributesConfig resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/at
//     tributesConfig`.
func (r *ProjectsLocationsCatalogsAttributesConfigService) ReplaceCatalogAttribute(attributesConfig string, googlecloudretailv2replacecatalogattributerequest *GoogleCloudRetailV2ReplaceCatalogAttributeRequest) *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall {
	c := &ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.attributesConfig = attributesConfig
	c.googlecloudretailv2replacecatalogattributerequest = googlecloudretailv2replacecatalogattributerequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall) Context(ctx context.Context) *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2replacecatalogattributerequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+attributesConfig}:replaceCatalogAttribute")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"attributesConfig": c.attributesConfig,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.attributesConfig.replaceCatalogAttribute", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.attributesConfig.replaceCatalogAttribute" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2AttributesConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsAttributesConfigReplaceCatalogAttributeCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2AttributesConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2AttributesConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.attributesConfig.replaceCatalogAttribute", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesOperationsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets the latest state of a long-running operation. Clients can use this
// method to poll the operation result at intervals as recommended by the API
// service.
//
// - name: The name of the operation resource.
func (r *ProjectsLocationsCatalogsBranchesOperationsService) Get(name string) *ProjectsLocationsCatalogsBranchesOperationsGetCall {
	c := &ProjectsLocationsCatalogsBranchesOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesOperationsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsBranchesOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsBranchesOperationsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesOperationsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesOperationsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesOperationsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.operations.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.operations.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesOperationsGetCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.operations.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall struct {
	s                                              *Service
	product                                        string
	googlecloudretailv2addfulfillmentplacesrequest *GoogleCloudRetailV2AddFulfillmentPlacesRequest
	urlParams_                                     gensupport.URLParams
	ctx_                                           context.Context
	header_                                        http.Header
}

// AddFulfillmentPlaces: We recommend that you use the
// ProductService.AddLocalInventories method instead of the
// ProductService.AddFulfillmentPlaces method.
// ProductService.AddLocalInventories achieves the same results but provides
// more fine-grained control over ingesting local inventory data. Incrementally
// adds place IDs to Product.fulfillment_info.place_ids. This process is
// asynchronous and does not require the Product to exist before updating
// fulfillment information. If the request is valid, the update will be
// enqueued and processed downstream. As a consequence, when a response is
// returned, the added place IDs are not immediately manifested in the Product
// queried by ProductService.GetProduct or ProductService.ListProducts. The
// returned Operations will be obsolete after 1 day, and GetOperation API will
// return NOT_FOUND afterwards. If conflicting updates are issued, the
// Operations associated with the stale updates will not be marked as done
// until being obsolete.
//
//   - product: Full resource name of Product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/some_product_id`. If the caller does not have permission to
//     access the Product, regardless of whether or not it exists, a
//     PERMISSION_DENIED error is returned.
func (r *ProjectsLocationsCatalogsBranchesProductsService) AddFulfillmentPlaces(product string, googlecloudretailv2addfulfillmentplacesrequest *GoogleCloudRetailV2AddFulfillmentPlacesRequest) *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall {
	c := &ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.product = product
	c.googlecloudretailv2addfulfillmentplacesrequest = googlecloudretailv2addfulfillmentplacesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2addfulfillmentplacesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+product}:addFulfillmentPlaces")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"product": c.product,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.addFulfillmentPlaces", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.addFulfillmentPlaces" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsAddFulfillmentPlacesCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.addFulfillmentPlaces", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall struct {
	s                                             *Service
	product                                       string
	googlecloudretailv2addlocalinventoriesrequest *GoogleCloudRetailV2AddLocalInventoriesRequest
	urlParams_                                    gensupport.URLParams
	ctx_                                          context.Context
	header_                                       http.Header
}

// AddLocalInventories: Updates local inventory information for a Product at a
// list of places, while respecting the last update timestamps of each
// inventory field. This process is asynchronous and does not require the
// Product to exist before updating inventory information. If the request is
// valid, the update will be enqueued and processed downstream. As a
// consequence, when a response is returned, updates are not immediately
// manifested in the Product queried by ProductService.GetProduct or
// ProductService.ListProducts. Local inventory information can only be
// modified using this method. ProductService.CreateProduct and
// ProductService.UpdateProduct has no effect on local inventories. The
// returned Operations will be obsolete after 1 day, and GetOperation API will
// return NOT_FOUND afterwards. If conflicting updates are issued, the
// Operations associated with the stale updates will not be marked as done
// until being obsolete.
//
//   - product: Full resource name of Product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/some_product_id`. If the caller does not have permission to
//     access the Product, regardless of whether or not it exists, a
//     PERMISSION_DENIED error is returned.
func (r *ProjectsLocationsCatalogsBranchesProductsService) AddLocalInventories(product string, googlecloudretailv2addlocalinventoriesrequest *GoogleCloudRetailV2AddLocalInventoriesRequest) *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall {
	c := &ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.product = product
	c.googlecloudretailv2addlocalinventoriesrequest = googlecloudretailv2addlocalinventoriesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2addlocalinventoriesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+product}:addLocalInventories")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"product": c.product,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.addLocalInventories", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.addLocalInventories" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsAddLocalInventoriesCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.addLocalInventories", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsCreateCall struct {
	s                          *Service
	parent                     string
	googlecloudretailv2product *GoogleCloudRetailV2Product
	urlParams_                 gensupport.URLParams
	ctx_                       context.Context
	header_                    http.Header
}

// Create: Creates a Product.
//
//   - parent: The parent catalog resource name, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch`.
func (r *ProjectsLocationsCatalogsBranchesProductsService) Create(parent string, googlecloudretailv2product *GoogleCloudRetailV2Product) *ProjectsLocationsCatalogsBranchesProductsCreateCall {
	c := &ProjectsLocationsCatalogsBranchesProductsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2product = googlecloudretailv2product
	return c
}

// ProductId sets the optional parameter "productId": Required. The ID to use
// for the Product, which will become the final component of the Product.name.
// If the caller does not have permission to create the Product, regardless of
// whether or not it exists, a PERMISSION_DENIED error is returned. This field
// must be unique among all Products with the same parent. Otherwise, an
// ALREADY_EXISTS error is returned. This field must be a UTF-8 encoded string
// with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error
// is returned.
func (c *ProjectsLocationsCatalogsBranchesProductsCreateCall) ProductId(productId string) *ProjectsLocationsCatalogsBranchesProductsCreateCall {
	c.urlParams_.Set("productId", productId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsCreateCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2product)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/products")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Product.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsCreateCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Product, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Product{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes a Product.
//
//   - name: Full resource name of Product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/some_product_id`. If the caller does not have permission to
//     delete the Product, regardless of whether or not it exists, a
//     PERMISSION_DENIED error is returned. If the Product to delete does not
//     exist, a NOT_FOUND error is returned. The Product to delete can neither be
//     a Product.Type.COLLECTION Product member nor a Product.Type.PRIMARY
//     Product with more than one variants. Otherwise, an INVALID_ARGUMENT error
//     is returned. All inventory information for the named Product will be
//     deleted.
func (r *ProjectsLocationsCatalogsBranchesProductsService) Delete(name string) *ProjectsLocationsCatalogsBranchesProductsDeleteCall {
	c := &ProjectsLocationsCatalogsBranchesProductsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsDeleteCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleProtobufEmpty.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsLocationsCatalogsBranchesProductsDeleteCall) Do(opts ...googleapi.CallOption) (*GoogleProtobufEmpty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleProtobufEmpty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a Product.
//
//   - name: Full resource name of Product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/some_product_id`. If the caller does not have permission to
//     access the Product, regardless of whether or not it exists, a
//     PERMISSION_DENIED error is returned. If the requested Product does not
//     exist, a NOT_FOUND error is returned.
func (r *ProjectsLocationsCatalogsBranchesProductsService) Get(name string) *ProjectsLocationsCatalogsBranchesProductsGetCall {
	c := &ProjectsLocationsCatalogsBranchesProductsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsBranchesProductsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsBranchesProductsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsGetCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Product.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsGetCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Product, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Product{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsImportCall struct {
	s                                        *Service
	parent                                   string
	googlecloudretailv2importproductsrequest *GoogleCloudRetailV2ImportProductsRequest
	urlParams_                               gensupport.URLParams
	ctx_                                     context.Context
	header_                                  http.Header
}

// Import: Bulk import of multiple Products. Request processing may be
// synchronous. Non-existing items are created. Note that it is possible for a
// subset of the Products to be successfully updated.
//
//   - parent:
//     `projects/1234/locations/global/catalogs/default_catalog/branches/default_b
//     ranch` If no updateMask is specified, requires products.create permission.
//     If updateMask is specified, requires products.update permission.
func (r *ProjectsLocationsCatalogsBranchesProductsService) Import(parent string, googlecloudretailv2importproductsrequest *GoogleCloudRetailV2ImportProductsRequest) *ProjectsLocationsCatalogsBranchesProductsImportCall {
	c := &ProjectsLocationsCatalogsBranchesProductsImportCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2importproductsrequest = googlecloudretailv2importproductsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsImportCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsImportCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsImportCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsImportCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsImportCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsImportCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2importproductsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/products:import")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.import", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.import" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsImportCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.import", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Gets a list of Products.
//
//   - parent: The parent branch resource name, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/0`. Use
//     `default_branch` as the branch ID, to list products under the default
//     branch. If the caller does not have permission to list Products under this
//     branch, regardless of whether or not this branch exists, a
//     PERMISSION_DENIED error is returned.
func (r *ProjectsLocationsCatalogsBranchesProductsService) List(parent string) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c := &ProjectsLocationsCatalogsBranchesProductsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": A filter to apply on the list
// results. Supported features: * List all the products under the parent branch
// if filter is unset. * List Product.Type.VARIANT Products sharing the same
// Product.Type.PRIMARY Product. For example: `primary_product_id =
// "some_product_id" * List Products bundled in a Product.Type.COLLECTION
// Product. For example: `collection_product_id = "some_product_id" * List
// Products with a partibular type. For example: `type = "PRIMARY" `type =
// "VARIANT" `type = "COLLECTION" If the field is unrecognizable, an
// INVALID_ARGUMENT error is returned. If the specified Product.Type.PRIMARY
// Product or Product.Type.COLLECTION Product does not exist, a NOT_FOUND error
// is returned.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) Filter(filter string) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": Maximum number of Products
// to return. If unspecified, defaults to 100. The maximum allowed value is
// 1000. Values above 1000 will be coerced to 1000. If this field is negative,
// an INVALID_ARGUMENT error is returned.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) PageSize(pageSize int64) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token
// ListProductsResponse.next_page_token, received from a previous
// ProductService.ListProducts call. Provide this to retrieve the subsequent
// page. When paginating, all other parameters provided to
// ProductService.ListProducts must match the call that provided the page
// token. Otherwise, an INVALID_ARGUMENT error is returned.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) PageToken(pageToken string) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// ReadMask sets the optional parameter "readMask": The fields of Product to
// return in the responses. If not set or empty, the following fields are
// returned: * Product.name * Product.id * Product.title * Product.uri *
// Product.images * Product.price_info * Product.brands If "*" is provided, all
// fields are returned. Product.name is always returned no matter what mask is
// set. If an unsupported or unknown field is provided, an INVALID_ARGUMENT
// error is returned.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) ReadMask(readMask string) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.urlParams_.Set("readMask", readMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/products")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ListProductsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ListProductsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ListProductsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsBranchesProductsListCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2ListProductsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsLocationsCatalogsBranchesProductsPatchCall struct {
	s                          *Service
	name                       string
	googlecloudretailv2product *GoogleCloudRetailV2Product
	urlParams_                 gensupport.URLParams
	ctx_                       context.Context
	header_                    http.Header
}

// Patch: Updates a Product.
//
//   - name: Immutable. Full resource name of the product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/product_id`.
func (r *ProjectsLocationsCatalogsBranchesProductsService) Patch(name string, googlecloudretailv2product *GoogleCloudRetailV2Product) *ProjectsLocationsCatalogsBranchesProductsPatchCall {
	c := &ProjectsLocationsCatalogsBranchesProductsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2product = googlecloudretailv2product
	return c
}

// AllowMissing sets the optional parameter "allowMissing": If set to true, and
// the Product is not found, a new Product will be created. In this situation,
// `update_mask` is ignored.
func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) AllowMissing(allowMissing bool) *ProjectsLocationsCatalogsBranchesProductsPatchCall {
	c.urlParams_.Set("allowMissing", fmt.Sprint(allowMissing))
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided Product to update. The immutable and output only fields are
// NOT supported. If not set, all supported fields (the fields that are neither
// immutable nor output only) are updated. If an unsupported or unknown field
// is provided, an INVALID_ARGUMENT error is returned. The attribute key can be
// updated by setting the mask path as "attributes.${key_name}". If a key name
// is present in the mask but not in the patching product from the request,
// this key will be deleted after the update.
func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsBranchesProductsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2product)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Product.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsPatchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Product, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Product{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsPurgeCall struct {
	s                                       *Service
	parent                                  string
	googlecloudretailv2purgeproductsrequest *GoogleCloudRetailV2PurgeProductsRequest
	urlParams_                              gensupport.URLParams
	ctx_                                    context.Context
	header_                                 http.Header
}

// Purge: Permanently deletes all selected Products under a branch. This
// process is asynchronous. If the request is valid, the removal will be
// enqueued and processed offline. Depending on the number of Products, this
// operation could take hours to complete. Before the operation completes, some
// Products may still be returned by ProductService.GetProduct or
// ProductService.ListProducts. Depending on the number of Products, this
// operation could take hours to complete. To get a sample of Products that
// would be deleted, set PurgeProductsRequest.force to false.
//
//   - parent: The resource name of the branch under which the products are
//     created. The format is
//     `projects/${projectId}/locations/global/catalogs/${catalogId}/branches/${br
//     anchId}`.
func (r *ProjectsLocationsCatalogsBranchesProductsService) Purge(parent string, googlecloudretailv2purgeproductsrequest *GoogleCloudRetailV2PurgeProductsRequest) *ProjectsLocationsCatalogsBranchesProductsPurgeCall {
	c := &ProjectsLocationsCatalogsBranchesProductsPurgeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2purgeproductsrequest = googlecloudretailv2purgeproductsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsPurgeCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsPurgeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsPurgeCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsPurgeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsPurgeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsPurgeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2purgeproductsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/products:purge")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.purge", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.purge" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsPurgeCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.purge", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall struct {
	s                                                 *Service
	product                                           string
	googlecloudretailv2removefulfillmentplacesrequest *GoogleCloudRetailV2RemoveFulfillmentPlacesRequest
	urlParams_                                        gensupport.URLParams
	ctx_                                              context.Context
	header_                                           http.Header
}

// RemoveFulfillmentPlaces: We recommend that you use the
// ProductService.RemoveLocalInventories method instead of the
// ProductService.RemoveFulfillmentPlaces method.
// ProductService.RemoveLocalInventories achieves the same results but provides
// more fine-grained control over ingesting local inventory data. Incrementally
// removes place IDs from a Product.fulfillment_info.place_ids. This process is
// asynchronous and does not require the Product to exist before updating
// fulfillment information. If the request is valid, the update will be
// enqueued and processed downstream. As a consequence, when a response is
// returned, the removed place IDs are not immediately manifested in the
// Product queried by ProductService.GetProduct or ProductService.ListProducts.
// The returned Operations will be obsolete after 1 day, and GetOperation API
// will return NOT_FOUND afterwards. If conflicting updates are issued, the
// Operations associated with the stale updates will not be marked as done
// until being obsolete.
//
//   - product: Full resource name of Product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/some_product_id`. If the caller does not have permission to
//     access the Product, regardless of whether or not it exists, a
//     PERMISSION_DENIED error is returned.
func (r *ProjectsLocationsCatalogsBranchesProductsService) RemoveFulfillmentPlaces(product string, googlecloudretailv2removefulfillmentplacesrequest *GoogleCloudRetailV2RemoveFulfillmentPlacesRequest) *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall {
	c := &ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.product = product
	c.googlecloudretailv2removefulfillmentplacesrequest = googlecloudretailv2removefulfillmentplacesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2removefulfillmentplacesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+product}:removeFulfillmentPlaces")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"product": c.product,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.removeFulfillmentPlaces", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.removeFulfillmentPlaces" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveFulfillmentPlacesCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.removeFulfillmentPlaces", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall struct {
	s                                                *Service
	product                                          string
	googlecloudretailv2removelocalinventoriesrequest *GoogleCloudRetailV2RemoveLocalInventoriesRequest
	urlParams_                                       gensupport.URLParams
	ctx_                                             context.Context
	header_                                          http.Header
}

// RemoveLocalInventories: Remove local inventory information for a Product at
// a list of places at a removal timestamp. This process is asynchronous. If
// the request is valid, the removal will be enqueued and processed downstream.
// As a consequence, when a response is returned, removals are not immediately
// manifested in the Product queried by ProductService.GetProduct or
// ProductService.ListProducts. Local inventory information can only be removed
// using this method. ProductService.CreateProduct and
// ProductService.UpdateProduct has no effect on local inventories. The
// returned Operations will be obsolete after 1 day, and GetOperation API will
// return NOT_FOUND afterwards. If conflicting updates are issued, the
// Operations associated with the stale updates will not be marked as done
// until being obsolete.
//
//   - product: Full resource name of Product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/some_product_id`. If the caller does not have permission to
//     access the Product, regardless of whether or not it exists, a
//     PERMISSION_DENIED error is returned.
func (r *ProjectsLocationsCatalogsBranchesProductsService) RemoveLocalInventories(product string, googlecloudretailv2removelocalinventoriesrequest *GoogleCloudRetailV2RemoveLocalInventoriesRequest) *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall {
	c := &ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.product = product
	c.googlecloudretailv2removelocalinventoriesrequest = googlecloudretailv2removelocalinventoriesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2removelocalinventoriesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+product}:removeLocalInventories")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"product": c.product,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.removeLocalInventories", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.removeLocalInventories" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsRemoveLocalInventoriesCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.removeLocalInventories", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsBranchesProductsSetInventoryCall struct {
	s                                      *Service
	name                                   string
	googlecloudretailv2setinventoryrequest *GoogleCloudRetailV2SetInventoryRequest
	urlParams_                             gensupport.URLParams
	ctx_                                   context.Context
	header_                                http.Header
}

// SetInventory: Updates inventory information for a Product while respecting
// the last update timestamps of each inventory field. This process is
// asynchronous and does not require the Product to exist before updating
// fulfillment information. If the request is valid, the update is enqueued and
// processed downstream. As a consequence, when a response is returned, updates
// are not immediately manifested in the Product queried by
// ProductService.GetProduct or ProductService.ListProducts. When inventory is
// updated with ProductService.CreateProduct and ProductService.UpdateProduct,
// the specified inventory field value(s) overwrite any existing value(s) while
// ignoring the last update time for this field. Furthermore, the last update
// times for the specified inventory fields are overwritten by the times of the
// ProductService.CreateProduct or ProductService.UpdateProduct request. If no
// inventory fields are set in CreateProductRequest.product, then any
// pre-existing inventory information for this product is used. If no inventory
// fields are set in SetInventoryRequest.set_mask, then any existing inventory
// information is preserved. Pre-existing inventory information can only be
// updated with ProductService.SetInventory,
// ProductService.AddFulfillmentPlaces, and
// ProductService.RemoveFulfillmentPlaces. The returned Operations is obsolete
// after one day, and the GetOperation API returns `NOT_FOUND` afterwards. If
// conflicting updates are issued, the Operations associated with the stale
// updates are not marked as done until they are obsolete.
//
//   - name: Immutable. Full resource name of the product, such as
//     `projects/*/locations/global/catalogs/default_catalog/branches/default_bran
//     ch/products/product_id`.
func (r *ProjectsLocationsCatalogsBranchesProductsService) SetInventory(name string, googlecloudretailv2setinventoryrequest *GoogleCloudRetailV2SetInventoryRequest) *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall {
	c := &ProjectsLocationsCatalogsBranchesProductsSetInventoryCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2setinventoryrequest = googlecloudretailv2setinventoryrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall) Context(ctx context.Context) *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2setinventoryrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}:setInventory")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.setInventory", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.branches.products.setInventory" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsBranchesProductsSetInventoryCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.branches.products.setInventory", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsCompletionDataImportCall struct {
	s                                              *Service
	parent                                         string
	googlecloudretailv2importcompletiondatarequest *GoogleCloudRetailV2ImportCompletionDataRequest
	urlParams_                                     gensupport.URLParams
	ctx_                                           context.Context
	header_                                        http.Header
}

// Import: Bulk import of processed completion dataset. Request processing is
// asynchronous. Partial updating is not supported. The operation is
// successfully finished only after the imported suggestions are indexed
// successfully and ready for serving. The process takes hours. This feature is
// only available for users who have Retail Search enabled. Enable Retail
// Search on Cloud Console before using this feature.
//
//   - parent: The catalog which the suggestions dataset belongs to. Format:
//     `projects/1234/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsCompletionDataService) Import(parent string, googlecloudretailv2importcompletiondatarequest *GoogleCloudRetailV2ImportCompletionDataRequest) *ProjectsLocationsCatalogsCompletionDataImportCall {
	c := &ProjectsLocationsCatalogsCompletionDataImportCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2importcompletiondatarequest = googlecloudretailv2importcompletiondatarequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsCompletionDataImportCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsCompletionDataImportCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsCompletionDataImportCall) Context(ctx context.Context) *ProjectsLocationsCatalogsCompletionDataImportCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsCompletionDataImportCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsCompletionDataImportCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2importcompletiondatarequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/completionData:import")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.completionData.import", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.completionData.import" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsCompletionDataImportCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.completionData.import", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsControlsCreateCall struct {
	s                          *Service
	parent                     string
	googlecloudretailv2control *GoogleCloudRetailV2Control
	urlParams_                 gensupport.URLParams
	ctx_                       context.Context
	header_                    http.Header
}

// Create: Creates a Control. If the Control to create already exists, an
// ALREADY_EXISTS error is returned.
//
//   - parent: Full resource name of parent catalog. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`.
func (r *ProjectsLocationsCatalogsControlsService) Create(parent string, googlecloudretailv2control *GoogleCloudRetailV2Control) *ProjectsLocationsCatalogsControlsCreateCall {
	c := &ProjectsLocationsCatalogsControlsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2control = googlecloudretailv2control
	return c
}

// ControlId sets the optional parameter "controlId": Required. The ID to use
// for the Control, which will become the final component of the Control's
// resource name. This value should be 4-63 characters, and valid characters
// are /a-z-_/.
func (c *ProjectsLocationsCatalogsControlsCreateCall) ControlId(controlId string) *ProjectsLocationsCatalogsControlsCreateCall {
	c.urlParams_.Set("controlId", controlId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsControlsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsControlsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsControlsCreateCall) Context(ctx context.Context) *ProjectsLocationsCatalogsControlsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsControlsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsControlsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2control)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/controls")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.controls.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Control.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsControlsCreateCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Control, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Control{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsControlsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes a Control. If the Control to delete does not exist, a
// NOT_FOUND error is returned.
//
//   - name: The resource name of the Control to delete. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/co
//     ntrols/{control_id}`.
func (r *ProjectsLocationsCatalogsControlsService) Delete(name string) *ProjectsLocationsCatalogsControlsDeleteCall {
	c := &ProjectsLocationsCatalogsControlsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsControlsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsControlsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsControlsDeleteCall) Context(ctx context.Context) *ProjectsLocationsCatalogsControlsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsControlsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsControlsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.controls.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleProtobufEmpty.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsLocationsCatalogsControlsDeleteCall) Do(opts ...googleapi.CallOption) (*GoogleProtobufEmpty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleProtobufEmpty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsControlsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a Control.
//
//   - name: The resource name of the Control to get. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/co
//     ntrols/{control_id}`.
func (r *ProjectsLocationsCatalogsControlsService) Get(name string) *ProjectsLocationsCatalogsControlsGetCall {
	c := &ProjectsLocationsCatalogsControlsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsControlsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsControlsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsControlsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsControlsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsControlsGetCall) Context(ctx context.Context) *ProjectsLocationsCatalogsControlsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsControlsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsControlsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.controls.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Control.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsControlsGetCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Control, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Control{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsControlsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists all Controls by their parent Catalog.
//
//   - parent: The catalog resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`.
func (r *ProjectsLocationsCatalogsControlsService) List(parent string) *ProjectsLocationsCatalogsControlsListCall {
	c := &ProjectsLocationsCatalogsControlsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": A filter to apply on the list
// results. Supported features: * List all the products under the parent branch
// if filter is unset. * List controls that are used in a single ServingConfig:
// 'serving_config = "boosted_home_page_cvr"'
func (c *ProjectsLocationsCatalogsControlsListCall) Filter(filter string) *ProjectsLocationsCatalogsControlsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": Maximum number of results
// to return. If unspecified, defaults to 50. Max allowed value is 1000.
func (c *ProjectsLocationsCatalogsControlsListCall) PageSize(pageSize int64) *ProjectsLocationsCatalogsControlsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token, received
// from a previous `ListControls` call. Provide this to retrieve the subsequent
// page.
func (c *ProjectsLocationsCatalogsControlsListCall) PageToken(pageToken string) *ProjectsLocationsCatalogsControlsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsControlsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsControlsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsControlsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsControlsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsControlsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsControlsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsControlsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsControlsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/controls")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.controls.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ListControlsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsControlsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ListControlsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ListControlsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsControlsListCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2ListControlsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsLocationsCatalogsControlsPatchCall struct {
	s                          *Service
	name                       string
	googlecloudretailv2control *GoogleCloudRetailV2Control
	urlParams_                 gensupport.URLParams
	ctx_                       context.Context
	header_                    http.Header
}

// Patch: Updates a Control. Control cannot be set to a different oneof field,
// if so an INVALID_ARGUMENT is returned. If the Control to update does not
// exist, a NOT_FOUND error is returned.
//
//   - name: Immutable. Fully qualified name
//     `projects/*/locations/global/catalogs/*/controls/*`.
func (r *ProjectsLocationsCatalogsControlsService) Patch(name string, googlecloudretailv2control *GoogleCloudRetailV2Control) *ProjectsLocationsCatalogsControlsPatchCall {
	c := &ProjectsLocationsCatalogsControlsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2control = googlecloudretailv2control
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided Control to update. The following are NOT supported: *
// Control.name If not set or empty, all supported fields are updated.
func (c *ProjectsLocationsCatalogsControlsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsControlsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsControlsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsControlsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsControlsPatchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsControlsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsControlsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsControlsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2control)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.controls.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Control.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsControlsPatchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Control, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Control{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.controls.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall struct {
	s                                                              *Service
	parent                                                         string
	googlecloudretailv2batchupdategenerativequestionconfigsrequest *GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsRequest
	urlParams_                                                     gensupport.URLParams
	ctx_                                                           context.Context
	header_                                                        http.Header
}

// BatchUpdate: Allows management of multiple questions.
//
//   - parent: Optional. Resource name of the parent catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsGenerativeQuestionService) BatchUpdate(parent string, googlecloudretailv2batchupdategenerativequestionconfigsrequest *GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsRequest) *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall {
	c := &ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2batchupdategenerativequestionconfigsrequest = googlecloudretailv2batchupdategenerativequestionconfigsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2batchupdategenerativequestionconfigsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/generativeQuestion:batchUpdate")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.generativeQuestion.batchUpdate", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.generativeQuestion.batchUpdate" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse.ServerRespon
// se.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGenerativeQuestionBatchUpdateCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2BatchUpdateGenerativeQuestionConfigsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.generativeQuestion.batchUpdate", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsGenerativeQuestionsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Returns all questions for a given catalog.
//
//   - parent: Resource name of the parent catalog. Format:
//     projects/{project}/locations/{location}/catalogs/{catalog}.
func (r *ProjectsLocationsCatalogsGenerativeQuestionsService) List(parent string) *ProjectsLocationsCatalogsGenerativeQuestionsListCall {
	c := &ProjectsLocationsCatalogsGenerativeQuestionsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsGenerativeQuestionsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsGenerativeQuestionsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsGenerativeQuestionsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsGenerativeQuestionsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsGenerativeQuestionsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsGenerativeQuestionsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsGenerativeQuestionsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsGenerativeQuestionsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/generativeQuestions")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.generativeQuestions.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.generativeQuestions.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse.ServerResponse.Head
// er or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsGenerativeQuestionsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ListGenerativeQuestionConfigsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.generativeQuestions.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsCreateCall struct {
	s                        *Service
	parent                   string
	googlecloudretailv2model *GoogleCloudRetailV2Model
	urlParams_               gensupport.URLParams
	ctx_                     context.Context
	header_                  http.Header
}

// Create: Creates a new model.
//
//   - parent: The parent resource under which to create the model. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`.
func (r *ProjectsLocationsCatalogsModelsService) Create(parent string, googlecloudretailv2model *GoogleCloudRetailV2Model) *ProjectsLocationsCatalogsModelsCreateCall {
	c := &ProjectsLocationsCatalogsModelsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2model = googlecloudretailv2model
	return c
}

// DryRun sets the optional parameter "dryRun": Whether to run a dry run to
// validate the request (without actually creating the model).
func (c *ProjectsLocationsCatalogsModelsCreateCall) DryRun(dryRun bool) *ProjectsLocationsCatalogsModelsCreateCall {
	c.urlParams_.Set("dryRun", fmt.Sprint(dryRun))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsCreateCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2model)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/models")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsCreateCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes an existing model.
//
//   - name: The resource name of the Model to delete. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mo
//     dels/{model_id}`.
func (r *ProjectsLocationsCatalogsModelsService) Delete(name string) *ProjectsLocationsCatalogsModelsDeleteCall {
	c := &ProjectsLocationsCatalogsModelsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsDeleteCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleProtobufEmpty.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsLocationsCatalogsModelsDeleteCall) Do(opts ...googleapi.CallOption) (*GoogleProtobufEmpty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleProtobufEmpty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a model.
//
//   - name: The resource name of the Model to get. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog}/model
//     s/{model_id}`.
func (r *ProjectsLocationsCatalogsModelsService) Get(name string) *ProjectsLocationsCatalogsModelsGetCall {
	c := &ProjectsLocationsCatalogsModelsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsModelsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsModelsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsGetCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Model.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsGetCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Model, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Model{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists all the models linked to this event store.
//
//   - parent: The parent for which to list models. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`.
func (r *ProjectsLocationsCatalogsModelsService) List(parent string) *ProjectsLocationsCatalogsModelsListCall {
	c := &ProjectsLocationsCatalogsModelsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// PageSize sets the optional parameter "pageSize": Maximum number of results
// to return. If unspecified, defaults to 50. Max allowed value is 1000.
func (c *ProjectsLocationsCatalogsModelsListCall) PageSize(pageSize int64) *ProjectsLocationsCatalogsModelsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token, received
// from a previous `ListModels` call. Provide this to retrieve the subsequent
// page.
func (c *ProjectsLocationsCatalogsModelsListCall) PageToken(pageToken string) *ProjectsLocationsCatalogsModelsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsModelsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsModelsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/models")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ListModelsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ListModelsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ListModelsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsModelsListCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2ListModelsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsLocationsCatalogsModelsPatchCall struct {
	s                        *Service
	name                     string
	googlecloudretailv2model *GoogleCloudRetailV2Model
	urlParams_               gensupport.URLParams
	ctx_                     context.Context
	header_                  http.Header
}

// Patch: Update of model metadata. Only fields that currently can be updated
// are: `filtering_option` and `periodic_tuning_state`. If other values are
// provided, this API method ignores them.
//
//   - name: The fully qualified resource name of the model. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mo
//     dels/{model_id}` catalog_id has char limit of 50. recommendation_model_id
//     has char limit of 40.
func (r *ProjectsLocationsCatalogsModelsService) Patch(name string, googlecloudretailv2model *GoogleCloudRetailV2Model) *ProjectsLocationsCatalogsModelsPatchCall {
	c := &ProjectsLocationsCatalogsModelsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2model = googlecloudretailv2model
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided 'model' to update. If not set, by default updates all
// fields.
func (c *ProjectsLocationsCatalogsModelsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsModelsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsPatchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2model)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Model.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsPatchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Model, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Model{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsPauseCall struct {
	s                                    *Service
	name                                 string
	googlecloudretailv2pausemodelrequest *GoogleCloudRetailV2PauseModelRequest
	urlParams_                           gensupport.URLParams
	ctx_                                 context.Context
	header_                              http.Header
}

// Pause: Pauses the training of an existing model.
//
//   - name: The name of the model to pause. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mo
//     dels/{model_id}`.
func (r *ProjectsLocationsCatalogsModelsService) Pause(name string, googlecloudretailv2pausemodelrequest *GoogleCloudRetailV2PauseModelRequest) *ProjectsLocationsCatalogsModelsPauseCall {
	c := &ProjectsLocationsCatalogsModelsPauseCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2pausemodelrequest = googlecloudretailv2pausemodelrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsPauseCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsPauseCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsPauseCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsPauseCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsPauseCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsPauseCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2pausemodelrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}:pause")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.pause", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.pause" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Model.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsPauseCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Model, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Model{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.pause", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsResumeCall struct {
	s                                     *Service
	name                                  string
	googlecloudretailv2resumemodelrequest *GoogleCloudRetailV2ResumeModelRequest
	urlParams_                            gensupport.URLParams
	ctx_                                  context.Context
	header_                               http.Header
}

// Resume: Resumes the training of an existing model.
//
//   - name: The name of the model to resume. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mo
//     dels/{model_id}`.
func (r *ProjectsLocationsCatalogsModelsService) Resume(name string, googlecloudretailv2resumemodelrequest *GoogleCloudRetailV2ResumeModelRequest) *ProjectsLocationsCatalogsModelsResumeCall {
	c := &ProjectsLocationsCatalogsModelsResumeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2resumemodelrequest = googlecloudretailv2resumemodelrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsResumeCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsResumeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsResumeCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsResumeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsResumeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsResumeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2resumemodelrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}:resume")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.resume", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.resume" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2Model.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsResumeCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2Model, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2Model{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.resume", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsModelsTuneCall struct {
	s                                   *Service
	name                                string
	googlecloudretailv2tunemodelrequest *GoogleCloudRetailV2TuneModelRequest
	urlParams_                          gensupport.URLParams
	ctx_                                context.Context
	header_                             http.Header
}

// Tune: Tunes an existing model.
//
//   - name: The resource name of the model to tune. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/mo
//     dels/{model_id}`.
func (r *ProjectsLocationsCatalogsModelsService) Tune(name string, googlecloudretailv2tunemodelrequest *GoogleCloudRetailV2TuneModelRequest) *ProjectsLocationsCatalogsModelsTuneCall {
	c := &ProjectsLocationsCatalogsModelsTuneCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2tunemodelrequest = googlecloudretailv2tunemodelrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsModelsTuneCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsModelsTuneCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsModelsTuneCall) Context(ctx context.Context) *ProjectsLocationsCatalogsModelsTuneCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsModelsTuneCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsModelsTuneCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2tunemodelrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}:tune")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.tune", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.models.tune" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsModelsTuneCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.models.tune", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsOperationsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets the latest state of a long-running operation. Clients can use this
// method to poll the operation result at intervals as recommended by the API
// service.
//
// - name: The name of the operation resource.
func (r *ProjectsLocationsCatalogsOperationsService) Get(name string) *ProjectsLocationsCatalogsOperationsGetCall {
	c := &ProjectsLocationsCatalogsOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsOperationsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsOperationsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsCatalogsOperationsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsOperationsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsOperationsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.operations.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.operations.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsOperationsGetCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.operations.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsOperationsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists operations that match the specified filter in the request. If
// the server doesn't support this method, it returns `UNIMPLEMENTED`.
//
// - name: The name of the operation's parent resource.
func (r *ProjectsLocationsCatalogsOperationsService) List(name string) *ProjectsLocationsCatalogsOperationsListCall {
	c := &ProjectsLocationsCatalogsOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": The standard list filter.
func (c *ProjectsLocationsCatalogsOperationsListCall) Filter(filter string) *ProjectsLocationsCatalogsOperationsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The standard list page
// size.
func (c *ProjectsLocationsCatalogsOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsCatalogsOperationsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": The standard list page
// token.
func (c *ProjectsLocationsCatalogsOperationsListCall) PageToken(pageToken string) *ProjectsLocationsCatalogsOperationsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// ReturnPartialSuccess sets the optional parameter "returnPartialSuccess":
// When set to `true`, operations that are reachable are returned as normal,
// and those that are unreachable are returned in the
// ListOperationsResponse.unreachable field. This can only be `true` when
// reading across collections. For example, when `parent` is set to
// "projects/example/locations/-". This field is not supported by default and
// will result in an `UNIMPLEMENTED` error if set unless explicitly documented
// otherwise in service or product specific documentation.
func (c *ProjectsLocationsCatalogsOperationsListCall) ReturnPartialSuccess(returnPartialSuccess bool) *ProjectsLocationsCatalogsOperationsListCall {
	c.urlParams_.Set("returnPartialSuccess", fmt.Sprint(returnPartialSuccess))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsOperationsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsOperationsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsOperationsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsOperationsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsOperationsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsOperationsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}/operations")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.operations.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.operations.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningListOperationsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsOperationsListCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningListOperationsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningListOperationsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.operations.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsOperationsListCall) Pages(ctx context.Context, f func(*GoogleLongrunningListOperationsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsLocationsCatalogsPlacementsConversationalSearchCall struct {
	s                                              *Service
	placement                                      string
	googlecloudretailv2conversationalsearchrequest *GoogleCloudRetailV2ConversationalSearchRequest
	urlParams_                                     gensupport.URLParams
	ctx_                                           context.Context
	header_                                        http.Header
}

// ConversationalSearch: Performs a conversational search. This feature is only
// available for users who have Conversational Search enabled.
//
//   - placement: The resource name of the search engine placement, such as
//     `projects/*/locations/global/catalogs/default_catalog/placements/default_se
//     arch` or
//     `projects/*/locations/global/catalogs/default_catalog/servingConfigs/defaul
//     t_serving_config` This field is used to identify the serving config name
//     and the set of models that will be used to make the search.
func (r *ProjectsLocationsCatalogsPlacementsService) ConversationalSearch(placement string, googlecloudretailv2conversationalsearchrequest *GoogleCloudRetailV2ConversationalSearchRequest) *ProjectsLocationsCatalogsPlacementsConversationalSearchCall {
	c := &ProjectsLocationsCatalogsPlacementsConversationalSearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.placement = placement
	c.googlecloudretailv2conversationalsearchrequest = googlecloudretailv2conversationalsearchrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsPlacementsConversationalSearchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsPlacementsConversationalSearchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsPlacementsConversationalSearchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsPlacementsConversationalSearchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsPlacementsConversationalSearchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsPlacementsConversationalSearchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2conversationalsearchrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+placement}:conversationalSearch")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"placement": c.placement,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.placements.conversationalSearch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.placements.conversationalSearch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ConversationalSearchResponse.ServerResponse.Header or
// (if a response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsPlacementsConversationalSearchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ConversationalSearchResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ConversationalSearchResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.placements.conversationalSearch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsPlacementsPredictCall struct {
	s                                 *Service
	placement                         string
	googlecloudretailv2predictrequest *GoogleCloudRetailV2PredictRequest
	urlParams_                        gensupport.URLParams
	ctx_                              context.Context
	header_                           http.Header
}

// Predict: Makes a recommendation prediction.
//
//   - placement: Full resource name of the format:
//     `{placement=projects/*/locations/global/catalogs/default_catalog/servingCon
//     figs/*}` or
//     `{placement=projects/*/locations/global/catalogs/default_catalog/placements
//     /*}`. We recommend using the `servingConfigs` resource. `placements` is a
//     legacy resource. The ID of the Recommendations AI serving config or
//     placement. Before you can request predictions from your model, you must
//     create at least one serving config or placement for it. For more
//     information, see [Manage serving configs]
//     (https://cloud.google.com/retail/docs/manage-configs). The full list of
//     available serving configs can be seen at
//     https://console.cloud.google.com/ai/retail/catalogs/default_catalog/configs.
func (r *ProjectsLocationsCatalogsPlacementsService) Predict(placement string, googlecloudretailv2predictrequest *GoogleCloudRetailV2PredictRequest) *ProjectsLocationsCatalogsPlacementsPredictCall {
	c := &ProjectsLocationsCatalogsPlacementsPredictCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.placement = placement
	c.googlecloudretailv2predictrequest = googlecloudretailv2predictrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsPlacementsPredictCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsPlacementsPredictCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsPlacementsPredictCall) Context(ctx context.Context) *ProjectsLocationsCatalogsPlacementsPredictCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsPlacementsPredictCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsPlacementsPredictCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2predictrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+placement}:predict")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"placement": c.placement,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.placements.predict", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.placements.predict" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2PredictResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsPlacementsPredictCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2PredictResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2PredictResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.placements.predict", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsPlacementsSearchCall struct {
	s                                *Service
	placement                        string
	googlecloudretailv2searchrequest *GoogleCloudRetailV2SearchRequest
	urlParams_                       gensupport.URLParams
	ctx_                             context.Context
	header_                          http.Header
}

// Search: Performs a search. This feature is only available for users who have
// Retail Search enabled. Enable Retail Search on Cloud Console before using
// this feature.
//
//   - placement: The resource name of the Retail Search serving config, such as
//     `projects/*/locations/global/catalogs/default_catalog/servingConfigs/defaul
//     t_serving_config` or the name of the legacy placement resource, such as
//     `projects/*/locations/global/catalogs/default_catalog/placements/default_se
//     arch`. This field is used to identify the serving config name and the set
//     of models that are used to make the search.
func (r *ProjectsLocationsCatalogsPlacementsService) Search(placement string, googlecloudretailv2searchrequest *GoogleCloudRetailV2SearchRequest) *ProjectsLocationsCatalogsPlacementsSearchCall {
	c := &ProjectsLocationsCatalogsPlacementsSearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.placement = placement
	c.googlecloudretailv2searchrequest = googlecloudretailv2searchrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsPlacementsSearchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsPlacementsSearchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsPlacementsSearchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsPlacementsSearchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsPlacementsSearchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsPlacementsSearchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2searchrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+placement}:search")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"placement": c.placement,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.placements.search", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.placements.search" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2SearchResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsPlacementsSearchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2SearchResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2SearchResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.placements.search", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsPlacementsSearchCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2SearchResponse) error) error {
	c.ctx_ = ctx
	defer func(pt string) { c.googlecloudretailv2searchrequest.PageToken = pt }(c.googlecloudretailv2searchrequest.PageToken)
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.googlecloudretailv2searchrequest.PageToken = x.NextPageToken
	}
}

type ProjectsLocationsCatalogsServingConfigsAddControlCall struct {
	s                                    *Service
	servingConfig                        string
	googlecloudretailv2addcontrolrequest *GoogleCloudRetailV2AddControlRequest
	urlParams_                           gensupport.URLParams
	ctx_                                 context.Context
	header_                              http.Header
}

// AddControl: Enables a Control on the specified ServingConfig. The control is
// added in the last position of the list of controls it belongs to (e.g. if
// it's a facet spec control it will be applied in the last position of
// servingConfig.facetSpecIds) Returns a ALREADY_EXISTS error if the control
// has already been applied. Returns a FAILED_PRECONDITION error if the
// addition could exceed maximum number of control allowed for that type of
// control.
//
//   - servingConfig: The source ServingConfig resource name . Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/se
//     rvingConfigs/{serving_config_id}`.
func (r *ProjectsLocationsCatalogsServingConfigsService) AddControl(servingConfig string, googlecloudretailv2addcontrolrequest *GoogleCloudRetailV2AddControlRequest) *ProjectsLocationsCatalogsServingConfigsAddControlCall {
	c := &ProjectsLocationsCatalogsServingConfigsAddControlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.servingConfig = servingConfig
	c.googlecloudretailv2addcontrolrequest = googlecloudretailv2addcontrolrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsAddControlCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsAddControlCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsAddControlCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsAddControlCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsAddControlCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsAddControlCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2addcontrolrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+servingConfig}:addControl")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"servingConfig": c.servingConfig,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.addControl", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.addControl" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ServingConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsAddControlCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ServingConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ServingConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.addControl", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsConversationalSearchCall struct {
	s                                              *Service
	placement                                      string
	googlecloudretailv2conversationalsearchrequest *GoogleCloudRetailV2ConversationalSearchRequest
	urlParams_                                     gensupport.URLParams
	ctx_                                           context.Context
	header_                                        http.Header
}

// ConversationalSearch: Performs a conversational search. This feature is only
// available for users who have Conversational Search enabled.
//
//   - placement: The resource name of the search engine placement, such as
//     `projects/*/locations/global/catalogs/default_catalog/placements/default_se
//     arch` or
//     `projects/*/locations/global/catalogs/default_catalog/servingConfigs/defaul
//     t_serving_config` This field is used to identify the serving config name
//     and the set of models that will be used to make the search.
func (r *ProjectsLocationsCatalogsServingConfigsService) ConversationalSearch(placement string, googlecloudretailv2conversationalsearchrequest *GoogleCloudRetailV2ConversationalSearchRequest) *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall {
	c := &ProjectsLocationsCatalogsServingConfigsConversationalSearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.placement = placement
	c.googlecloudretailv2conversationalsearchrequest = googlecloudretailv2conversationalsearchrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2conversationalsearchrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+placement}:conversationalSearch")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"placement": c.placement,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.conversationalSearch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.conversationalSearch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ConversationalSearchResponse.ServerResponse.Header or
// (if a response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsConversationalSearchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ConversationalSearchResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ConversationalSearchResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.conversationalSearch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsCreateCall struct {
	s                                *Service
	parent                           string
	googlecloudretailv2servingconfig *GoogleCloudRetailV2ServingConfig
	urlParams_                       gensupport.URLParams
	ctx_                             context.Context
	header_                          http.Header
}

// Create: Creates a ServingConfig. A maximum of 100 ServingConfigs are allowed
// in a Catalog, otherwise a FAILED_PRECONDITION error is returned.
//
//   - parent: Full resource name of parent. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`.
func (r *ProjectsLocationsCatalogsServingConfigsService) Create(parent string, googlecloudretailv2servingconfig *GoogleCloudRetailV2ServingConfig) *ProjectsLocationsCatalogsServingConfigsCreateCall {
	c := &ProjectsLocationsCatalogsServingConfigsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2servingconfig = googlecloudretailv2servingconfig
	return c
}

// ServingConfigId sets the optional parameter "servingConfigId": Required. The
// ID to use for the ServingConfig, which will become the final component of
// the ServingConfig's resource name. This value should be 4-63 characters, and
// valid characters are /a-z-_/.
func (c *ProjectsLocationsCatalogsServingConfigsCreateCall) ServingConfigId(servingConfigId string) *ProjectsLocationsCatalogsServingConfigsCreateCall {
	c.urlParams_.Set("servingConfigId", servingConfigId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsCreateCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2servingconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/servingConfigs")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ServingConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsCreateCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ServingConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ServingConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes a ServingConfig. Returns a NotFound error if the
// ServingConfig does not exist.
//
//   - name: The resource name of the ServingConfig to delete. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/se
//     rvingConfigs/{serving_config_id}`.
func (r *ProjectsLocationsCatalogsServingConfigsService) Delete(name string) *ProjectsLocationsCatalogsServingConfigsDeleteCall {
	c := &ProjectsLocationsCatalogsServingConfigsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsDeleteCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleProtobufEmpty.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsLocationsCatalogsServingConfigsDeleteCall) Do(opts ...googleapi.CallOption) (*GoogleProtobufEmpty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleProtobufEmpty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a ServingConfig. Returns a NotFound error if the ServingConfig
// does not exist.
//
//   - name: The resource name of the ServingConfig to get. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/se
//     rvingConfigs/{serving_config_id}`.
func (r *ProjectsLocationsCatalogsServingConfigsService) Get(name string) *ProjectsLocationsCatalogsServingConfigsGetCall {
	c := &ProjectsLocationsCatalogsServingConfigsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsServingConfigsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsServingConfigsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsGetCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ServingConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsGetCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ServingConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ServingConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists all ServingConfigs linked to this catalog.
//
//   - parent: The catalog resource name. Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}`.
func (r *ProjectsLocationsCatalogsServingConfigsService) List(parent string) *ProjectsLocationsCatalogsServingConfigsListCall {
	c := &ProjectsLocationsCatalogsServingConfigsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// PageSize sets the optional parameter "pageSize": Maximum number of results
// to return. If unspecified, defaults to 100. If a value greater than 100 is
// provided, at most 100 results are returned.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) PageSize(pageSize int64) *ProjectsLocationsCatalogsServingConfigsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": A page token, received
// from a previous `ListServingConfigs` call. Provide this to retrieve the
// subsequent page.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) PageToken(pageToken string) *ProjectsLocationsCatalogsServingConfigsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsCatalogsServingConfigsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/servingConfigs")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ListServingConfigsResponse.ServerResponse.Header or (if
// a response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ListServingConfigsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ListServingConfigsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsServingConfigsListCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2ListServingConfigsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsLocationsCatalogsServingConfigsPatchCall struct {
	s                                *Service
	name                             string
	googlecloudretailv2servingconfig *GoogleCloudRetailV2ServingConfig
	urlParams_                       gensupport.URLParams
	ctx_                             context.Context
	header_                          http.Header
}

// Patch: Updates a ServingConfig.
//
//   - name: Immutable. Fully qualified name
//     `projects/*/locations/global/catalogs/*/servingConfig/*`.
func (r *ProjectsLocationsCatalogsServingConfigsService) Patch(name string, googlecloudretailv2servingconfig *GoogleCloudRetailV2ServingConfig) *ProjectsLocationsCatalogsServingConfigsPatchCall {
	c := &ProjectsLocationsCatalogsServingConfigsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.googlecloudretailv2servingconfig = googlecloudretailv2servingconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": Indicates which fields
// in the provided ServingConfig to update. The following are NOT supported: *
// ServingConfig.name If not set, all supported fields are updated.
func (c *ProjectsLocationsCatalogsServingConfigsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsCatalogsServingConfigsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsPatchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2servingconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ServingConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsPatchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ServingConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ServingConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsPredictCall struct {
	s                                 *Service
	placement                         string
	googlecloudretailv2predictrequest *GoogleCloudRetailV2PredictRequest
	urlParams_                        gensupport.URLParams
	ctx_                              context.Context
	header_                           http.Header
}

// Predict: Makes a recommendation prediction.
//
//   - placement: Full resource name of the format:
//     `{placement=projects/*/locations/global/catalogs/default_catalog/servingCon
//     figs/*}` or
//     `{placement=projects/*/locations/global/catalogs/default_catalog/placements
//     /*}`. We recommend using the `servingConfigs` resource. `placements` is a
//     legacy resource. The ID of the Recommendations AI serving config or
//     placement. Before you can request predictions from your model, you must
//     create at least one serving config or placement for it. For more
//     information, see [Manage serving configs]
//     (https://cloud.google.com/retail/docs/manage-configs). The full list of
//     available serving configs can be seen at
//     https://console.cloud.google.com/ai/retail/catalogs/default_catalog/configs.
func (r *ProjectsLocationsCatalogsServingConfigsService) Predict(placement string, googlecloudretailv2predictrequest *GoogleCloudRetailV2PredictRequest) *ProjectsLocationsCatalogsServingConfigsPredictCall {
	c := &ProjectsLocationsCatalogsServingConfigsPredictCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.placement = placement
	c.googlecloudretailv2predictrequest = googlecloudretailv2predictrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsPredictCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsPredictCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsPredictCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsPredictCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsPredictCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsPredictCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2predictrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+placement}:predict")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"placement": c.placement,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.predict", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.predict" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2PredictResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsPredictCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2PredictResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2PredictResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.predict", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsRemoveControlCall struct {
	s                                       *Service
	servingConfig                           string
	googlecloudretailv2removecontrolrequest *GoogleCloudRetailV2RemoveControlRequest
	urlParams_                              gensupport.URLParams
	ctx_                                    context.Context
	header_                                 http.Header
}

// RemoveControl: Disables a Control on the specified ServingConfig. The
// control is removed from the ServingConfig. Returns a NOT_FOUND error if the
// Control is not enabled for the ServingConfig.
//
//   - servingConfig: The source ServingConfig resource name . Format:
//     `projects/{project_number}/locations/{location_id}/catalogs/{catalog_id}/se
//     rvingConfigs/{serving_config_id}`.
func (r *ProjectsLocationsCatalogsServingConfigsService) RemoveControl(servingConfig string, googlecloudretailv2removecontrolrequest *GoogleCloudRetailV2RemoveControlRequest) *ProjectsLocationsCatalogsServingConfigsRemoveControlCall {
	c := &ProjectsLocationsCatalogsServingConfigsRemoveControlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.servingConfig = servingConfig
	c.googlecloudretailv2removecontrolrequest = googlecloudretailv2removecontrolrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsRemoveControlCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsRemoveControlCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsRemoveControlCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsRemoveControlCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsRemoveControlCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsRemoveControlCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2removecontrolrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+servingConfig}:removeControl")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"servingConfig": c.servingConfig,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.removeControl", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.removeControl" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2ServingConfig.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsRemoveControlCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2ServingConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2ServingConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.removeControl", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsServingConfigsSearchCall struct {
	s                                *Service
	placement                        string
	googlecloudretailv2searchrequest *GoogleCloudRetailV2SearchRequest
	urlParams_                       gensupport.URLParams
	ctx_                             context.Context
	header_                          http.Header
}

// Search: Performs a search. This feature is only available for users who have
// Retail Search enabled. Enable Retail Search on Cloud Console before using
// this feature.
//
//   - placement: The resource name of the Retail Search serving config, such as
//     `projects/*/locations/global/catalogs/default_catalog/servingConfigs/defaul
//     t_serving_config` or the name of the legacy placement resource, such as
//     `projects/*/locations/global/catalogs/default_catalog/placements/default_se
//     arch`. This field is used to identify the serving config name and the set
//     of models that are used to make the search.
func (r *ProjectsLocationsCatalogsServingConfigsService) Search(placement string, googlecloudretailv2searchrequest *GoogleCloudRetailV2SearchRequest) *ProjectsLocationsCatalogsServingConfigsSearchCall {
	c := &ProjectsLocationsCatalogsServingConfigsSearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.placement = placement
	c.googlecloudretailv2searchrequest = googlecloudretailv2searchrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsServingConfigsSearchCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsServingConfigsSearchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsServingConfigsSearchCall) Context(ctx context.Context) *ProjectsLocationsCatalogsServingConfigsSearchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsServingConfigsSearchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsServingConfigsSearchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2searchrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+placement}:search")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"placement": c.placement,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.search", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.servingConfigs.search" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2SearchResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsServingConfigsSearchCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2SearchResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2SearchResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.servingConfigs.search", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsCatalogsServingConfigsSearchCall) Pages(ctx context.Context, f func(*GoogleCloudRetailV2SearchResponse) error) error {
	c.ctx_ = ctx
	defer func(pt string) { c.googlecloudretailv2searchrequest.PageToken = pt }(c.googlecloudretailv2searchrequest.PageToken)
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.googlecloudretailv2searchrequest.PageToken = x.NextPageToken
	}
}

type ProjectsLocationsCatalogsUserEventsCollectCall struct {
	s                                          *Service
	parent                                     string
	googlecloudretailv2collectusereventrequest *GoogleCloudRetailV2CollectUserEventRequest
	urlParams_                                 gensupport.URLParams
	ctx_                                       context.Context
	header_                                    http.Header
}

// Collect: Writes a single user event from the browser. For larger user event
// payload over 16 KB, the POST method should be used instead, otherwise a 400
// Bad Request error is returned. This method is used only by the Retail API
// JavaScript pixel and Google Tag Manager. Users should not call this method
// directly.
//
//   - parent: The parent catalog name, such as
//     `projects/1234/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsUserEventsService) Collect(parent string, googlecloudretailv2collectusereventrequest *GoogleCloudRetailV2CollectUserEventRequest) *ProjectsLocationsCatalogsUserEventsCollectCall {
	c := &ProjectsLocationsCatalogsUserEventsCollectCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2collectusereventrequest = googlecloudretailv2collectusereventrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUserEventsCollectCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUserEventsCollectCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUserEventsCollectCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUserEventsCollectCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUserEventsCollectCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUserEventsCollectCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2collectusereventrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/userEvents:collect")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.collect", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.userEvents.collect" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleApiHttpBody.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsLocationsCatalogsUserEventsCollectCall) Do(opts ...googleapi.CallOption) (*GoogleApiHttpBody, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleApiHttpBody{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.collect", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUserEventsImportCall struct {
	s                                          *Service
	parent                                     string
	googlecloudretailv2importusereventsrequest *GoogleCloudRetailV2ImportUserEventsRequest
	urlParams_                                 gensupport.URLParams
	ctx_                                       context.Context
	header_                                    http.Header
}

// Import: Bulk import of User events. Request processing might be synchronous.
// Events that already exist are skipped. Use this method for backfilling
// historical user events. `Operation.response` is of type `ImportResponse`.
// Note that it is possible for a subset of the items to be successfully
// inserted. `Operation.metadata` is of type `ImportMetadata`.
//
// - parent: `projects/1234/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsUserEventsService) Import(parent string, googlecloudretailv2importusereventsrequest *GoogleCloudRetailV2ImportUserEventsRequest) *ProjectsLocationsCatalogsUserEventsImportCall {
	c := &ProjectsLocationsCatalogsUserEventsImportCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2importusereventsrequest = googlecloudretailv2importusereventsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUserEventsImportCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUserEventsImportCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUserEventsImportCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUserEventsImportCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUserEventsImportCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUserEventsImportCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2importusereventsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/userEvents:import")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.import", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.userEvents.import" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUserEventsImportCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.import", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUserEventsPurgeCall struct {
	s                                         *Service
	parent                                    string
	googlecloudretailv2purgeusereventsrequest *GoogleCloudRetailV2PurgeUserEventsRequest
	urlParams_                                gensupport.URLParams
	ctx_                                      context.Context
	header_                                   http.Header
}

// Purge: Deletes permanently all user events specified by the filter provided.
// Depending on the number of events specified by the filter, this operation
// could take hours or days to complete. To test a filter, use the list command
// first.
//
//   - parent: The resource name of the catalog under which the events are
//     created. The format is
//     `projects/${projectId}/locations/global/catalogs/${catalogId}`.
func (r *ProjectsLocationsCatalogsUserEventsService) Purge(parent string, googlecloudretailv2purgeusereventsrequest *GoogleCloudRetailV2PurgeUserEventsRequest) *ProjectsLocationsCatalogsUserEventsPurgeCall {
	c := &ProjectsLocationsCatalogsUserEventsPurgeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2purgeusereventsrequest = googlecloudretailv2purgeusereventsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUserEventsPurgeCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUserEventsPurgeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUserEventsPurgeCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUserEventsPurgeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUserEventsPurgeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUserEventsPurgeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2purgeusereventsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/userEvents:purge")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.purge", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.userEvents.purge" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUserEventsPurgeCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.purge", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUserEventsRejoinCall struct {
	s                                          *Service
	parent                                     string
	googlecloudretailv2rejoinusereventsrequest *GoogleCloudRetailV2RejoinUserEventsRequest
	urlParams_                                 gensupport.URLParams
	ctx_                                       context.Context
	header_                                    http.Header
}

// Rejoin: Starts a user-event rejoin operation with latest product catalog.
// Events are not annotated with detailed product information for products that
// are missing from the catalog when the user event is ingested. These events
// are stored as unjoined events with limited usage on training and serving.
// You can use this method to start a join operation on specified events with
// the latest version of product catalog. You can also use this method to
// correct events joined with the wrong product catalog. A rejoin operation can
// take hours or days to complete.
//
//   - parent: The parent catalog resource name, such as
//     `projects/1234/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsUserEventsService) Rejoin(parent string, googlecloudretailv2rejoinusereventsrequest *GoogleCloudRetailV2RejoinUserEventsRequest) *ProjectsLocationsCatalogsUserEventsRejoinCall {
	c := &ProjectsLocationsCatalogsUserEventsRejoinCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2rejoinusereventsrequest = googlecloudretailv2rejoinusereventsrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUserEventsRejoinCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUserEventsRejoinCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUserEventsRejoinCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUserEventsRejoinCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUserEventsRejoinCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUserEventsRejoinCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2rejoinusereventsrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/userEvents:rejoin")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.rejoin", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.userEvents.rejoin" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUserEventsRejoinCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.rejoin", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsCatalogsUserEventsWriteCall struct {
	s                            *Service
	parent                       string
	googlecloudretailv2userevent *GoogleCloudRetailV2UserEvent
	urlParams_                   gensupport.URLParams
	ctx_                         context.Context
	header_                      http.Header
}

// Write: Writes a single user event.
//
//   - parent: The parent catalog resource name, such as
//     `projects/1234/locations/global/catalogs/default_catalog`.
func (r *ProjectsLocationsCatalogsUserEventsService) Write(parent string, googlecloudretailv2userevent *GoogleCloudRetailV2UserEvent) *ProjectsLocationsCatalogsUserEventsWriteCall {
	c := &ProjectsLocationsCatalogsUserEventsWriteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.googlecloudretailv2userevent = googlecloudretailv2userevent
	return c
}

// WriteAsync sets the optional parameter "writeAsync": If set to true, the
// user event will be written asynchronously after validation, and the API will
// respond without waiting for the write. Therefore, silent failures can occur
// even if the API returns success. In case of silent failures, error messages
// can be found in Stackdriver logs.
func (c *ProjectsLocationsCatalogsUserEventsWriteCall) WriteAsync(writeAsync bool) *ProjectsLocationsCatalogsUserEventsWriteCall {
	c.urlParams_.Set("writeAsync", fmt.Sprint(writeAsync))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsCatalogsUserEventsWriteCall) Fields(s ...googleapi.Field) *ProjectsLocationsCatalogsUserEventsWriteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsCatalogsUserEventsWriteCall) Context(ctx context.Context) *ProjectsLocationsCatalogsUserEventsWriteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsCatalogsUserEventsWriteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsCatalogsUserEventsWriteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.googlecloudretailv2userevent)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+parent}/userEvents:write")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.write", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.catalogs.userEvents.write" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleCloudRetailV2UserEvent.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsCatalogsUserEventsWriteCall) Do(opts ...googleapi.CallOption) (*GoogleCloudRetailV2UserEvent, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleCloudRetailV2UserEvent{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.catalogs.userEvents.write", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsOperationsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets the latest state of a long-running operation. Clients can use this
// method to poll the operation result at intervals as recommended by the API
// service.
//
// - name: The name of the operation resource.
func (r *ProjectsLocationsOperationsService) Get(name string) *ProjectsLocationsOperationsGetCall {
	c := &ProjectsLocationsOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsOperationsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsOperationsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsOperationsGetCall) Context(ctx context.Context) *ProjectsLocationsOperationsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsOperationsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsOperationsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.operations.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.operations.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsOperationsGetCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.operations.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsLocationsOperationsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists operations that match the specified filter in the request. If
// the server doesn't support this method, it returns `UNIMPLEMENTED`.
//
// - name: The name of the operation's parent resource.
func (r *ProjectsLocationsOperationsService) List(name string) *ProjectsLocationsOperationsListCall {
	c := &ProjectsLocationsOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": The standard list filter.
func (c *ProjectsLocationsOperationsListCall) Filter(filter string) *ProjectsLocationsOperationsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The standard list page
// size.
func (c *ProjectsLocationsOperationsListCall) PageSize(pageSize int64) *ProjectsLocationsOperationsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": The standard list page
// token.
func (c *ProjectsLocationsOperationsListCall) PageToken(pageToken string) *ProjectsLocationsOperationsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// ReturnPartialSuccess sets the optional parameter "returnPartialSuccess":
// When set to `true`, operations that are reachable are returned as normal,
// and those that are unreachable are returned in the
// ListOperationsResponse.unreachable field. This can only be `true` when
// reading across collections. For example, when `parent` is set to
// "projects/example/locations/-". This field is not supported by default and
// will result in an `UNIMPLEMENTED` error if set unless explicitly documented
// otherwise in service or product specific documentation.
func (c *ProjectsLocationsOperationsListCall) ReturnPartialSuccess(returnPartialSuccess bool) *ProjectsLocationsOperationsListCall {
	c.urlParams_.Set("returnPartialSuccess", fmt.Sprint(returnPartialSuccess))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsLocationsOperationsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsOperationsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsLocationsOperationsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsOperationsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsLocationsOperationsListCall) Context(ctx context.Context) *ProjectsLocationsOperationsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsLocationsOperationsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsLocationsOperationsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}/operations")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.locations.operations.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.locations.operations.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningListOperationsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsLocationsOperationsListCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningListOperationsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningListOperationsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.locations.operations.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsLocationsOperationsListCall) Pages(ctx context.Context, f func(*GoogleLongrunningListOperationsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsOperationsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets the latest state of a long-running operation. Clients can use this
// method to poll the operation result at intervals as recommended by the API
// service.
//
// - name: The name of the operation resource.
func (r *ProjectsOperationsService) Get(name string) *ProjectsOperationsGetCall {
	c := &ProjectsOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsOperationsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsOperationsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsOperationsGetCall) Context(ctx context.Context) *ProjectsOperationsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsOperationsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsOperationsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.operations.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.operations.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningOperation.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsOperationsGetCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningOperation{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.operations.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsOperationsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists operations that match the specified filter in the request. If
// the server doesn't support this method, it returns `UNIMPLEMENTED`.
//
// - name: The name of the operation's parent resource.
func (r *ProjectsOperationsService) List(name string) *ProjectsOperationsListCall {
	c := &ProjectsOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": The standard list filter.
func (c *ProjectsOperationsListCall) Filter(filter string) *ProjectsOperationsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The standard list page
// size.
func (c *ProjectsOperationsListCall) PageSize(pageSize int64) *ProjectsOperationsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": The standard list page
// token.
func (c *ProjectsOperationsListCall) PageToken(pageToken string) *ProjectsOperationsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// ReturnPartialSuccess sets the optional parameter "returnPartialSuccess":
// When set to `true`, operations that are reachable are returned as normal,
// and those that are unreachable are returned in the
// ListOperationsResponse.unreachable field. This can only be `true` when
// reading across collections. For example, when `parent` is set to
// "projects/example/locations/-". This field is not supported by default and
// will result in an `UNIMPLEMENTED` error if set unless explicitly documented
// otherwise in service or product specific documentation.
func (c *ProjectsOperationsListCall) ReturnPartialSuccess(returnPartialSuccess bool) *ProjectsOperationsListCall {
	c.urlParams_.Set("returnPartialSuccess", fmt.Sprint(returnPartialSuccess))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsOperationsListCall) Fields(s ...googleapi.Field) *ProjectsOperationsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsOperationsListCall) IfNoneMatch(entityTag string) *ProjectsOperationsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsOperationsListCall) Context(ctx context.Context) *ProjectsOperationsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsOperationsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsOperationsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+name}/operations")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "retail.projects.operations.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "retail.projects.operations.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *GoogleLongrunningListOperationsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsOperationsListCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningListOperationsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GoogleLongrunningListOperationsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "retail.projects.operations.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsOperationsListCall) Pages(ctx context.Context, f func(*GoogleLongrunningListOperationsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}
