1// Copyright 2021 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// Code generated by protoc-gen-go. DO NOT EDIT.
16// versions:
17// 	protoc-gen-go v1.26.0
18// 	protoc        v3.12.2
19// source: google/cloud/retail/v2/product_service.proto
20
21package retail
22
23import (
24	context "context"
25	reflect "reflect"
26	sync "sync"
27
28	_ "google.golang.org/genproto/googleapis/api/annotations"
29	longrunning "google.golang.org/genproto/googleapis/longrunning"
30	grpc "google.golang.org/grpc"
31	codes "google.golang.org/grpc/codes"
32	status "google.golang.org/grpc/status"
33	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
34	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
35	emptypb "google.golang.org/protobuf/types/known/emptypb"
36	fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb"
37	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
38)
39
40const (
41	// Verify that this generated code is sufficiently up-to-date.
42	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
43	// Verify that runtime/protoimpl is sufficiently up-to-date.
44	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
45)
46
47// Request message for [CreateProduct][] method.
48type CreateProductRequest struct {
49	state         protoimpl.MessageState
50	sizeCache     protoimpl.SizeCache
51	unknownFields protoimpl.UnknownFields
52
53	// Required. The parent catalog resource name, such as
54	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch`.
55	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
56	// Required. The [Product][google.cloud.retail.v2.Product] to create.
57	Product *Product `protobuf:"bytes,2,opt,name=product,proto3" json:"product,omitempty"`
58	// Required. The ID to use for the [Product][google.cloud.retail.v2.Product],
59	// which will become the final component of the
60	// [Product.name][google.cloud.retail.v2.Product.name].
61	//
62	// If the caller does not have permission to create the
63	// [Product][google.cloud.retail.v2.Product], regardless of whether or not it
64	// exists, a PERMISSION_DENIED error is returned.
65	//
66	// This field must be unique among all
67	// [Product][google.cloud.retail.v2.Product]s with the same
68	// [parent][google.cloud.retail.v2.CreateProductRequest.parent]. Otherwise, an
69	// ALREADY_EXISTS error is returned.
70	//
71	// This field must be a UTF-8 encoded string with a length limit of 128
72	// characters. Otherwise, an INVALID_ARGUMENT error is returned.
73	ProductId string `protobuf:"bytes,3,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"`
74}
75
76func (x *CreateProductRequest) Reset() {
77	*x = CreateProductRequest{}
78	if protoimpl.UnsafeEnabled {
79		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[0]
80		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
81		ms.StoreMessageInfo(mi)
82	}
83}
84
85func (x *CreateProductRequest) String() string {
86	return protoimpl.X.MessageStringOf(x)
87}
88
89func (*CreateProductRequest) ProtoMessage() {}
90
91func (x *CreateProductRequest) ProtoReflect() protoreflect.Message {
92	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[0]
93	if protoimpl.UnsafeEnabled && x != nil {
94		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
95		if ms.LoadMessageInfo() == nil {
96			ms.StoreMessageInfo(mi)
97		}
98		return ms
99	}
100	return mi.MessageOf(x)
101}
102
103// Deprecated: Use CreateProductRequest.ProtoReflect.Descriptor instead.
104func (*CreateProductRequest) Descriptor() ([]byte, []int) {
105	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{0}
106}
107
108func (x *CreateProductRequest) GetParent() string {
109	if x != nil {
110		return x.Parent
111	}
112	return ""
113}
114
115func (x *CreateProductRequest) GetProduct() *Product {
116	if x != nil {
117		return x.Product
118	}
119	return nil
120}
121
122func (x *CreateProductRequest) GetProductId() string {
123	if x != nil {
124		return x.ProductId
125	}
126	return ""
127}
128
129// Request message for [GetProduct][] method.
130type GetProductRequest struct {
131	state         protoimpl.MessageState
132	sizeCache     protoimpl.SizeCache
133	unknownFields protoimpl.UnknownFields
134
135	// Required. Full resource name of [Product][google.cloud.retail.v2.Product],
136	// such as
137	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
138	//
139	// If the caller does not have permission to access the
140	// [Product][google.cloud.retail.v2.Product], regardless of whether or not it
141	// exists, a PERMISSION_DENIED error is returned.
142	//
143	// If the requested [Product][google.cloud.retail.v2.Product] does not exist,
144	// a NOT_FOUND error is returned.
145	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
146}
147
148func (x *GetProductRequest) Reset() {
149	*x = GetProductRequest{}
150	if protoimpl.UnsafeEnabled {
151		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[1]
152		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
153		ms.StoreMessageInfo(mi)
154	}
155}
156
157func (x *GetProductRequest) String() string {
158	return protoimpl.X.MessageStringOf(x)
159}
160
161func (*GetProductRequest) ProtoMessage() {}
162
163func (x *GetProductRequest) ProtoReflect() protoreflect.Message {
164	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[1]
165	if protoimpl.UnsafeEnabled && x != nil {
166		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
167		if ms.LoadMessageInfo() == nil {
168			ms.StoreMessageInfo(mi)
169		}
170		return ms
171	}
172	return mi.MessageOf(x)
173}
174
175// Deprecated: Use GetProductRequest.ProtoReflect.Descriptor instead.
176func (*GetProductRequest) Descriptor() ([]byte, []int) {
177	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{1}
178}
179
180func (x *GetProductRequest) GetName() string {
181	if x != nil {
182		return x.Name
183	}
184	return ""
185}
186
187// Request message for [UpdateProduct][] method.
188type UpdateProductRequest struct {
189	state         protoimpl.MessageState
190	sizeCache     protoimpl.SizeCache
191	unknownFields protoimpl.UnknownFields
192
193	// Required. The product to update/create.
194	//
195	// If the caller does not have permission to update the
196	// [Product][google.cloud.retail.v2.Product], regardless of whether or not it
197	// exists, a PERMISSION_DENIED error is returned.
198	//
199	// If the [Product][google.cloud.retail.v2.Product] to update does not exist
200	// and
201	// [allow_missing][google.cloud.retail.v2.UpdateProductRequest.allow_missing]
202	// is not set, a NOT_FOUND error is returned.
203	Product *Product `protobuf:"bytes,1,opt,name=product,proto3" json:"product,omitempty"`
204	// Indicates which fields in the provided
205	// [Product][google.cloud.retail.v2.Product] to update. The immutable and
206	// output only fields are NOT supported. If not set, all supported fields (the
207	// fields that are neither immutable nor output only) are updated.
208	//
209	// If an unsupported or unknown field is provided, an INVALID_ARGUMENT error
210	// is returned.
211	UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"`
212	// If set to true, and the [Product][google.cloud.retail.v2.Product] is not
213	// found, a new [Product][google.cloud.retail.v2.Product] will be created. In
214	// this situation, `update_mask` is ignored.
215	AllowMissing bool `protobuf:"varint,3,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"`
216}
217
218func (x *UpdateProductRequest) Reset() {
219	*x = UpdateProductRequest{}
220	if protoimpl.UnsafeEnabled {
221		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[2]
222		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
223		ms.StoreMessageInfo(mi)
224	}
225}
226
227func (x *UpdateProductRequest) String() string {
228	return protoimpl.X.MessageStringOf(x)
229}
230
231func (*UpdateProductRequest) ProtoMessage() {}
232
233func (x *UpdateProductRequest) ProtoReflect() protoreflect.Message {
234	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[2]
235	if protoimpl.UnsafeEnabled && x != nil {
236		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
237		if ms.LoadMessageInfo() == nil {
238			ms.StoreMessageInfo(mi)
239		}
240		return ms
241	}
242	return mi.MessageOf(x)
243}
244
245// Deprecated: Use UpdateProductRequest.ProtoReflect.Descriptor instead.
246func (*UpdateProductRequest) Descriptor() ([]byte, []int) {
247	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{2}
248}
249
250func (x *UpdateProductRequest) GetProduct() *Product {
251	if x != nil {
252		return x.Product
253	}
254	return nil
255}
256
257func (x *UpdateProductRequest) GetUpdateMask() *fieldmaskpb.FieldMask {
258	if x != nil {
259		return x.UpdateMask
260	}
261	return nil
262}
263
264func (x *UpdateProductRequest) GetAllowMissing() bool {
265	if x != nil {
266		return x.AllowMissing
267	}
268	return false
269}
270
271// Request message for [DeleteProduct][] method.
272type DeleteProductRequest struct {
273	state         protoimpl.MessageState
274	sizeCache     protoimpl.SizeCache
275	unknownFields protoimpl.UnknownFields
276
277	// Required. Full resource name of [Product][google.cloud.retail.v2.Product],
278	// such as
279	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
280	//
281	// If the caller does not have permission to delete the
282	// [Product][google.cloud.retail.v2.Product], regardless of whether or not it
283	// exists, a PERMISSION_DENIED error is returned.
284	//
285	// If the [Product][google.cloud.retail.v2.Product] to delete does not exist,
286	// a NOT_FOUND error is returned.
287	//
288	// The [Product][google.cloud.retail.v2.Product] to delete can neither be a
289	// [Product.Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION]
290	// [Product][google.cloud.retail.v2.Product] member nor a
291	// [Product.Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY]
292	// [Product][google.cloud.retail.v2.Product] with more than one
293	// [variants][google.cloud.retail.v2.Product.Type.VARIANT]. Otherwise, an
294	// INVALID_ARGUMENT error is returned.
295	//
296	// All inventory information for the named
297	// [Product][google.cloud.retail.v2.Product] will be deleted.
298	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
299}
300
301func (x *DeleteProductRequest) Reset() {
302	*x = DeleteProductRequest{}
303	if protoimpl.UnsafeEnabled {
304		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[3]
305		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
306		ms.StoreMessageInfo(mi)
307	}
308}
309
310func (x *DeleteProductRequest) String() string {
311	return protoimpl.X.MessageStringOf(x)
312}
313
314func (*DeleteProductRequest) ProtoMessage() {}
315
316func (x *DeleteProductRequest) ProtoReflect() protoreflect.Message {
317	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[3]
318	if protoimpl.UnsafeEnabled && x != nil {
319		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
320		if ms.LoadMessageInfo() == nil {
321			ms.StoreMessageInfo(mi)
322		}
323		return ms
324	}
325	return mi.MessageOf(x)
326}
327
328// Deprecated: Use DeleteProductRequest.ProtoReflect.Descriptor instead.
329func (*DeleteProductRequest) Descriptor() ([]byte, []int) {
330	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{3}
331}
332
333func (x *DeleteProductRequest) GetName() string {
334	if x != nil {
335		return x.Name
336	}
337	return ""
338}
339
340// Request message for
341// [ProductService.ListProducts][google.cloud.retail.v2.ProductService.ListProducts]
342// method.
343type ListProductsRequest struct {
344	state         protoimpl.MessageState
345	sizeCache     protoimpl.SizeCache
346	unknownFields protoimpl.UnknownFields
347
348	// Required. The parent branch resource name, such as
349	// `projects/*/locations/global/catalogs/default_catalog/branches/0`. Use
350	// `default_branch` as the branch ID, to list products under the default
351	// branch.
352	//
353	// If the caller does not have permission to list
354	// [Product][google.cloud.retail.v2.Product]s under this branch, regardless of
355	// whether or not this branch exists, a PERMISSION_DENIED error is returned.
356	Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"`
357	// Maximum number of [Product][google.cloud.retail.v2.Product]s to return. If
358	// unspecified, defaults to 100. The maximum allowed value is 1000. Values
359	// above 1000 will be coerced to 1000.
360	//
361	// If this field is negative, an INVALID_ARGUMENT error is returned.
362	PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
363	// A page token
364	// [ListProductsResponse.next_page_token][google.cloud.retail.v2.ListProductsResponse.next_page_token],
365	// received from a previous
366	// [ProductService.ListProducts][google.cloud.retail.v2.ProductService.ListProducts]
367	// call. Provide this to retrieve the subsequent page.
368	//
369	// When paginating, all other parameters provided to
370	// [ProductService.ListProducts][google.cloud.retail.v2.ProductService.ListProducts]
371	// must match the call that provided the page token. Otherwise, an
372	// INVALID_ARGUMENT error is returned.
373	PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"`
374	// A filter to apply on the list results. Supported features:
375	//
376	// * List all the products under the parent branch if
377	// [filter][google.cloud.retail.v2.ListProductsRequest.filter] is unset.
378	// * List [Product.Type.VARIANT][google.cloud.retail.v2.Product.Type.VARIANT]
379	// [Product][google.cloud.retail.v2.Product]s sharing the same
380	//   [Product.Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY]
381	//   [Product][google.cloud.retail.v2.Product]. For example:
382	//     `primary_product_id = "some_product_id"`
383	// * List [Product][google.cloud.retail.v2.Product]s bundled in a
384	// [Product.Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION]
385	// [Product][google.cloud.retail.v2.Product].
386	//   For example:
387	//     `collection_product_id = "some_product_id"`
388	// * List [Product][google.cloud.retail.v2.Product]s with a partibular type.
389	// For example:
390	//     `type = "PRIMARY"`
391	//     `type = "VARIANT"`
392	//     `type = "COLLECTION"`
393	//
394	// If the field is unrecognizable, an INVALID_ARGUMENT error is returned.
395	//
396	// If the specified
397	// [Product.Type.PRIMARY][google.cloud.retail.v2.Product.Type.PRIMARY]
398	// [Product][google.cloud.retail.v2.Product] or
399	// [Product.Type.COLLECTION][google.cloud.retail.v2.Product.Type.COLLECTION]
400	// [Product][google.cloud.retail.v2.Product] does not exist, a NOT_FOUND error
401	// is returned.
402	Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"`
403	// The fields of [Product][google.cloud.retail.v2.Product] to return in the
404	// responses. If not set or empty, the following fields are returned:
405	//
406	// * [Product.name][google.cloud.retail.v2.Product.name]
407	// * [Product.id][google.cloud.retail.v2.Product.id]
408	// * [Product.title][google.cloud.retail.v2.Product.title]
409	// * [Product.uri][google.cloud.retail.v2.Product.uri]
410	// * [Product.images][google.cloud.retail.v2.Product.images]
411	// * [Product.price_info][google.cloud.retail.v2.Product.price_info]
412	// * [Product.brands][google.cloud.retail.v2.Product.brands]
413	//
414	// If "*" is provided, all fields are returned.
415	// [Product.name][google.cloud.retail.v2.Product.name] is always returned no
416	// matter what mask is set.
417	//
418	// If an unsupported or unknown field is provided, an INVALID_ARGUMENT error
419	// is returned.
420	ReadMask *fieldmaskpb.FieldMask `protobuf:"bytes,5,opt,name=read_mask,json=readMask,proto3" json:"read_mask,omitempty"`
421}
422
423func (x *ListProductsRequest) Reset() {
424	*x = ListProductsRequest{}
425	if protoimpl.UnsafeEnabled {
426		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[4]
427		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
428		ms.StoreMessageInfo(mi)
429	}
430}
431
432func (x *ListProductsRequest) String() string {
433	return protoimpl.X.MessageStringOf(x)
434}
435
436func (*ListProductsRequest) ProtoMessage() {}
437
438func (x *ListProductsRequest) ProtoReflect() protoreflect.Message {
439	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[4]
440	if protoimpl.UnsafeEnabled && x != nil {
441		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
442		if ms.LoadMessageInfo() == nil {
443			ms.StoreMessageInfo(mi)
444		}
445		return ms
446	}
447	return mi.MessageOf(x)
448}
449
450// Deprecated: Use ListProductsRequest.ProtoReflect.Descriptor instead.
451func (*ListProductsRequest) Descriptor() ([]byte, []int) {
452	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{4}
453}
454
455func (x *ListProductsRequest) GetParent() string {
456	if x != nil {
457		return x.Parent
458	}
459	return ""
460}
461
462func (x *ListProductsRequest) GetPageSize() int32 {
463	if x != nil {
464		return x.PageSize
465	}
466	return 0
467}
468
469func (x *ListProductsRequest) GetPageToken() string {
470	if x != nil {
471		return x.PageToken
472	}
473	return ""
474}
475
476func (x *ListProductsRequest) GetFilter() string {
477	if x != nil {
478		return x.Filter
479	}
480	return ""
481}
482
483func (x *ListProductsRequest) GetReadMask() *fieldmaskpb.FieldMask {
484	if x != nil {
485		return x.ReadMask
486	}
487	return nil
488}
489
490// Response message for
491// [ProductService.ListProducts][google.cloud.retail.v2.ProductService.ListProducts]
492// method.
493type ListProductsResponse struct {
494	state         protoimpl.MessageState
495	sizeCache     protoimpl.SizeCache
496	unknownFields protoimpl.UnknownFields
497
498	// The [Product][google.cloud.retail.v2.Product]s.
499	Products []*Product `protobuf:"bytes,1,rep,name=products,proto3" json:"products,omitempty"`
500	// A token that can be sent as
501	// [ListProductsRequest.page_token][google.cloud.retail.v2.ListProductsRequest.page_token]
502	// to retrieve the next page. If this field is omitted, there are no
503	// subsequent pages.
504	NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"`
505}
506
507func (x *ListProductsResponse) Reset() {
508	*x = ListProductsResponse{}
509	if protoimpl.UnsafeEnabled {
510		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[5]
511		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
512		ms.StoreMessageInfo(mi)
513	}
514}
515
516func (x *ListProductsResponse) String() string {
517	return protoimpl.X.MessageStringOf(x)
518}
519
520func (*ListProductsResponse) ProtoMessage() {}
521
522func (x *ListProductsResponse) ProtoReflect() protoreflect.Message {
523	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[5]
524	if protoimpl.UnsafeEnabled && x != nil {
525		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
526		if ms.LoadMessageInfo() == nil {
527			ms.StoreMessageInfo(mi)
528		}
529		return ms
530	}
531	return mi.MessageOf(x)
532}
533
534// Deprecated: Use ListProductsResponse.ProtoReflect.Descriptor instead.
535func (*ListProductsResponse) Descriptor() ([]byte, []int) {
536	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{5}
537}
538
539func (x *ListProductsResponse) GetProducts() []*Product {
540	if x != nil {
541		return x.Products
542	}
543	return nil
544}
545
546func (x *ListProductsResponse) GetNextPageToken() string {
547	if x != nil {
548		return x.NextPageToken
549	}
550	return ""
551}
552
553// Request message for [SetInventory][] method.
554type SetInventoryRequest struct {
555	state         protoimpl.MessageState
556	sizeCache     protoimpl.SizeCache
557	unknownFields protoimpl.UnknownFields
558
559	// Required. The inventory information to update. The allowable fields to
560	// update are:
561	// * [Product.price_info][google.cloud.retail.v2.Product.price_info]
562	// * [Product.availability][google.cloud.retail.v2.Product.availability]
563	// * [Product.available_quantity][google.cloud.retail.v2.Product.available_quantity]
564	// * [Product.fulfillment_info][google.cloud.retail.v2.Product.fulfillment_info]
565	// The updated inventory fields must be specified in
566	// [SetInventoryRequest.set_mask][google.cloud.retail.v2.SetInventoryRequest.set_mask].
567	//
568	// If [SetInventoryRequest.inventory.name][] is empty or invalid, an
569	// INVALID_ARGUMENT error is returned.
570	//
571	// If the caller does not have permission to update the
572	// [Product][google.cloud.retail.v2.Product] named in
573	// [Product.name][google.cloud.retail.v2.Product.name], regardless of whether
574	// or not it exists, a PERMISSION_DENIED error is returned.
575	//
576	// If the [Product][google.cloud.retail.v2.Product] to update does not have
577	// existing inventory information, the provided inventory information will be
578	// inserted.
579	//
580	// If the [Product][google.cloud.retail.v2.Product] to update has existing
581	// inventory information, the provided inventory information will be merged
582	// while respecting the last update time for each inventory field, using the
583	// provided or default value for
584	// [SetInventoryRequest.set_time][google.cloud.retail.v2.SetInventoryRequest.set_time].
585	//
586	// The last update time is recorded for the following inventory fields:
587	// * [Product.price_info][google.cloud.retail.v2.Product.price_info]
588	// * [Product.availability][google.cloud.retail.v2.Product.availability]
589	// * [Product.available_quantity][google.cloud.retail.v2.Product.available_quantity]
590	// * [Product.fulfillment_info][google.cloud.retail.v2.Product.fulfillment_info]
591	//
592	// If a full overwrite of inventory information while ignoring timestamps is
593	// needed, [UpdateProduct][] should be invoked instead.
594	Inventory *Product `protobuf:"bytes,1,opt,name=inventory,proto3" json:"inventory,omitempty"`
595	// Indicates which inventory fields in the provided
596	// [Product][google.cloud.retail.v2.Product] to update. If not set or set with
597	// empty paths, all inventory fields will be updated.
598	//
599	// If an unsupported or unknown field is provided, an INVALID_ARGUMENT error
600	// is returned and the entire update will be ignored.
601	SetMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=set_mask,json=setMask,proto3" json:"set_mask,omitempty"`
602	// The time when the request is issued, used to prevent
603	// out-of-order updates on inventory fields with the last update time
604	// recorded. If not provided, the internal system time will be used.
605	SetTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=set_time,json=setTime,proto3" json:"set_time,omitempty"`
606	// If set to true, and the [Product][google.cloud.retail.v2.Product] with name
607	// [Product.name][google.cloud.retail.v2.Product.name] is not found, the
608	// inventory update will still be processed and retained for at most 1 day
609	// until the [Product][google.cloud.retail.v2.Product] is created. If set to
610	// false, an INVALID_ARGUMENT error is returned if the
611	// [Product][google.cloud.retail.v2.Product] is not found.
612	AllowMissing bool `protobuf:"varint,4,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"`
613}
614
615func (x *SetInventoryRequest) Reset() {
616	*x = SetInventoryRequest{}
617	if protoimpl.UnsafeEnabled {
618		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[6]
619		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
620		ms.StoreMessageInfo(mi)
621	}
622}
623
624func (x *SetInventoryRequest) String() string {
625	return protoimpl.X.MessageStringOf(x)
626}
627
628func (*SetInventoryRequest) ProtoMessage() {}
629
630func (x *SetInventoryRequest) ProtoReflect() protoreflect.Message {
631	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[6]
632	if protoimpl.UnsafeEnabled && x != nil {
633		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
634		if ms.LoadMessageInfo() == nil {
635			ms.StoreMessageInfo(mi)
636		}
637		return ms
638	}
639	return mi.MessageOf(x)
640}
641
642// Deprecated: Use SetInventoryRequest.ProtoReflect.Descriptor instead.
643func (*SetInventoryRequest) Descriptor() ([]byte, []int) {
644	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{6}
645}
646
647func (x *SetInventoryRequest) GetInventory() *Product {
648	if x != nil {
649		return x.Inventory
650	}
651	return nil
652}
653
654func (x *SetInventoryRequest) GetSetMask() *fieldmaskpb.FieldMask {
655	if x != nil {
656		return x.SetMask
657	}
658	return nil
659}
660
661func (x *SetInventoryRequest) GetSetTime() *timestamppb.Timestamp {
662	if x != nil {
663		return x.SetTime
664	}
665	return nil
666}
667
668func (x *SetInventoryRequest) GetAllowMissing() bool {
669	if x != nil {
670		return x.AllowMissing
671	}
672	return false
673}
674
675// Metadata related to the progress of the SetInventory operation.
676// Currently empty because there is no meaningful metadata populated from the
677// [SetInventory][] method.
678type SetInventoryMetadata struct {
679	state         protoimpl.MessageState
680	sizeCache     protoimpl.SizeCache
681	unknownFields protoimpl.UnknownFields
682}
683
684func (x *SetInventoryMetadata) Reset() {
685	*x = SetInventoryMetadata{}
686	if protoimpl.UnsafeEnabled {
687		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[7]
688		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
689		ms.StoreMessageInfo(mi)
690	}
691}
692
693func (x *SetInventoryMetadata) String() string {
694	return protoimpl.X.MessageStringOf(x)
695}
696
697func (*SetInventoryMetadata) ProtoMessage() {}
698
699func (x *SetInventoryMetadata) ProtoReflect() protoreflect.Message {
700	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[7]
701	if protoimpl.UnsafeEnabled && x != nil {
702		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
703		if ms.LoadMessageInfo() == nil {
704			ms.StoreMessageInfo(mi)
705		}
706		return ms
707	}
708	return mi.MessageOf(x)
709}
710
711// Deprecated: Use SetInventoryMetadata.ProtoReflect.Descriptor instead.
712func (*SetInventoryMetadata) Descriptor() ([]byte, []int) {
713	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{7}
714}
715
716// Response of the SetInventoryRequest.  Currently empty because
717// there is no meaningful response populated from the [SetInventory][]
718// method.
719type SetInventoryResponse struct {
720	state         protoimpl.MessageState
721	sizeCache     protoimpl.SizeCache
722	unknownFields protoimpl.UnknownFields
723}
724
725func (x *SetInventoryResponse) Reset() {
726	*x = SetInventoryResponse{}
727	if protoimpl.UnsafeEnabled {
728		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[8]
729		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
730		ms.StoreMessageInfo(mi)
731	}
732}
733
734func (x *SetInventoryResponse) String() string {
735	return protoimpl.X.MessageStringOf(x)
736}
737
738func (*SetInventoryResponse) ProtoMessage() {}
739
740func (x *SetInventoryResponse) ProtoReflect() protoreflect.Message {
741	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[8]
742	if protoimpl.UnsafeEnabled && x != nil {
743		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
744		if ms.LoadMessageInfo() == nil {
745			ms.StoreMessageInfo(mi)
746		}
747		return ms
748	}
749	return mi.MessageOf(x)
750}
751
752// Deprecated: Use SetInventoryResponse.ProtoReflect.Descriptor instead.
753func (*SetInventoryResponse) Descriptor() ([]byte, []int) {
754	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{8}
755}
756
757// Request message for [AddFulfillmentPlaces][] method.
758type AddFulfillmentPlacesRequest struct {
759	state         protoimpl.MessageState
760	sizeCache     protoimpl.SizeCache
761	unknownFields protoimpl.UnknownFields
762
763	// Required. Full resource name of [Product][google.cloud.retail.v2.Product],
764	// such as
765	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
766	//
767	// If the caller does not have permission to access the
768	// [Product][google.cloud.retail.v2.Product], regardless of whether or not it
769	// exists, a PERMISSION_DENIED error is returned.
770	Product string `protobuf:"bytes,1,opt,name=product,proto3" json:"product,omitempty"`
771	// Required. The fulfillment type, including commonly used types (such as
772	// pickup in store and same day delivery), and custom types.
773	//
774	// Supported values:
775	//
776	// * "pickup-in-store"
777	// * "ship-to-store"
778	// * "same-day-delivery"
779	// * "next-day-delivery"
780	// * "custom-type-1"
781	// * "custom-type-2"
782	// * "custom-type-3"
783	// * "custom-type-4"
784	// * "custom-type-5"
785	//
786	// If this field is set to an invalid value other than these, an
787	// INVALID_ARGUMENT error is returned.
788	//
789	// This field directly corresponds to [Product.fulfillment_info.type][].
790	Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
791	// Required. The IDs for this
792	// [type][google.cloud.retail.v2.AddFulfillmentPlacesRequest.type], such as
793	// the store IDs for "pickup-in-store" or the region IDs for
794	// "same-day-delivery" to be added for this
795	// [type][google.cloud.retail.v2.AddFulfillmentPlacesRequest.type]. Duplicate
796	// IDs will be automatically ignored.
797	//
798	// At least 1 value is required, and a maximum of 2000 values are allowed.
799	// Each value must be a string with a length limit of 10 characters, matching
800	// the pattern [a-zA-Z0-9_-]+, such as "store1" or "REGION-2". Otherwise, an
801	// INVALID_ARGUMENT error is returned.
802	//
803	// If the total number of place IDs exceeds 2000 for this
804	// [type][google.cloud.retail.v2.AddFulfillmentPlacesRequest.type] after
805	// adding, then the update will be rejected.
806	PlaceIds []string `protobuf:"bytes,3,rep,name=place_ids,json=placeIds,proto3" json:"place_ids,omitempty"`
807	// The time when the fulfillment updates are issued, used to prevent
808	// out-of-order updates on fulfillment information. If not provided, the
809	// internal system time will be used.
810	AddTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=add_time,json=addTime,proto3" json:"add_time,omitempty"`
811	// If set to true, and the [Product][google.cloud.retail.v2.Product] is not
812	// found, the fulfillment information will still be processed and retained for
813	// at most 1 day and processed once the
814	// [Product][google.cloud.retail.v2.Product] is created. If set to false, an
815	// INVALID_ARGUMENT error is returned if the
816	// [Product][google.cloud.retail.v2.Product] is not found.
817	AllowMissing bool `protobuf:"varint,5,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"`
818}
819
820func (x *AddFulfillmentPlacesRequest) Reset() {
821	*x = AddFulfillmentPlacesRequest{}
822	if protoimpl.UnsafeEnabled {
823		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[9]
824		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
825		ms.StoreMessageInfo(mi)
826	}
827}
828
829func (x *AddFulfillmentPlacesRequest) String() string {
830	return protoimpl.X.MessageStringOf(x)
831}
832
833func (*AddFulfillmentPlacesRequest) ProtoMessage() {}
834
835func (x *AddFulfillmentPlacesRequest) ProtoReflect() protoreflect.Message {
836	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[9]
837	if protoimpl.UnsafeEnabled && x != nil {
838		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
839		if ms.LoadMessageInfo() == nil {
840			ms.StoreMessageInfo(mi)
841		}
842		return ms
843	}
844	return mi.MessageOf(x)
845}
846
847// Deprecated: Use AddFulfillmentPlacesRequest.ProtoReflect.Descriptor instead.
848func (*AddFulfillmentPlacesRequest) Descriptor() ([]byte, []int) {
849	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{9}
850}
851
852func (x *AddFulfillmentPlacesRequest) GetProduct() string {
853	if x != nil {
854		return x.Product
855	}
856	return ""
857}
858
859func (x *AddFulfillmentPlacesRequest) GetType() string {
860	if x != nil {
861		return x.Type
862	}
863	return ""
864}
865
866func (x *AddFulfillmentPlacesRequest) GetPlaceIds() []string {
867	if x != nil {
868		return x.PlaceIds
869	}
870	return nil
871}
872
873func (x *AddFulfillmentPlacesRequest) GetAddTime() *timestamppb.Timestamp {
874	if x != nil {
875		return x.AddTime
876	}
877	return nil
878}
879
880func (x *AddFulfillmentPlacesRequest) GetAllowMissing() bool {
881	if x != nil {
882		return x.AllowMissing
883	}
884	return false
885}
886
887// Metadata related to the progress of the AddFulfillmentPlaces operation.
888// Currently empty because there is no meaningful metadata populated from the
889// [AddFulfillmentPlaces][] method.
890type AddFulfillmentPlacesMetadata struct {
891	state         protoimpl.MessageState
892	sizeCache     protoimpl.SizeCache
893	unknownFields protoimpl.UnknownFields
894}
895
896func (x *AddFulfillmentPlacesMetadata) Reset() {
897	*x = AddFulfillmentPlacesMetadata{}
898	if protoimpl.UnsafeEnabled {
899		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[10]
900		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
901		ms.StoreMessageInfo(mi)
902	}
903}
904
905func (x *AddFulfillmentPlacesMetadata) String() string {
906	return protoimpl.X.MessageStringOf(x)
907}
908
909func (*AddFulfillmentPlacesMetadata) ProtoMessage() {}
910
911func (x *AddFulfillmentPlacesMetadata) ProtoReflect() protoreflect.Message {
912	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[10]
913	if protoimpl.UnsafeEnabled && x != nil {
914		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
915		if ms.LoadMessageInfo() == nil {
916			ms.StoreMessageInfo(mi)
917		}
918		return ms
919	}
920	return mi.MessageOf(x)
921}
922
923// Deprecated: Use AddFulfillmentPlacesMetadata.ProtoReflect.Descriptor instead.
924func (*AddFulfillmentPlacesMetadata) Descriptor() ([]byte, []int) {
925	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{10}
926}
927
928// Response of the RemoveFulfillmentPlacesRequest.  Currently empty because
929// there is no meaningful response populated from the [AddFulfillmentPlaces][]
930// method.
931type AddFulfillmentPlacesResponse struct {
932	state         protoimpl.MessageState
933	sizeCache     protoimpl.SizeCache
934	unknownFields protoimpl.UnknownFields
935}
936
937func (x *AddFulfillmentPlacesResponse) Reset() {
938	*x = AddFulfillmentPlacesResponse{}
939	if protoimpl.UnsafeEnabled {
940		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[11]
941		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
942		ms.StoreMessageInfo(mi)
943	}
944}
945
946func (x *AddFulfillmentPlacesResponse) String() string {
947	return protoimpl.X.MessageStringOf(x)
948}
949
950func (*AddFulfillmentPlacesResponse) ProtoMessage() {}
951
952func (x *AddFulfillmentPlacesResponse) ProtoReflect() protoreflect.Message {
953	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[11]
954	if protoimpl.UnsafeEnabled && x != nil {
955		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
956		if ms.LoadMessageInfo() == nil {
957			ms.StoreMessageInfo(mi)
958		}
959		return ms
960	}
961	return mi.MessageOf(x)
962}
963
964// Deprecated: Use AddFulfillmentPlacesResponse.ProtoReflect.Descriptor instead.
965func (*AddFulfillmentPlacesResponse) Descriptor() ([]byte, []int) {
966	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{11}
967}
968
969// Request message for [RemoveFulfillmentPlaces][] method.
970type RemoveFulfillmentPlacesRequest struct {
971	state         protoimpl.MessageState
972	sizeCache     protoimpl.SizeCache
973	unknownFields protoimpl.UnknownFields
974
975	// Required. Full resource name of [Product][google.cloud.retail.v2.Product],
976	// such as
977	// `projects/*/locations/global/catalogs/default_catalog/branches/default_branch/products/some_product_id`.
978	//
979	// If the caller does not have permission to access the
980	// [Product][google.cloud.retail.v2.Product], regardless of whether or not it
981	// exists, a PERMISSION_DENIED error is returned.
982	Product string `protobuf:"bytes,1,opt,name=product,proto3" json:"product,omitempty"`
983	// Required. The fulfillment type, including commonly used types (such as
984	// pickup in store and same day delivery), and custom types.
985	//
986	// Supported values:
987	//
988	// * "pickup-in-store"
989	// * "ship-to-store"
990	// * "same-day-delivery"
991	// * "next-day-delivery"
992	// * "custom-type-1"
993	// * "custom-type-2"
994	// * "custom-type-3"
995	// * "custom-type-4"
996	// * "custom-type-5"
997	//
998	// If this field is set to an invalid value other than these, an
999	// INVALID_ARGUMENT error is returned.
1000	//
1001	// This field directly corresponds to [Product.fulfillment_info.type][].
1002	Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
1003	// Required. The IDs for this
1004	// [type][google.cloud.retail.v2.RemoveFulfillmentPlacesRequest.type], such as
1005	// the store IDs for "pickup-in-store" or the region IDs for
1006	// "same-day-delivery", to be removed for this
1007	// [type][google.cloud.retail.v2.RemoveFulfillmentPlacesRequest.type].
1008	//
1009	// At least 1 value is required, and a maximum of 2000 values are allowed.
1010	// Each value must be a string with a length limit of 10 characters, matching
1011	// the pattern [a-zA-Z0-9_-]+, such as "store1" or "REGION-2". Otherwise, an
1012	// INVALID_ARGUMENT error is returned.
1013	PlaceIds []string `protobuf:"bytes,3,rep,name=place_ids,json=placeIds,proto3" json:"place_ids,omitempty"`
1014	// The time when the fulfillment updates are issued, used to prevent
1015	// out-of-order updates on fulfillment information. If not provided, the
1016	// internal system time will be used.
1017	RemoveTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=remove_time,json=removeTime,proto3" json:"remove_time,omitempty"`
1018	// If set to true, and the [Product][google.cloud.retail.v2.Product] is not
1019	// found, the fulfillment information will still be processed and retained for
1020	// at most 1 day and processed once the
1021	// [Product][google.cloud.retail.v2.Product] is created. If set to false, an
1022	// INVALID_ARGUMENT error is returned if the
1023	// [Product][google.cloud.retail.v2.Product] is not found.
1024	AllowMissing bool `protobuf:"varint,5,opt,name=allow_missing,json=allowMissing,proto3" json:"allow_missing,omitempty"`
1025}
1026
1027func (x *RemoveFulfillmentPlacesRequest) Reset() {
1028	*x = RemoveFulfillmentPlacesRequest{}
1029	if protoimpl.UnsafeEnabled {
1030		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[12]
1031		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1032		ms.StoreMessageInfo(mi)
1033	}
1034}
1035
1036func (x *RemoveFulfillmentPlacesRequest) String() string {
1037	return protoimpl.X.MessageStringOf(x)
1038}
1039
1040func (*RemoveFulfillmentPlacesRequest) ProtoMessage() {}
1041
1042func (x *RemoveFulfillmentPlacesRequest) ProtoReflect() protoreflect.Message {
1043	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[12]
1044	if protoimpl.UnsafeEnabled && x != nil {
1045		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1046		if ms.LoadMessageInfo() == nil {
1047			ms.StoreMessageInfo(mi)
1048		}
1049		return ms
1050	}
1051	return mi.MessageOf(x)
1052}
1053
1054// Deprecated: Use RemoveFulfillmentPlacesRequest.ProtoReflect.Descriptor instead.
1055func (*RemoveFulfillmentPlacesRequest) Descriptor() ([]byte, []int) {
1056	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{12}
1057}
1058
1059func (x *RemoveFulfillmentPlacesRequest) GetProduct() string {
1060	if x != nil {
1061		return x.Product
1062	}
1063	return ""
1064}
1065
1066func (x *RemoveFulfillmentPlacesRequest) GetType() string {
1067	if x != nil {
1068		return x.Type
1069	}
1070	return ""
1071}
1072
1073func (x *RemoveFulfillmentPlacesRequest) GetPlaceIds() []string {
1074	if x != nil {
1075		return x.PlaceIds
1076	}
1077	return nil
1078}
1079
1080func (x *RemoveFulfillmentPlacesRequest) GetRemoveTime() *timestamppb.Timestamp {
1081	if x != nil {
1082		return x.RemoveTime
1083	}
1084	return nil
1085}
1086
1087func (x *RemoveFulfillmentPlacesRequest) GetAllowMissing() bool {
1088	if x != nil {
1089		return x.AllowMissing
1090	}
1091	return false
1092}
1093
1094// Metadata related to the progress of the RemoveFulfillmentPlaces operation.
1095// Currently empty because there is no meaningful metadata populated from the
1096// [RemoveFulfillmentPlaces][] method.
1097type RemoveFulfillmentPlacesMetadata struct {
1098	state         protoimpl.MessageState
1099	sizeCache     protoimpl.SizeCache
1100	unknownFields protoimpl.UnknownFields
1101}
1102
1103func (x *RemoveFulfillmentPlacesMetadata) Reset() {
1104	*x = RemoveFulfillmentPlacesMetadata{}
1105	if protoimpl.UnsafeEnabled {
1106		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[13]
1107		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1108		ms.StoreMessageInfo(mi)
1109	}
1110}
1111
1112func (x *RemoveFulfillmentPlacesMetadata) String() string {
1113	return protoimpl.X.MessageStringOf(x)
1114}
1115
1116func (*RemoveFulfillmentPlacesMetadata) ProtoMessage() {}
1117
1118func (x *RemoveFulfillmentPlacesMetadata) ProtoReflect() protoreflect.Message {
1119	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[13]
1120	if protoimpl.UnsafeEnabled && x != nil {
1121		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1122		if ms.LoadMessageInfo() == nil {
1123			ms.StoreMessageInfo(mi)
1124		}
1125		return ms
1126	}
1127	return mi.MessageOf(x)
1128}
1129
1130// Deprecated: Use RemoveFulfillmentPlacesMetadata.ProtoReflect.Descriptor instead.
1131func (*RemoveFulfillmentPlacesMetadata) Descriptor() ([]byte, []int) {
1132	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{13}
1133}
1134
1135// Response of the RemoveFulfillmentPlacesRequest. Currently empty because there
1136// is no meaningful response populated from the [RemoveFulfillmentPlaces][]
1137// method.
1138type RemoveFulfillmentPlacesResponse struct {
1139	state         protoimpl.MessageState
1140	sizeCache     protoimpl.SizeCache
1141	unknownFields protoimpl.UnknownFields
1142}
1143
1144func (x *RemoveFulfillmentPlacesResponse) Reset() {
1145	*x = RemoveFulfillmentPlacesResponse{}
1146	if protoimpl.UnsafeEnabled {
1147		mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[14]
1148		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1149		ms.StoreMessageInfo(mi)
1150	}
1151}
1152
1153func (x *RemoveFulfillmentPlacesResponse) String() string {
1154	return protoimpl.X.MessageStringOf(x)
1155}
1156
1157func (*RemoveFulfillmentPlacesResponse) ProtoMessage() {}
1158
1159func (x *RemoveFulfillmentPlacesResponse) ProtoReflect() protoreflect.Message {
1160	mi := &file_google_cloud_retail_v2_product_service_proto_msgTypes[14]
1161	if protoimpl.UnsafeEnabled && x != nil {
1162		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
1163		if ms.LoadMessageInfo() == nil {
1164			ms.StoreMessageInfo(mi)
1165		}
1166		return ms
1167	}
1168	return mi.MessageOf(x)
1169}
1170
1171// Deprecated: Use RemoveFulfillmentPlacesResponse.ProtoReflect.Descriptor instead.
1172func (*RemoveFulfillmentPlacesResponse) Descriptor() ([]byte, []int) {
1173	return file_google_cloud_retail_v2_product_service_proto_rawDescGZIP(), []int{14}
1174}
1175
1176var File_google_cloud_retail_v2_product_service_proto protoreflect.FileDescriptor
1177
1178var file_google_cloud_retail_v2_product_service_proto_rawDesc = []byte{
1179	0x0a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72,
1180	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1181	0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x16,
1182	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74,
1183	0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61,
1184	0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70,
1185	0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69,
1186	0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67,
1187	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
1188	0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19,
1189	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75,
1190	0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
1191	0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76,
1192	0x32, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
1193	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c,
1194	0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72,
1195	0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x29, 0x67, 0x6f, 0x6f,
1196	0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
1197	0x2f, 0x76, 0x32, 0x2f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
1198	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c,
1199	0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61,
1200	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f,
1201	0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70,
1202	0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1203	0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f,
1204	0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67,
1205	0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
1206	0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x01, 0x0a, 0x14,
1207	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71,
1208	0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01,
1209	0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x72, 0x65,
1210	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
1211	0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65,
1212	0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x02, 0x20,
1213	0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
1214	0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f,
1215	0x64, 0x75, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75,
1216	0x63, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64,
1217	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x70, 0x72, 0x6f,
1218	0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f,
1219	0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e,
1220	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41,
1221	0x1f, 0x0a, 0x1d, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1222	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1223	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74,
1224	0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
1225	0x3e, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
1226	0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
1227	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
1228	0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12,
1229	0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02,
1230	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
1231	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b,
1232	0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d,
1233	0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20,
1234	0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e,
1235	0x67, 0x22, 0x51, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75,
1236	0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
1237	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a,
1238	0x1d, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70,
1239	0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x04,
1240	0x6e, 0x61, 0x6d, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f,
1241	0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06,
1242	0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0xe0, 0x41,
1243	0x02, 0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f,
1244	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x72, 0x61, 0x6e,
1245	0x63, 0x68, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61,
1246	0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70,
1247	0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f,
1248	0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67,
1249	0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
1250	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x37,
1251	0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28,
1252	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
1253	0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x08, 0x72,
1254	0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x7b, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x50,
1255	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
1256	0x3b, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
1257	0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
1258	0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75,
1259	0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f,
1260	0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
1261	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54,
1262	0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65,
1263	0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x09,
1264	0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
1265	0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72,
1266	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1267	0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79,
1268	0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01,
1269	0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
1270	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x07,
1271	0x73, 0x65, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x5f, 0x74,
1272	0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
1273	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65,
1274	0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23,
1275	0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18,
1276	0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73,
1277	0x69, 0x6e, 0x67, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74,
1278	0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x16, 0x0a, 0x14, 0x53,
1279	0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
1280	0x6e, 0x73, 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69,
1281	0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
1282	0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01,
1283	0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x72, 0x65,
1284	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
1285	0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f,
1286	0x64, 0x75, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
1287	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a,
1288	0x09, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
1289	0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12,
1290	0x35, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
1291	0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
1292	0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x61,
1293	0x64, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f,
1294	0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61,
1295	0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x1e, 0x0a, 0x1c, 0x41,
1296	0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61,
1297	0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1e, 0x0a, 0x1c, 0x41,
1298	0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61,
1299	0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xfe, 0x01, 0x0a, 0x1e,
1300	0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e,
1301	0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f,
1302	0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
1303	0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
1304	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50,
1305	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12,
1306	0x17, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0,
1307	0x41, 0x02, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x63,
1308	0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02,
1309	0x52, 0x08, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65,
1310	0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
1311	0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
1312	0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x6d,
1313	0x6f, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77,
1314	0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c,
1315	0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x21, 0x0a, 0x1f,
1316	0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e,
1317	0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22,
1318	0x21, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c,
1319	0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
1320	0x73, 0x65, 0x32, 0x8f, 0x12, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x65,
1321	0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xcf, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
1322	0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1323	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1324	0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65,
1325	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
1326	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50,
1327	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x22, 0x42,
1328	0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a,
1329	0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
1330	0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72,
1331	0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
1332	0x74, 0x73, 0x3a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0xda, 0x41, 0x19, 0x70, 0x61,
1333	0x72, 0x65, 0x6e, 0x74, 0x2c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x70, 0x72, 0x6f,
1334	0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x12, 0xac, 0x01, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50,
1335	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1336	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
1337	0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
1338	0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
1339	0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75,
1340	0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x76, 0x32, 0x2f,
1341	0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a,
1342	0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74,
1343	0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73,
1344	0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0xda,
1345	0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50,
1346	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1347	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1348	0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71,
1349	0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
1350	0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69,
1351	0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
1352	0x73, 0x65, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x76, 0x32, 0x2f,
1353	0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
1354	0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63,
1355	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68,
1356	0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0xda, 0x41,
1357	0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0xd2, 0x01, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61,
1358	0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
1359	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
1360	0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1361	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1362	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1363	0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56,
1364	0x32, 0x4b, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x6e,
1365	0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c,
1366	0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c,
1367	0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a,
1368	0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, 0x07, 0x70,
1369	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0xda, 0x41, 0x13, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1370	0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0xa9, 0x01, 0x0a,
1371	0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2c,
1372	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
1373	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72,
1374	0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67,
1375	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45,
1376	0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x2a, 0x43, 0x2f, 0x76,
1377	0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
1378	0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63,
1379	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68,
1380	0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a,
1381	0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x8e, 0x02, 0x0a, 0x0e, 0x49, 0x6d, 0x70,
1382	0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x2d, 0x2e, 0x67, 0x6f,
1383	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
1384	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75,
1385	0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f,
1386	0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e,
1387	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad, 0x01, 0x82, 0xd3, 0xe4, 0x93,
1388	0x02, 0x4e, 0x22, 0x49, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d,
1389	0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74,
1390	0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f,
1391	0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72,
1392	0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x3a, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x3a, 0x01, 0x2a,
1393	0xca, 0x41, 0x56, 0x0a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
1394	0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f,
1395	0x72, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
1396	0x73, 0x65, 0x12, 0x25, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64,
1397	0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72,
1398	0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xb4, 0x02, 0x0a, 0x0c, 0x53, 0x65,
1399	0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2b, 0x2e, 0x67, 0x6f, 0x6f,
1400	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
1401	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79,
1402	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1403	0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65,
1404	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x22,
1405	0x5a, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e,
1406	0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f,
1407	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61,
1408	0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f,
1409	0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, 0x73,
1410	0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x3a, 0x01, 0x2a, 0xda, 0x41,
1411	0x12, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2c, 0x73, 0x65, 0x74, 0x5f, 0x6d,
1412	0x61, 0x73, 0x6b, 0xca, 0x41, 0x5a, 0x0a, 0x2b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
1413	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53,
1414	0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
1415	0x6e, 0x73, 0x65, 0x12, 0x2b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
1416	0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x49,
1417	0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
1418	0x12, 0xca, 0x02, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d,
1419	0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
1420	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
1421	0x76, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e,
1422	0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d,
1423	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e,
1424	0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdd, 0x01,
1425	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x22, 0x5b, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x72, 0x6f,
1426	0x64, 0x75, 0x63, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f,
1427	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61,
1428	0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f,
1429	0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, 0x61,
1430	0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61,
1431	0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1432	0xca, 0x41, 0x6a, 0x0a, 0x33, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75,
1433	0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x46,
1434	0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73,
1435	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1436	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1437	0x2e, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50,
1438	0x6c, 0x61, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xd9, 0x02,
1439	0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d,
1440	0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
1441	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
1442	0x76, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c,
1443	0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
1444	0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72,
1445	0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
1446	0x22, 0xe6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x22, 0x5e, 0x2f, 0x76, 0x32, 0x2f, 0x7b,
1447	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73,
1448	0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63,
1449	0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68,
1450	0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2a,
1451	0x7d, 0x3a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d,
1452	0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0xda, 0x41, 0x07, 0x70,
1453	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0xca, 0x41, 0x70, 0x0a, 0x36, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
1454	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
1455	0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d,
1456	0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
1457	0x65, 0x12, 0x36, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
1458	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
1459	0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65,
1460	0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x49, 0xca, 0x41, 0x15, 0x72, 0x65,
1461	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
1462	0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77,
1463	0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
1464	0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74,
1465	0x66, 0x6f, 0x72, 0x6d, 0x42, 0xc8, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f,
1466	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
1467	0x2e, 0x76, 0x32, 0x42, 0x13, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76,
1468	0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3c, 0x67, 0x6f, 0x6f, 0x67,
1469	0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65,
1470	0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
1471	0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76,
1472	0x32, 0x3b, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0xa2, 0x02, 0x06, 0x52, 0x45, 0x54, 0x41, 0x49,
1473	0x4c, 0xaa, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64,
1474	0x2e, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x16, 0x47, 0x6f, 0x6f,
1475	0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c,
1476	0x5c, 0x56, 0x32, 0xea, 0x02, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c,
1477	0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x3a, 0x3a, 0x56, 0x32, 0x62,
1478	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
1479}
1480
1481var (
1482	file_google_cloud_retail_v2_product_service_proto_rawDescOnce sync.Once
1483	file_google_cloud_retail_v2_product_service_proto_rawDescData = file_google_cloud_retail_v2_product_service_proto_rawDesc
1484)
1485
1486func file_google_cloud_retail_v2_product_service_proto_rawDescGZIP() []byte {
1487	file_google_cloud_retail_v2_product_service_proto_rawDescOnce.Do(func() {
1488		file_google_cloud_retail_v2_product_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_retail_v2_product_service_proto_rawDescData)
1489	})
1490	return file_google_cloud_retail_v2_product_service_proto_rawDescData
1491}
1492
1493var file_google_cloud_retail_v2_product_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
1494var file_google_cloud_retail_v2_product_service_proto_goTypes = []interface{}{
1495	(*CreateProductRequest)(nil),            // 0: google.cloud.retail.v2.CreateProductRequest
1496	(*GetProductRequest)(nil),               // 1: google.cloud.retail.v2.GetProductRequest
1497	(*UpdateProductRequest)(nil),            // 2: google.cloud.retail.v2.UpdateProductRequest
1498	(*DeleteProductRequest)(nil),            // 3: google.cloud.retail.v2.DeleteProductRequest
1499	(*ListProductsRequest)(nil),             // 4: google.cloud.retail.v2.ListProductsRequest
1500	(*ListProductsResponse)(nil),            // 5: google.cloud.retail.v2.ListProductsResponse
1501	(*SetInventoryRequest)(nil),             // 6: google.cloud.retail.v2.SetInventoryRequest
1502	(*SetInventoryMetadata)(nil),            // 7: google.cloud.retail.v2.SetInventoryMetadata
1503	(*SetInventoryResponse)(nil),            // 8: google.cloud.retail.v2.SetInventoryResponse
1504	(*AddFulfillmentPlacesRequest)(nil),     // 9: google.cloud.retail.v2.AddFulfillmentPlacesRequest
1505	(*AddFulfillmentPlacesMetadata)(nil),    // 10: google.cloud.retail.v2.AddFulfillmentPlacesMetadata
1506	(*AddFulfillmentPlacesResponse)(nil),    // 11: google.cloud.retail.v2.AddFulfillmentPlacesResponse
1507	(*RemoveFulfillmentPlacesRequest)(nil),  // 12: google.cloud.retail.v2.RemoveFulfillmentPlacesRequest
1508	(*RemoveFulfillmentPlacesMetadata)(nil), // 13: google.cloud.retail.v2.RemoveFulfillmentPlacesMetadata
1509	(*RemoveFulfillmentPlacesResponse)(nil), // 14: google.cloud.retail.v2.RemoveFulfillmentPlacesResponse
1510	(*Product)(nil),                         // 15: google.cloud.retail.v2.Product
1511	(*fieldmaskpb.FieldMask)(nil),           // 16: google.protobuf.FieldMask
1512	(*timestamppb.Timestamp)(nil),           // 17: google.protobuf.Timestamp
1513	(*ImportProductsRequest)(nil),           // 18: google.cloud.retail.v2.ImportProductsRequest
1514	(*emptypb.Empty)(nil),                   // 19: google.protobuf.Empty
1515	(*longrunning.Operation)(nil),           // 20: google.longrunning.Operation
1516}
1517var file_google_cloud_retail_v2_product_service_proto_depIdxs = []int32{
1518	15, // 0: google.cloud.retail.v2.CreateProductRequest.product:type_name -> google.cloud.retail.v2.Product
1519	15, // 1: google.cloud.retail.v2.UpdateProductRequest.product:type_name -> google.cloud.retail.v2.Product
1520	16, // 2: google.cloud.retail.v2.UpdateProductRequest.update_mask:type_name -> google.protobuf.FieldMask
1521	16, // 3: google.cloud.retail.v2.ListProductsRequest.read_mask:type_name -> google.protobuf.FieldMask
1522	15, // 4: google.cloud.retail.v2.ListProductsResponse.products:type_name -> google.cloud.retail.v2.Product
1523	15, // 5: google.cloud.retail.v2.SetInventoryRequest.inventory:type_name -> google.cloud.retail.v2.Product
1524	16, // 6: google.cloud.retail.v2.SetInventoryRequest.set_mask:type_name -> google.protobuf.FieldMask
1525	17, // 7: google.cloud.retail.v2.SetInventoryRequest.set_time:type_name -> google.protobuf.Timestamp
1526	17, // 8: google.cloud.retail.v2.AddFulfillmentPlacesRequest.add_time:type_name -> google.protobuf.Timestamp
1527	17, // 9: google.cloud.retail.v2.RemoveFulfillmentPlacesRequest.remove_time:type_name -> google.protobuf.Timestamp
1528	0,  // 10: google.cloud.retail.v2.ProductService.CreateProduct:input_type -> google.cloud.retail.v2.CreateProductRequest
1529	1,  // 11: google.cloud.retail.v2.ProductService.GetProduct:input_type -> google.cloud.retail.v2.GetProductRequest
1530	4,  // 12: google.cloud.retail.v2.ProductService.ListProducts:input_type -> google.cloud.retail.v2.ListProductsRequest
1531	2,  // 13: google.cloud.retail.v2.ProductService.UpdateProduct:input_type -> google.cloud.retail.v2.UpdateProductRequest
1532	3,  // 14: google.cloud.retail.v2.ProductService.DeleteProduct:input_type -> google.cloud.retail.v2.DeleteProductRequest
1533	18, // 15: google.cloud.retail.v2.ProductService.ImportProducts:input_type -> google.cloud.retail.v2.ImportProductsRequest
1534	6,  // 16: google.cloud.retail.v2.ProductService.SetInventory:input_type -> google.cloud.retail.v2.SetInventoryRequest
1535	9,  // 17: google.cloud.retail.v2.ProductService.AddFulfillmentPlaces:input_type -> google.cloud.retail.v2.AddFulfillmentPlacesRequest
1536	12, // 18: google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces:input_type -> google.cloud.retail.v2.RemoveFulfillmentPlacesRequest
1537	15, // 19: google.cloud.retail.v2.ProductService.CreateProduct:output_type -> google.cloud.retail.v2.Product
1538	15, // 20: google.cloud.retail.v2.ProductService.GetProduct:output_type -> google.cloud.retail.v2.Product
1539	5,  // 21: google.cloud.retail.v2.ProductService.ListProducts:output_type -> google.cloud.retail.v2.ListProductsResponse
1540	15, // 22: google.cloud.retail.v2.ProductService.UpdateProduct:output_type -> google.cloud.retail.v2.Product
1541	19, // 23: google.cloud.retail.v2.ProductService.DeleteProduct:output_type -> google.protobuf.Empty
1542	20, // 24: google.cloud.retail.v2.ProductService.ImportProducts:output_type -> google.longrunning.Operation
1543	20, // 25: google.cloud.retail.v2.ProductService.SetInventory:output_type -> google.longrunning.Operation
1544	20, // 26: google.cloud.retail.v2.ProductService.AddFulfillmentPlaces:output_type -> google.longrunning.Operation
1545	20, // 27: google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces:output_type -> google.longrunning.Operation
1546	19, // [19:28] is the sub-list for method output_type
1547	10, // [10:19] is the sub-list for method input_type
1548	10, // [10:10] is the sub-list for extension type_name
1549	10, // [10:10] is the sub-list for extension extendee
1550	0,  // [0:10] is the sub-list for field type_name
1551}
1552
1553func init() { file_google_cloud_retail_v2_product_service_proto_init() }
1554func file_google_cloud_retail_v2_product_service_proto_init() {
1555	if File_google_cloud_retail_v2_product_service_proto != nil {
1556		return
1557	}
1558	file_google_cloud_retail_v2_import_config_proto_init()
1559	file_google_cloud_retail_v2_product_proto_init()
1560	file_google_cloud_retail_v2_purge_config_proto_init()
1561	if !protoimpl.UnsafeEnabled {
1562		file_google_cloud_retail_v2_product_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
1563			switch v := v.(*CreateProductRequest); i {
1564			case 0:
1565				return &v.state
1566			case 1:
1567				return &v.sizeCache
1568			case 2:
1569				return &v.unknownFields
1570			default:
1571				return nil
1572			}
1573		}
1574		file_google_cloud_retail_v2_product_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
1575			switch v := v.(*GetProductRequest); i {
1576			case 0:
1577				return &v.state
1578			case 1:
1579				return &v.sizeCache
1580			case 2:
1581				return &v.unknownFields
1582			default:
1583				return nil
1584			}
1585		}
1586		file_google_cloud_retail_v2_product_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
1587			switch v := v.(*UpdateProductRequest); i {
1588			case 0:
1589				return &v.state
1590			case 1:
1591				return &v.sizeCache
1592			case 2:
1593				return &v.unknownFields
1594			default:
1595				return nil
1596			}
1597		}
1598		file_google_cloud_retail_v2_product_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
1599			switch v := v.(*DeleteProductRequest); i {
1600			case 0:
1601				return &v.state
1602			case 1:
1603				return &v.sizeCache
1604			case 2:
1605				return &v.unknownFields
1606			default:
1607				return nil
1608			}
1609		}
1610		file_google_cloud_retail_v2_product_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
1611			switch v := v.(*ListProductsRequest); i {
1612			case 0:
1613				return &v.state
1614			case 1:
1615				return &v.sizeCache
1616			case 2:
1617				return &v.unknownFields
1618			default:
1619				return nil
1620			}
1621		}
1622		file_google_cloud_retail_v2_product_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
1623			switch v := v.(*ListProductsResponse); i {
1624			case 0:
1625				return &v.state
1626			case 1:
1627				return &v.sizeCache
1628			case 2:
1629				return &v.unknownFields
1630			default:
1631				return nil
1632			}
1633		}
1634		file_google_cloud_retail_v2_product_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
1635			switch v := v.(*SetInventoryRequest); i {
1636			case 0:
1637				return &v.state
1638			case 1:
1639				return &v.sizeCache
1640			case 2:
1641				return &v.unknownFields
1642			default:
1643				return nil
1644			}
1645		}
1646		file_google_cloud_retail_v2_product_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
1647			switch v := v.(*SetInventoryMetadata); i {
1648			case 0:
1649				return &v.state
1650			case 1:
1651				return &v.sizeCache
1652			case 2:
1653				return &v.unknownFields
1654			default:
1655				return nil
1656			}
1657		}
1658		file_google_cloud_retail_v2_product_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
1659			switch v := v.(*SetInventoryResponse); i {
1660			case 0:
1661				return &v.state
1662			case 1:
1663				return &v.sizeCache
1664			case 2:
1665				return &v.unknownFields
1666			default:
1667				return nil
1668			}
1669		}
1670		file_google_cloud_retail_v2_product_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
1671			switch v := v.(*AddFulfillmentPlacesRequest); i {
1672			case 0:
1673				return &v.state
1674			case 1:
1675				return &v.sizeCache
1676			case 2:
1677				return &v.unknownFields
1678			default:
1679				return nil
1680			}
1681		}
1682		file_google_cloud_retail_v2_product_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
1683			switch v := v.(*AddFulfillmentPlacesMetadata); i {
1684			case 0:
1685				return &v.state
1686			case 1:
1687				return &v.sizeCache
1688			case 2:
1689				return &v.unknownFields
1690			default:
1691				return nil
1692			}
1693		}
1694		file_google_cloud_retail_v2_product_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
1695			switch v := v.(*AddFulfillmentPlacesResponse); i {
1696			case 0:
1697				return &v.state
1698			case 1:
1699				return &v.sizeCache
1700			case 2:
1701				return &v.unknownFields
1702			default:
1703				return nil
1704			}
1705		}
1706		file_google_cloud_retail_v2_product_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
1707			switch v := v.(*RemoveFulfillmentPlacesRequest); i {
1708			case 0:
1709				return &v.state
1710			case 1:
1711				return &v.sizeCache
1712			case 2:
1713				return &v.unknownFields
1714			default:
1715				return nil
1716			}
1717		}
1718		file_google_cloud_retail_v2_product_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
1719			switch v := v.(*RemoveFulfillmentPlacesMetadata); i {
1720			case 0:
1721				return &v.state
1722			case 1:
1723				return &v.sizeCache
1724			case 2:
1725				return &v.unknownFields
1726			default:
1727				return nil
1728			}
1729		}
1730		file_google_cloud_retail_v2_product_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
1731			switch v := v.(*RemoveFulfillmentPlacesResponse); i {
1732			case 0:
1733				return &v.state
1734			case 1:
1735				return &v.sizeCache
1736			case 2:
1737				return &v.unknownFields
1738			default:
1739				return nil
1740			}
1741		}
1742	}
1743	type x struct{}
1744	out := protoimpl.TypeBuilder{
1745		File: protoimpl.DescBuilder{
1746			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
1747			RawDescriptor: file_google_cloud_retail_v2_product_service_proto_rawDesc,
1748			NumEnums:      0,
1749			NumMessages:   15,
1750			NumExtensions: 0,
1751			NumServices:   1,
1752		},
1753		GoTypes:           file_google_cloud_retail_v2_product_service_proto_goTypes,
1754		DependencyIndexes: file_google_cloud_retail_v2_product_service_proto_depIdxs,
1755		MessageInfos:      file_google_cloud_retail_v2_product_service_proto_msgTypes,
1756	}.Build()
1757	File_google_cloud_retail_v2_product_service_proto = out.File
1758	file_google_cloud_retail_v2_product_service_proto_rawDesc = nil
1759	file_google_cloud_retail_v2_product_service_proto_goTypes = nil
1760	file_google_cloud_retail_v2_product_service_proto_depIdxs = nil
1761}
1762
1763// Reference imports to suppress errors if they are not otherwise used.
1764var _ context.Context
1765var _ grpc.ClientConnInterface
1766
1767// This is a compile-time assertion to ensure that this generated file
1768// is compatible with the grpc package it is being compiled against.
1769const _ = grpc.SupportPackageIsVersion6
1770
1771// ProductServiceClient is the client API for ProductService service.
1772//
1773// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
1774type ProductServiceClient interface {
1775	// Creates a [Product][google.cloud.retail.v2.Product].
1776	CreateProduct(ctx context.Context, in *CreateProductRequest, opts ...grpc.CallOption) (*Product, error)
1777	// Gets a [Product][google.cloud.retail.v2.Product].
1778	GetProduct(ctx context.Context, in *GetProductRequest, opts ...grpc.CallOption) (*Product, error)
1779	// Gets a list of [Product][google.cloud.retail.v2.Product]s.
1780	ListProducts(ctx context.Context, in *ListProductsRequest, opts ...grpc.CallOption) (*ListProductsResponse, error)
1781	// Updates a [Product][google.cloud.retail.v2.Product].
1782	UpdateProduct(ctx context.Context, in *UpdateProductRequest, opts ...grpc.CallOption) (*Product, error)
1783	// Deletes a [Product][google.cloud.retail.v2.Product].
1784	DeleteProduct(ctx context.Context, in *DeleteProductRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
1785	// Bulk import of multiple [Product][google.cloud.retail.v2.Product]s.
1786	//
1787	// Request processing may be synchronous. No partial updating is supported.
1788	// Non-existing items are created.
1789	//
1790	// Note that it is possible for a subset of the
1791	// [Product][google.cloud.retail.v2.Product]s to be successfully updated.
1792	ImportProducts(ctx context.Context, in *ImportProductsRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1793	// Updates inventory information for a
1794	// [Product][google.cloud.retail.v2.Product] while respecting the last update
1795	// timestamps of each inventory field.
1796	//
1797	// This process is asynchronous and does not require the
1798	// [Product][google.cloud.retail.v2.Product] to exist before updating
1799	// fulfillment information. If the request is valid, the update will be
1800	// enqueued and processed downstream. As a consequence, when a response is
1801	// returned, updates are not immediately manifested in the
1802	// [Product][google.cloud.retail.v2.Product] queried by
1803	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1804	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1805	//
1806	// When inventory is updated with
1807	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] and
1808	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct], the
1809	// specified inventory field value(s) will overwrite any existing value(s)
1810	// while ignoring the last update time for this field. Furthermore, the last
1811	// update time for the specified inventory fields will be overwritten to the
1812	// time of the
1813	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] or
1814	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct]
1815	// request.
1816	//
1817	// If no inventory fields are set in
1818	// [CreateProductRequest.product][google.cloud.retail.v2.CreateProductRequest.product],
1819	// then any pre-existing inventory information for this product will be used.
1820	//
1821	// If no inventory fields are set in [UpdateProductRequest.set_mask][],
1822	// then any existing inventory information will be preserved.
1823	//
1824	// Pre-existing inventory information can only be updated with
1825	// [SetInventory][google.cloud.retail.v2.ProductService.SetInventory],
1826	// [AddFulfillmentPlaces][google.cloud.retail.v2.ProductService.AddFulfillmentPlaces],
1827	// and
1828	// [RemoveFulfillmentPlaces][google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces].
1829	//
1830	// This feature is only available for users who have Retail Search enabled.
1831	// Please submit a form [here](https://cloud.google.com/contact) to contact
1832	// cloud sales if you are interested in using Retail Search.
1833	SetInventory(ctx context.Context, in *SetInventoryRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1834	// Incrementally adds place IDs to
1835	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
1836	//
1837	// This process is asynchronous and does not require the
1838	// [Product][google.cloud.retail.v2.Product] to exist before updating
1839	// fulfillment information. If the request is valid, the update will be
1840	// enqueued and processed downstream. As a consequence, when a response is
1841	// returned, the added place IDs are not immediately manifested in the
1842	// [Product][google.cloud.retail.v2.Product] queried by
1843	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1844	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1845	//
1846	// This feature is only available for users who have Retail Search enabled.
1847	// Please submit a form [here](https://cloud.google.com/contact) to contact
1848	// cloud sales if you are interested in using Retail Search.
1849	AddFulfillmentPlaces(ctx context.Context, in *AddFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1850	// Incrementally removes place IDs from a
1851	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
1852	//
1853	// This process is asynchronous and does not require the
1854	// [Product][google.cloud.retail.v2.Product] to exist before updating
1855	// fulfillment information. If the request is valid, the update will be
1856	// enqueued and processed downstream. As a consequence, when a response is
1857	// returned, the removed place IDs are not immediately manifested in the
1858	// [Product][google.cloud.retail.v2.Product] queried by
1859	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1860	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1861	//
1862	// This feature is only available for users who have Retail Search enabled.
1863	// Please submit a form [here](https://cloud.google.com/contact) to contact
1864	// cloud sales if you are interested in using Retail Search.
1865	RemoveFulfillmentPlaces(ctx context.Context, in *RemoveFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1866}
1867
1868type productServiceClient struct {
1869	cc grpc.ClientConnInterface
1870}
1871
1872func NewProductServiceClient(cc grpc.ClientConnInterface) ProductServiceClient {
1873	return &productServiceClient{cc}
1874}
1875
1876func (c *productServiceClient) CreateProduct(ctx context.Context, in *CreateProductRequest, opts ...grpc.CallOption) (*Product, error) {
1877	out := new(Product)
1878	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/CreateProduct", in, out, opts...)
1879	if err != nil {
1880		return nil, err
1881	}
1882	return out, nil
1883}
1884
1885func (c *productServiceClient) GetProduct(ctx context.Context, in *GetProductRequest, opts ...grpc.CallOption) (*Product, error) {
1886	out := new(Product)
1887	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/GetProduct", in, out, opts...)
1888	if err != nil {
1889		return nil, err
1890	}
1891	return out, nil
1892}
1893
1894func (c *productServiceClient) ListProducts(ctx context.Context, in *ListProductsRequest, opts ...grpc.CallOption) (*ListProductsResponse, error) {
1895	out := new(ListProductsResponse)
1896	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/ListProducts", in, out, opts...)
1897	if err != nil {
1898		return nil, err
1899	}
1900	return out, nil
1901}
1902
1903func (c *productServiceClient) UpdateProduct(ctx context.Context, in *UpdateProductRequest, opts ...grpc.CallOption) (*Product, error) {
1904	out := new(Product)
1905	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/UpdateProduct", in, out, opts...)
1906	if err != nil {
1907		return nil, err
1908	}
1909	return out, nil
1910}
1911
1912func (c *productServiceClient) DeleteProduct(ctx context.Context, in *DeleteProductRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
1913	out := new(emptypb.Empty)
1914	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/DeleteProduct", in, out, opts...)
1915	if err != nil {
1916		return nil, err
1917	}
1918	return out, nil
1919}
1920
1921func (c *productServiceClient) ImportProducts(ctx context.Context, in *ImportProductsRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1922	out := new(longrunning.Operation)
1923	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/ImportProducts", in, out, opts...)
1924	if err != nil {
1925		return nil, err
1926	}
1927	return out, nil
1928}
1929
1930func (c *productServiceClient) SetInventory(ctx context.Context, in *SetInventoryRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1931	out := new(longrunning.Operation)
1932	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/SetInventory", in, out, opts...)
1933	if err != nil {
1934		return nil, err
1935	}
1936	return out, nil
1937}
1938
1939func (c *productServiceClient) AddFulfillmentPlaces(ctx context.Context, in *AddFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1940	out := new(longrunning.Operation)
1941	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/AddFulfillmentPlaces", in, out, opts...)
1942	if err != nil {
1943		return nil, err
1944	}
1945	return out, nil
1946}
1947
1948func (c *productServiceClient) RemoveFulfillmentPlaces(ctx context.Context, in *RemoveFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1949	out := new(longrunning.Operation)
1950	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/RemoveFulfillmentPlaces", in, out, opts...)
1951	if err != nil {
1952		return nil, err
1953	}
1954	return out, nil
1955}
1956
1957// ProductServiceServer is the server API for ProductService service.
1958type ProductServiceServer interface {
1959	// Creates a [Product][google.cloud.retail.v2.Product].
1960	CreateProduct(context.Context, *CreateProductRequest) (*Product, error)
1961	// Gets a [Product][google.cloud.retail.v2.Product].
1962	GetProduct(context.Context, *GetProductRequest) (*Product, error)
1963	// Gets a list of [Product][google.cloud.retail.v2.Product]s.
1964	ListProducts(context.Context, *ListProductsRequest) (*ListProductsResponse, error)
1965	// Updates a [Product][google.cloud.retail.v2.Product].
1966	UpdateProduct(context.Context, *UpdateProductRequest) (*Product, error)
1967	// Deletes a [Product][google.cloud.retail.v2.Product].
1968	DeleteProduct(context.Context, *DeleteProductRequest) (*emptypb.Empty, error)
1969	// Bulk import of multiple [Product][google.cloud.retail.v2.Product]s.
1970	//
1971	// Request processing may be synchronous. No partial updating is supported.
1972	// Non-existing items are created.
1973	//
1974	// Note that it is possible for a subset of the
1975	// [Product][google.cloud.retail.v2.Product]s to be successfully updated.
1976	ImportProducts(context.Context, *ImportProductsRequest) (*longrunning.Operation, error)
1977	// Updates inventory information for a
1978	// [Product][google.cloud.retail.v2.Product] while respecting the last update
1979	// timestamps of each inventory field.
1980	//
1981	// This process is asynchronous and does not require the
1982	// [Product][google.cloud.retail.v2.Product] to exist before updating
1983	// fulfillment information. If the request is valid, the update will be
1984	// enqueued and processed downstream. As a consequence, when a response is
1985	// returned, updates are not immediately manifested in the
1986	// [Product][google.cloud.retail.v2.Product] queried by
1987	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1988	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1989	//
1990	// When inventory is updated with
1991	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] and
1992	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct], the
1993	// specified inventory field value(s) will overwrite any existing value(s)
1994	// while ignoring the last update time for this field. Furthermore, the last
1995	// update time for the specified inventory fields will be overwritten to the
1996	// time of the
1997	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] or
1998	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct]
1999	// request.
2000	//
2001	// If no inventory fields are set in
2002	// [CreateProductRequest.product][google.cloud.retail.v2.CreateProductRequest.product],
2003	// then any pre-existing inventory information for this product will be used.
2004	//
2005	// If no inventory fields are set in [UpdateProductRequest.set_mask][],
2006	// then any existing inventory information will be preserved.
2007	//
2008	// Pre-existing inventory information can only be updated with
2009	// [SetInventory][google.cloud.retail.v2.ProductService.SetInventory],
2010	// [AddFulfillmentPlaces][google.cloud.retail.v2.ProductService.AddFulfillmentPlaces],
2011	// and
2012	// [RemoveFulfillmentPlaces][google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces].
2013	//
2014	// This feature is only available for users who have Retail Search enabled.
2015	// Please submit a form [here](https://cloud.google.com/contact) to contact
2016	// cloud sales if you are interested in using Retail Search.
2017	SetInventory(context.Context, *SetInventoryRequest) (*longrunning.Operation, error)
2018	// Incrementally adds place IDs to
2019	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
2020	//
2021	// This process is asynchronous and does not require the
2022	// [Product][google.cloud.retail.v2.Product] to exist before updating
2023	// fulfillment information. If the request is valid, the update will be
2024	// enqueued and processed downstream. As a consequence, when a response is
2025	// returned, the added place IDs are not immediately manifested in the
2026	// [Product][google.cloud.retail.v2.Product] queried by
2027	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
2028	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
2029	//
2030	// This feature is only available for users who have Retail Search enabled.
2031	// Please submit a form [here](https://cloud.google.com/contact) to contact
2032	// cloud sales if you are interested in using Retail Search.
2033	AddFulfillmentPlaces(context.Context, *AddFulfillmentPlacesRequest) (*longrunning.Operation, error)
2034	// Incrementally removes place IDs from a
2035	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
2036	//
2037	// This process is asynchronous and does not require the
2038	// [Product][google.cloud.retail.v2.Product] to exist before updating
2039	// fulfillment information. If the request is valid, the update will be
2040	// enqueued and processed downstream. As a consequence, when a response is
2041	// returned, the removed place IDs are not immediately manifested in the
2042	// [Product][google.cloud.retail.v2.Product] queried by
2043	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
2044	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
2045	//
2046	// This feature is only available for users who have Retail Search enabled.
2047	// Please submit a form [here](https://cloud.google.com/contact) to contact
2048	// cloud sales if you are interested in using Retail Search.
2049	RemoveFulfillmentPlaces(context.Context, *RemoveFulfillmentPlacesRequest) (*longrunning.Operation, error)
2050}
2051
2052// UnimplementedProductServiceServer can be embedded to have forward compatible implementations.
2053type UnimplementedProductServiceServer struct {
2054}
2055
2056func (*UnimplementedProductServiceServer) CreateProduct(context.Context, *CreateProductRequest) (*Product, error) {
2057	return nil, status.Errorf(codes.Unimplemented, "method CreateProduct not implemented")
2058}
2059func (*UnimplementedProductServiceServer) GetProduct(context.Context, *GetProductRequest) (*Product, error) {
2060	return nil, status.Errorf(codes.Unimplemented, "method GetProduct not implemented")
2061}
2062func (*UnimplementedProductServiceServer) ListProducts(context.Context, *ListProductsRequest) (*ListProductsResponse, error) {
2063	return nil, status.Errorf(codes.Unimplemented, "method ListProducts not implemented")
2064}
2065func (*UnimplementedProductServiceServer) UpdateProduct(context.Context, *UpdateProductRequest) (*Product, error) {
2066	return nil, status.Errorf(codes.Unimplemented, "method UpdateProduct not implemented")
2067}
2068func (*UnimplementedProductServiceServer) DeleteProduct(context.Context, *DeleteProductRequest) (*emptypb.Empty, error) {
2069	return nil, status.Errorf(codes.Unimplemented, "method DeleteProduct not implemented")
2070}
2071func (*UnimplementedProductServiceServer) ImportProducts(context.Context, *ImportProductsRequest) (*longrunning.Operation, error) {
2072	return nil, status.Errorf(codes.Unimplemented, "method ImportProducts not implemented")
2073}
2074func (*UnimplementedProductServiceServer) SetInventory(context.Context, *SetInventoryRequest) (*longrunning.Operation, error) {
2075	return nil, status.Errorf(codes.Unimplemented, "method SetInventory not implemented")
2076}
2077func (*UnimplementedProductServiceServer) AddFulfillmentPlaces(context.Context, *AddFulfillmentPlacesRequest) (*longrunning.Operation, error) {
2078	return nil, status.Errorf(codes.Unimplemented, "method AddFulfillmentPlaces not implemented")
2079}
2080func (*UnimplementedProductServiceServer) RemoveFulfillmentPlaces(context.Context, *RemoveFulfillmentPlacesRequest) (*longrunning.Operation, error) {
2081	return nil, status.Errorf(codes.Unimplemented, "method RemoveFulfillmentPlaces not implemented")
2082}
2083
2084func RegisterProductServiceServer(s *grpc.Server, srv ProductServiceServer) {
2085	s.RegisterService(&_ProductService_serviceDesc, srv)
2086}
2087
2088func _ProductService_CreateProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2089	in := new(CreateProductRequest)
2090	if err := dec(in); err != nil {
2091		return nil, err
2092	}
2093	if interceptor == nil {
2094		return srv.(ProductServiceServer).CreateProduct(ctx, in)
2095	}
2096	info := &grpc.UnaryServerInfo{
2097		Server:     srv,
2098		FullMethod: "/google.cloud.retail.v2.ProductService/CreateProduct",
2099	}
2100	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2101		return srv.(ProductServiceServer).CreateProduct(ctx, req.(*CreateProductRequest))
2102	}
2103	return interceptor(ctx, in, info, handler)
2104}
2105
2106func _ProductService_GetProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2107	in := new(GetProductRequest)
2108	if err := dec(in); err != nil {
2109		return nil, err
2110	}
2111	if interceptor == nil {
2112		return srv.(ProductServiceServer).GetProduct(ctx, in)
2113	}
2114	info := &grpc.UnaryServerInfo{
2115		Server:     srv,
2116		FullMethod: "/google.cloud.retail.v2.ProductService/GetProduct",
2117	}
2118	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2119		return srv.(ProductServiceServer).GetProduct(ctx, req.(*GetProductRequest))
2120	}
2121	return interceptor(ctx, in, info, handler)
2122}
2123
2124func _ProductService_ListProducts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2125	in := new(ListProductsRequest)
2126	if err := dec(in); err != nil {
2127		return nil, err
2128	}
2129	if interceptor == nil {
2130		return srv.(ProductServiceServer).ListProducts(ctx, in)
2131	}
2132	info := &grpc.UnaryServerInfo{
2133		Server:     srv,
2134		FullMethod: "/google.cloud.retail.v2.ProductService/ListProducts",
2135	}
2136	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2137		return srv.(ProductServiceServer).ListProducts(ctx, req.(*ListProductsRequest))
2138	}
2139	return interceptor(ctx, in, info, handler)
2140}
2141
2142func _ProductService_UpdateProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2143	in := new(UpdateProductRequest)
2144	if err := dec(in); err != nil {
2145		return nil, err
2146	}
2147	if interceptor == nil {
2148		return srv.(ProductServiceServer).UpdateProduct(ctx, in)
2149	}
2150	info := &grpc.UnaryServerInfo{
2151		Server:     srv,
2152		FullMethod: "/google.cloud.retail.v2.ProductService/UpdateProduct",
2153	}
2154	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2155		return srv.(ProductServiceServer).UpdateProduct(ctx, req.(*UpdateProductRequest))
2156	}
2157	return interceptor(ctx, in, info, handler)
2158}
2159
2160func _ProductService_DeleteProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2161	in := new(DeleteProductRequest)
2162	if err := dec(in); err != nil {
2163		return nil, err
2164	}
2165	if interceptor == nil {
2166		return srv.(ProductServiceServer).DeleteProduct(ctx, in)
2167	}
2168	info := &grpc.UnaryServerInfo{
2169		Server:     srv,
2170		FullMethod: "/google.cloud.retail.v2.ProductService/DeleteProduct",
2171	}
2172	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2173		return srv.(ProductServiceServer).DeleteProduct(ctx, req.(*DeleteProductRequest))
2174	}
2175	return interceptor(ctx, in, info, handler)
2176}
2177
2178func _ProductService_ImportProducts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2179	in := new(ImportProductsRequest)
2180	if err := dec(in); err != nil {
2181		return nil, err
2182	}
2183	if interceptor == nil {
2184		return srv.(ProductServiceServer).ImportProducts(ctx, in)
2185	}
2186	info := &grpc.UnaryServerInfo{
2187		Server:     srv,
2188		FullMethod: "/google.cloud.retail.v2.ProductService/ImportProducts",
2189	}
2190	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2191		return srv.(ProductServiceServer).ImportProducts(ctx, req.(*ImportProductsRequest))
2192	}
2193	return interceptor(ctx, in, info, handler)
2194}
2195
2196func _ProductService_SetInventory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2197	in := new(SetInventoryRequest)
2198	if err := dec(in); err != nil {
2199		return nil, err
2200	}
2201	if interceptor == nil {
2202		return srv.(ProductServiceServer).SetInventory(ctx, in)
2203	}
2204	info := &grpc.UnaryServerInfo{
2205		Server:     srv,
2206		FullMethod: "/google.cloud.retail.v2.ProductService/SetInventory",
2207	}
2208	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2209		return srv.(ProductServiceServer).SetInventory(ctx, req.(*SetInventoryRequest))
2210	}
2211	return interceptor(ctx, in, info, handler)
2212}
2213
2214func _ProductService_AddFulfillmentPlaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2215	in := new(AddFulfillmentPlacesRequest)
2216	if err := dec(in); err != nil {
2217		return nil, err
2218	}
2219	if interceptor == nil {
2220		return srv.(ProductServiceServer).AddFulfillmentPlaces(ctx, in)
2221	}
2222	info := &grpc.UnaryServerInfo{
2223		Server:     srv,
2224		FullMethod: "/google.cloud.retail.v2.ProductService/AddFulfillmentPlaces",
2225	}
2226	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2227		return srv.(ProductServiceServer).AddFulfillmentPlaces(ctx, req.(*AddFulfillmentPlacesRequest))
2228	}
2229	return interceptor(ctx, in, info, handler)
2230}
2231
2232func _ProductService_RemoveFulfillmentPlaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2233	in := new(RemoveFulfillmentPlacesRequest)
2234	if err := dec(in); err != nil {
2235		return nil, err
2236	}
2237	if interceptor == nil {
2238		return srv.(ProductServiceServer).RemoveFulfillmentPlaces(ctx, in)
2239	}
2240	info := &grpc.UnaryServerInfo{
2241		Server:     srv,
2242		FullMethod: "/google.cloud.retail.v2.ProductService/RemoveFulfillmentPlaces",
2243	}
2244	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2245		return srv.(ProductServiceServer).RemoveFulfillmentPlaces(ctx, req.(*RemoveFulfillmentPlacesRequest))
2246	}
2247	return interceptor(ctx, in, info, handler)
2248}
2249
2250var _ProductService_serviceDesc = grpc.ServiceDesc{
2251	ServiceName: "google.cloud.retail.v2.ProductService",
2252	HandlerType: (*ProductServiceServer)(nil),
2253	Methods: []grpc.MethodDesc{
2254		{
2255			MethodName: "CreateProduct",
2256			Handler:    _ProductService_CreateProduct_Handler,
2257		},
2258		{
2259			MethodName: "GetProduct",
2260			Handler:    _ProductService_GetProduct_Handler,
2261		},
2262		{
2263			MethodName: "ListProducts",
2264			Handler:    _ProductService_ListProducts_Handler,
2265		},
2266		{
2267			MethodName: "UpdateProduct",
2268			Handler:    _ProductService_UpdateProduct_Handler,
2269		},
2270		{
2271			MethodName: "DeleteProduct",
2272			Handler:    _ProductService_DeleteProduct_Handler,
2273		},
2274		{
2275			MethodName: "ImportProducts",
2276			Handler:    _ProductService_ImportProducts_Handler,
2277		},
2278		{
2279			MethodName: "SetInventory",
2280			Handler:    _ProductService_SetInventory_Handler,
2281		},
2282		{
2283			MethodName: "AddFulfillmentPlaces",
2284			Handler:    _ProductService_AddFulfillmentPlaces_Handler,
2285		},
2286		{
2287			MethodName: "RemoveFulfillmentPlaces",
2288			Handler:    _ProductService_RemoveFulfillmentPlaces_Handler,
2289		},
2290	},
2291	Streams:  []grpc.StreamDesc{},
2292	Metadata: "google/cloud/retail/v2/product_service.proto",
2293}
2294