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, a NOT_FOUND 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, a
815	// NOT_FOUND 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 AddFulfillmentPlacesRequest.  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, a
1022	// NOT_FOUND 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, 0x23, 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, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2a,
1193	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74,
1194	0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x63, 0x6f,
1195	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x67, 0x6f, 0x6f, 0x67,
1196	0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f,
1197	0x76, 0x32, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
1198	0x1a, 0x29, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72,
1199	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x75, 0x72, 0x67, 0x65, 0x5f, 0x63,
1200	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, 0x6f, 0x6f,
1201	0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2f,
1202	0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
1203	0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
1204	0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67,
1205	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66,
1206	0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a,
1207	0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
1208	0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
1209	0x22, 0xb8, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75,
1210	0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72,
1211	0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x24, 0xe0, 0x41, 0x02, 0xfa, 0x41,
1212	0x1e, 0x0a, 0x1c, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1213	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52,
1214	0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75,
1215	0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
1216	0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76,
1217	0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07,
1218	0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75,
1219	0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02,
1220	0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x22, 0x4e, 0x0a, 0x11, 0x47,
1221	0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
1222	0x12, 0x39, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25,
1223	0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67,
1224	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72,
1225	0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x14,
1226	0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71,
1227	0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18,
1228	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
1229	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50,
1230	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x07, 0x70, 0x72, 0x6f,
1231	0x64, 0x75, 0x63, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d,
1232	0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
1233	0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c,
1234	0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73,
1235	0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69,
1236	0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d,
1237	0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x51, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
1238	0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39,
1239	0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41,
1240	0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f,
1241	0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x64,
1242	0x75, 0x63, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x13, 0x4c, 0x69,
1243	0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
1244	0x74, 0x12, 0x3c, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
1245	0x09, 0x42, 0x24, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1e, 0x0a, 0x1c, 0x72, 0x65, 0x74, 0x61, 0x69,
1246	0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d,
1247	0x2f, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12,
1248	0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01,
1249	0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a,
1250	0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
1251	0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66,
1252	0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x6c,
1253	0x74, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b,
1254	0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1255	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61,
1256	0x73, 0x6b, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x22, 0x7b, 0x0a, 0x14,
1257	0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70,
1258	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73,
1259	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1260	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
1261	0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1262	0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74,
1263	0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74,
1264	0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x53, 0x65,
1265	0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
1266	0x74, 0x12, 0x42, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01,
1267	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c,
1268	0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72,
1269	0x6f, 0x64, 0x75, 0x63, 0x74, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65,
1270	0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x73,
1271	0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1272	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d,
1273	0x61, 0x73, 0x6b, 0x52, 0x07, 0x73, 0x65, 0x74, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x35, 0x0a, 0x08,
1274	0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
1275	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
1276	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x73, 0x65, 0x74, 0x54,
1277	0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73,
1278	0x73, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f,
1279	0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x49,
1280	0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
1281	0x22, 0x16, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79,
1282	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xf5, 0x01, 0x0a, 0x1b, 0x41, 0x64, 0x64,
1283	0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65,
1284	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64,
1285	0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41,
1286	0x1f, 0x0a, 0x1d, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1287	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1288	0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x74, 0x79, 0x70,
1289	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x74, 0x79,
1290	0x70, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18,
1291	0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x63,
1292	0x65, 0x49, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65,
1293	0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1294	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
1295	0x6d, 0x70, 0x52, 0x07, 0x61, 0x64, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x61,
1296	0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01,
1297	0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67,
1298	0x22, 0x1e, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65,
1299	0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
1300	0x22, 0x1e, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65,
1301	0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
1302	0x22, 0xfe, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69,
1303	0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
1304	0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01,
1305	0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0xe0, 0x41, 0x02, 0xfa, 0x41, 0x1f, 0x0a, 0x1d, 0x72, 0x65,
1306	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e,
1307	0x63, 0x6f, 0x6d, 0x2f, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f,
1308	0x64, 0x75, 0x63, 0x74, 0x12, 0x17, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
1309	0x28, 0x09, 0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a,
1310	0x09, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09,
1311	0x42, 0x03, 0xe0, 0x41, 0x02, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12,
1312	0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04,
1313	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
1314	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
1315	0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d,
1316	0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20,
1317	0x01, 0x28, 0x08, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6e,
1318	0x67, 0x22, 0x21, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69,
1319	0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61,
1320	0x64, 0x61, 0x74, 0x61, 0x22, 0x21, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75,
1321	0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52,
1322	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x8f, 0x12, 0x0a, 0x0e, 0x50, 0x72, 0x6f, 0x64,
1323	0x75, 0x63, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xcf, 0x01, 0x0a, 0x0d, 0x43,
1324	0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2c, 0x2e, 0x67,
1325	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
1326	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64,
1327	0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f,
1328	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
1329	0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x6f, 0x82, 0xd3, 0xe4,
1330	0x93, 0x02, 0x4d, 0x22, 0x42, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74,
1331	0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61,
1332	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73,
1333	0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70,
1334	0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x3a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
1335	0xda, 0x41, 0x19, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
1336	0x74, 0x2c, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x12, 0xac, 0x01, 0x0a,
1337	0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x29, 0x2e, 0x67, 0x6f,
1338	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69,
1339	0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52,
1340	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1341	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
1342	0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12,
1343	0x43, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65,
1344	0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f,
1345	0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61,
1346	0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73,
1347	0x2f, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0xbe, 0x01, 0x0a, 0x0c,
1348	0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x2b, 0x2e, 0x67,
1349	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
1350	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
1351	0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
1352	0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e,
1353	0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52,
1354	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12,
1355	0x42, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f,
1356	0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
1357	0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62,
1358	0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75,
1359	0x63, 0x74, 0x73, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0xd2, 0x01, 0x0a,
1360	0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x2c,
1361	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
1362	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x72,
1363	0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67,
1364	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
1365	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x72, 0x82,
1366	0xd3, 0xe4, 0x93, 0x02, 0x56, 0x32, 0x4b, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x64,
1367	0x75, 0x63, 0x74, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74,
1368	0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f,
1369	0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63,
1370	0x68, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x2a,
1371	0x2a, 0x7d, 0x3a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0xda, 0x41, 0x13, 0x70, 0x72,
1372	0x6f, 0x64, 0x75, 0x63, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73,
1373	0x6b, 0x12, 0xa9, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64,
1374	0x75, 0x63, 0x74, 0x12, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f,
1375	0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c,
1376	0x65, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
1377	0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
1378	0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02,
1379	0x45, 0x2a, 0x43, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f,
1380	0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
1381	0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62,
1382	0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
1383	0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x8e, 0x02,
1384	0x0a, 0x0e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73,
1385	0x12, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e,
1386	0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74,
1387	0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
1388	0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e,
1389	0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xad,
1390	0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x22, 0x49, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x61,
1391	0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f,
1392	0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61,
1393	0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f,
1394	0x2a, 0x7d, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x3a, 0x69, 0x6d, 0x70, 0x6f,
1395	0x72, 0x74, 0x3a, 0x01, 0x2a, 0xca, 0x41, 0x56, 0x0a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1396	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1397	0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52,
1398	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1399	0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e,
1400	0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xb4,
1401	0x02, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12,
1402	0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72,
1403	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65,
1404	0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67,
1405	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e,
1406	0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x82, 0xd3,
1407	0xe4, 0x93, 0x02, 0x5f, 0x22, 0x5a, 0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x69, 0x6e, 0x76, 0x65, 0x6e,
1408	0x74, 0x6f, 0x72, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
1409	0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a,
1410	0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e,
1411	0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f,
1412	0x2a, 0x2a, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79,
1413	0x3a, 0x01, 0x2a, 0xda, 0x41, 0x12, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2c,
1414	0x73, 0x65, 0x74, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0xca, 0x41, 0x5a, 0x0a, 0x2b, 0x67, 0x6f, 0x6f,
1415	0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c,
1416	0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79,
1417	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1418	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1419	0x2e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4d, 0x65, 0x74,
1420	0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0xca, 0x02, 0x0a, 0x14, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c,
1421	0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x33,
1422	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
1423	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69,
1424	0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
1425	0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e,
1426	0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69,
1427	0x6f, 0x6e, 0x22, 0xdd, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x22, 0x5b, 0x2f, 0x76, 0x32,
1428	0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63,
1429	0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a,
1430	0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62, 0x72, 0x61, 0x6e,
1431	0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f,
1432	0x2a, 0x2a, 0x7d, 0x3a, 0x61, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65,
1433	0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0xda, 0x41, 0x07, 0x70, 0x72,
1434	0x6f, 0x64, 0x75, 0x63, 0x74, 0xca, 0x41, 0x6a, 0x0a, 0x33, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1435	0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32,
1436	0x2e, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50,
1437	0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x67,
1438	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61,
1439	0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c,
1440	0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
1441	0x74, 0x61, 0x12, 0xd9, 0x02, 0x0a, 0x17, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c,
1442	0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x12, 0x36,
1443	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65,
1444	0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75,
1445	0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52,
1446	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1447	0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72,
1448	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x22, 0x5e,
1449	0x2f, 0x76, 0x32, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x3d, 0x70, 0x72, 0x6f,
1450	0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
1451	0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x2a, 0x2f, 0x62,
1452	0x72, 0x61, 0x6e, 0x63, 0x68, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63,
1453	0x74, 0x73, 0x2f, 0x2a, 0x2a, 0x7d, 0x3a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c,
1454	0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01,
1455	0x2a, 0xda, 0x41, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0xca, 0x41, 0x70, 0x0a, 0x36,
1456	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74,
1457	0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c,
1458	0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65,
1459	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63,
1460	0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x2e, 0x52,
1461	0x65, 0x6d, 0x6f, 0x76, 0x65, 0x46, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x6d, 0x65, 0x6e, 0x74,
1462	0x50, 0x6c, 0x61, 0x63, 0x65, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x49,
1463	0xca, 0x41, 0x15, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
1464	0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73,
1465	0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69,
1466	0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64,
1467	0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0xc8, 0x01, 0x0a, 0x1a, 0x63, 0x6f,
1468	0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x72,
1469	0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x76, 0x32, 0x42, 0x13, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
1470	0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
1471	0x3c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f,
1472	0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67,
1473	0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x72, 0x65, 0x74,
1474	0x61, 0x69, 0x6c, 0x2f, 0x76, 0x32, 0x3b, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6c, 0xa2, 0x02, 0x06,
1475	0x52, 0x45, 0x54, 0x41, 0x49, 0x4c, 0xaa, 0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
1476	0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, 0x56, 0x32, 0xca,
1477	0x02, 0x16, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x52,
1478	0x65, 0x74, 0x61, 0x69, 0x6c, 0x5c, 0x56, 0x32, 0xea, 0x02, 0x19, 0x47, 0x6f, 0x6f, 0x67, 0x6c,
1479	0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x52, 0x65, 0x74, 0x61, 0x69, 0x6c,
1480	0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
1481}
1482
1483var (
1484	file_google_cloud_retail_v2_product_service_proto_rawDescOnce sync.Once
1485	file_google_cloud_retail_v2_product_service_proto_rawDescData = file_google_cloud_retail_v2_product_service_proto_rawDesc
1486)
1487
1488func file_google_cloud_retail_v2_product_service_proto_rawDescGZIP() []byte {
1489	file_google_cloud_retail_v2_product_service_proto_rawDescOnce.Do(func() {
1490		file_google_cloud_retail_v2_product_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_retail_v2_product_service_proto_rawDescData)
1491	})
1492	return file_google_cloud_retail_v2_product_service_proto_rawDescData
1493}
1494
1495var file_google_cloud_retail_v2_product_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15)
1496var file_google_cloud_retail_v2_product_service_proto_goTypes = []interface{}{
1497	(*CreateProductRequest)(nil),            // 0: google.cloud.retail.v2.CreateProductRequest
1498	(*GetProductRequest)(nil),               // 1: google.cloud.retail.v2.GetProductRequest
1499	(*UpdateProductRequest)(nil),            // 2: google.cloud.retail.v2.UpdateProductRequest
1500	(*DeleteProductRequest)(nil),            // 3: google.cloud.retail.v2.DeleteProductRequest
1501	(*ListProductsRequest)(nil),             // 4: google.cloud.retail.v2.ListProductsRequest
1502	(*ListProductsResponse)(nil),            // 5: google.cloud.retail.v2.ListProductsResponse
1503	(*SetInventoryRequest)(nil),             // 6: google.cloud.retail.v2.SetInventoryRequest
1504	(*SetInventoryMetadata)(nil),            // 7: google.cloud.retail.v2.SetInventoryMetadata
1505	(*SetInventoryResponse)(nil),            // 8: google.cloud.retail.v2.SetInventoryResponse
1506	(*AddFulfillmentPlacesRequest)(nil),     // 9: google.cloud.retail.v2.AddFulfillmentPlacesRequest
1507	(*AddFulfillmentPlacesMetadata)(nil),    // 10: google.cloud.retail.v2.AddFulfillmentPlacesMetadata
1508	(*AddFulfillmentPlacesResponse)(nil),    // 11: google.cloud.retail.v2.AddFulfillmentPlacesResponse
1509	(*RemoveFulfillmentPlacesRequest)(nil),  // 12: google.cloud.retail.v2.RemoveFulfillmentPlacesRequest
1510	(*RemoveFulfillmentPlacesMetadata)(nil), // 13: google.cloud.retail.v2.RemoveFulfillmentPlacesMetadata
1511	(*RemoveFulfillmentPlacesResponse)(nil), // 14: google.cloud.retail.v2.RemoveFulfillmentPlacesResponse
1512	(*Product)(nil),                         // 15: google.cloud.retail.v2.Product
1513	(*fieldmaskpb.FieldMask)(nil),           // 16: google.protobuf.FieldMask
1514	(*timestamppb.Timestamp)(nil),           // 17: google.protobuf.Timestamp
1515	(*ImportProductsRequest)(nil),           // 18: google.cloud.retail.v2.ImportProductsRequest
1516	(*emptypb.Empty)(nil),                   // 19: google.protobuf.Empty
1517	(*longrunning.Operation)(nil),           // 20: google.longrunning.Operation
1518}
1519var file_google_cloud_retail_v2_product_service_proto_depIdxs = []int32{
1520	15, // 0: google.cloud.retail.v2.CreateProductRequest.product:type_name -> google.cloud.retail.v2.Product
1521	15, // 1: google.cloud.retail.v2.UpdateProductRequest.product:type_name -> google.cloud.retail.v2.Product
1522	16, // 2: google.cloud.retail.v2.UpdateProductRequest.update_mask:type_name -> google.protobuf.FieldMask
1523	16, // 3: google.cloud.retail.v2.ListProductsRequest.read_mask:type_name -> google.protobuf.FieldMask
1524	15, // 4: google.cloud.retail.v2.ListProductsResponse.products:type_name -> google.cloud.retail.v2.Product
1525	15, // 5: google.cloud.retail.v2.SetInventoryRequest.inventory:type_name -> google.cloud.retail.v2.Product
1526	16, // 6: google.cloud.retail.v2.SetInventoryRequest.set_mask:type_name -> google.protobuf.FieldMask
1527	17, // 7: google.cloud.retail.v2.SetInventoryRequest.set_time:type_name -> google.protobuf.Timestamp
1528	17, // 8: google.cloud.retail.v2.AddFulfillmentPlacesRequest.add_time:type_name -> google.protobuf.Timestamp
1529	17, // 9: google.cloud.retail.v2.RemoveFulfillmentPlacesRequest.remove_time:type_name -> google.protobuf.Timestamp
1530	0,  // 10: google.cloud.retail.v2.ProductService.CreateProduct:input_type -> google.cloud.retail.v2.CreateProductRequest
1531	1,  // 11: google.cloud.retail.v2.ProductService.GetProduct:input_type -> google.cloud.retail.v2.GetProductRequest
1532	4,  // 12: google.cloud.retail.v2.ProductService.ListProducts:input_type -> google.cloud.retail.v2.ListProductsRequest
1533	2,  // 13: google.cloud.retail.v2.ProductService.UpdateProduct:input_type -> google.cloud.retail.v2.UpdateProductRequest
1534	3,  // 14: google.cloud.retail.v2.ProductService.DeleteProduct:input_type -> google.cloud.retail.v2.DeleteProductRequest
1535	18, // 15: google.cloud.retail.v2.ProductService.ImportProducts:input_type -> google.cloud.retail.v2.ImportProductsRequest
1536	6,  // 16: google.cloud.retail.v2.ProductService.SetInventory:input_type -> google.cloud.retail.v2.SetInventoryRequest
1537	9,  // 17: google.cloud.retail.v2.ProductService.AddFulfillmentPlaces:input_type -> google.cloud.retail.v2.AddFulfillmentPlacesRequest
1538	12, // 18: google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces:input_type -> google.cloud.retail.v2.RemoveFulfillmentPlacesRequest
1539	15, // 19: google.cloud.retail.v2.ProductService.CreateProduct:output_type -> google.cloud.retail.v2.Product
1540	15, // 20: google.cloud.retail.v2.ProductService.GetProduct:output_type -> google.cloud.retail.v2.Product
1541	5,  // 21: google.cloud.retail.v2.ProductService.ListProducts:output_type -> google.cloud.retail.v2.ListProductsResponse
1542	15, // 22: google.cloud.retail.v2.ProductService.UpdateProduct:output_type -> google.cloud.retail.v2.Product
1543	19, // 23: google.cloud.retail.v2.ProductService.DeleteProduct:output_type -> google.protobuf.Empty
1544	20, // 24: google.cloud.retail.v2.ProductService.ImportProducts:output_type -> google.longrunning.Operation
1545	20, // 25: google.cloud.retail.v2.ProductService.SetInventory:output_type -> google.longrunning.Operation
1546	20, // 26: google.cloud.retail.v2.ProductService.AddFulfillmentPlaces:output_type -> google.longrunning.Operation
1547	20, // 27: google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces:output_type -> google.longrunning.Operation
1548	19, // [19:28] is the sub-list for method output_type
1549	10, // [10:19] is the sub-list for method input_type
1550	10, // [10:10] is the sub-list for extension type_name
1551	10, // [10:10] is the sub-list for extension extendee
1552	0,  // [0:10] is the sub-list for field type_name
1553}
1554
1555func init() { file_google_cloud_retail_v2_product_service_proto_init() }
1556func file_google_cloud_retail_v2_product_service_proto_init() {
1557	if File_google_cloud_retail_v2_product_service_proto != nil {
1558		return
1559	}
1560	file_google_cloud_retail_v2_common_proto_init()
1561	file_google_cloud_retail_v2_import_config_proto_init()
1562	file_google_cloud_retail_v2_product_proto_init()
1563	file_google_cloud_retail_v2_purge_config_proto_init()
1564	if !protoimpl.UnsafeEnabled {
1565		file_google_cloud_retail_v2_product_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
1566			switch v := v.(*CreateProductRequest); i {
1567			case 0:
1568				return &v.state
1569			case 1:
1570				return &v.sizeCache
1571			case 2:
1572				return &v.unknownFields
1573			default:
1574				return nil
1575			}
1576		}
1577		file_google_cloud_retail_v2_product_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
1578			switch v := v.(*GetProductRequest); i {
1579			case 0:
1580				return &v.state
1581			case 1:
1582				return &v.sizeCache
1583			case 2:
1584				return &v.unknownFields
1585			default:
1586				return nil
1587			}
1588		}
1589		file_google_cloud_retail_v2_product_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
1590			switch v := v.(*UpdateProductRequest); i {
1591			case 0:
1592				return &v.state
1593			case 1:
1594				return &v.sizeCache
1595			case 2:
1596				return &v.unknownFields
1597			default:
1598				return nil
1599			}
1600		}
1601		file_google_cloud_retail_v2_product_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
1602			switch v := v.(*DeleteProductRequest); i {
1603			case 0:
1604				return &v.state
1605			case 1:
1606				return &v.sizeCache
1607			case 2:
1608				return &v.unknownFields
1609			default:
1610				return nil
1611			}
1612		}
1613		file_google_cloud_retail_v2_product_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
1614			switch v := v.(*ListProductsRequest); i {
1615			case 0:
1616				return &v.state
1617			case 1:
1618				return &v.sizeCache
1619			case 2:
1620				return &v.unknownFields
1621			default:
1622				return nil
1623			}
1624		}
1625		file_google_cloud_retail_v2_product_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
1626			switch v := v.(*ListProductsResponse); i {
1627			case 0:
1628				return &v.state
1629			case 1:
1630				return &v.sizeCache
1631			case 2:
1632				return &v.unknownFields
1633			default:
1634				return nil
1635			}
1636		}
1637		file_google_cloud_retail_v2_product_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
1638			switch v := v.(*SetInventoryRequest); i {
1639			case 0:
1640				return &v.state
1641			case 1:
1642				return &v.sizeCache
1643			case 2:
1644				return &v.unknownFields
1645			default:
1646				return nil
1647			}
1648		}
1649		file_google_cloud_retail_v2_product_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
1650			switch v := v.(*SetInventoryMetadata); i {
1651			case 0:
1652				return &v.state
1653			case 1:
1654				return &v.sizeCache
1655			case 2:
1656				return &v.unknownFields
1657			default:
1658				return nil
1659			}
1660		}
1661		file_google_cloud_retail_v2_product_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
1662			switch v := v.(*SetInventoryResponse); i {
1663			case 0:
1664				return &v.state
1665			case 1:
1666				return &v.sizeCache
1667			case 2:
1668				return &v.unknownFields
1669			default:
1670				return nil
1671			}
1672		}
1673		file_google_cloud_retail_v2_product_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
1674			switch v := v.(*AddFulfillmentPlacesRequest); i {
1675			case 0:
1676				return &v.state
1677			case 1:
1678				return &v.sizeCache
1679			case 2:
1680				return &v.unknownFields
1681			default:
1682				return nil
1683			}
1684		}
1685		file_google_cloud_retail_v2_product_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
1686			switch v := v.(*AddFulfillmentPlacesMetadata); i {
1687			case 0:
1688				return &v.state
1689			case 1:
1690				return &v.sizeCache
1691			case 2:
1692				return &v.unknownFields
1693			default:
1694				return nil
1695			}
1696		}
1697		file_google_cloud_retail_v2_product_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
1698			switch v := v.(*AddFulfillmentPlacesResponse); i {
1699			case 0:
1700				return &v.state
1701			case 1:
1702				return &v.sizeCache
1703			case 2:
1704				return &v.unknownFields
1705			default:
1706				return nil
1707			}
1708		}
1709		file_google_cloud_retail_v2_product_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
1710			switch v := v.(*RemoveFulfillmentPlacesRequest); i {
1711			case 0:
1712				return &v.state
1713			case 1:
1714				return &v.sizeCache
1715			case 2:
1716				return &v.unknownFields
1717			default:
1718				return nil
1719			}
1720		}
1721		file_google_cloud_retail_v2_product_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
1722			switch v := v.(*RemoveFulfillmentPlacesMetadata); i {
1723			case 0:
1724				return &v.state
1725			case 1:
1726				return &v.sizeCache
1727			case 2:
1728				return &v.unknownFields
1729			default:
1730				return nil
1731			}
1732		}
1733		file_google_cloud_retail_v2_product_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
1734			switch v := v.(*RemoveFulfillmentPlacesResponse); i {
1735			case 0:
1736				return &v.state
1737			case 1:
1738				return &v.sizeCache
1739			case 2:
1740				return &v.unknownFields
1741			default:
1742				return nil
1743			}
1744		}
1745	}
1746	type x struct{}
1747	out := protoimpl.TypeBuilder{
1748		File: protoimpl.DescBuilder{
1749			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
1750			RawDescriptor: file_google_cloud_retail_v2_product_service_proto_rawDesc,
1751			NumEnums:      0,
1752			NumMessages:   15,
1753			NumExtensions: 0,
1754			NumServices:   1,
1755		},
1756		GoTypes:           file_google_cloud_retail_v2_product_service_proto_goTypes,
1757		DependencyIndexes: file_google_cloud_retail_v2_product_service_proto_depIdxs,
1758		MessageInfos:      file_google_cloud_retail_v2_product_service_proto_msgTypes,
1759	}.Build()
1760	File_google_cloud_retail_v2_product_service_proto = out.File
1761	file_google_cloud_retail_v2_product_service_proto_rawDesc = nil
1762	file_google_cloud_retail_v2_product_service_proto_goTypes = nil
1763	file_google_cloud_retail_v2_product_service_proto_depIdxs = nil
1764}
1765
1766// Reference imports to suppress errors if they are not otherwise used.
1767var _ context.Context
1768var _ grpc.ClientConnInterface
1769
1770// This is a compile-time assertion to ensure that this generated file
1771// is compatible with the grpc package it is being compiled against.
1772const _ = grpc.SupportPackageIsVersion6
1773
1774// ProductServiceClient is the client API for ProductService service.
1775//
1776// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
1777type ProductServiceClient interface {
1778	// Creates a [Product][google.cloud.retail.v2.Product].
1779	CreateProduct(ctx context.Context, in *CreateProductRequest, opts ...grpc.CallOption) (*Product, error)
1780	// Gets a [Product][google.cloud.retail.v2.Product].
1781	GetProduct(ctx context.Context, in *GetProductRequest, opts ...grpc.CallOption) (*Product, error)
1782	// Gets a list of [Product][google.cloud.retail.v2.Product]s.
1783	ListProducts(ctx context.Context, in *ListProductsRequest, opts ...grpc.CallOption) (*ListProductsResponse, error)
1784	// Updates a [Product][google.cloud.retail.v2.Product].
1785	UpdateProduct(ctx context.Context, in *UpdateProductRequest, opts ...grpc.CallOption) (*Product, error)
1786	// Deletes a [Product][google.cloud.retail.v2.Product].
1787	DeleteProduct(ctx context.Context, in *DeleteProductRequest, opts ...grpc.CallOption) (*emptypb.Empty, error)
1788	// Bulk import of multiple [Product][google.cloud.retail.v2.Product]s.
1789	//
1790	// Request processing may be synchronous. No partial updating is supported.
1791	// Non-existing items are created.
1792	//
1793	// Note that it is possible for a subset of the
1794	// [Product][google.cloud.retail.v2.Product]s to be successfully updated.
1795	ImportProducts(ctx context.Context, in *ImportProductsRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1796	// Updates inventory information for a
1797	// [Product][google.cloud.retail.v2.Product] while respecting the last update
1798	// timestamps of each inventory field.
1799	//
1800	// This process is asynchronous and does not require the
1801	// [Product][google.cloud.retail.v2.Product] to exist before updating
1802	// fulfillment information. If the request is valid, the update will be
1803	// enqueued and processed downstream. As a consequence, when a response is
1804	// returned, updates are not immediately manifested in the
1805	// [Product][google.cloud.retail.v2.Product] queried by
1806	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1807	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1808	//
1809	// When inventory is updated with
1810	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] and
1811	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct], the
1812	// specified inventory field value(s) will overwrite any existing value(s)
1813	// while ignoring the last update time for this field. Furthermore, the last
1814	// update time for the specified inventory fields will be overwritten to the
1815	// time of the
1816	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] or
1817	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct]
1818	// request.
1819	//
1820	// If no inventory fields are set in
1821	// [CreateProductRequest.product][google.cloud.retail.v2.CreateProductRequest.product],
1822	// then any pre-existing inventory information for this product will be used.
1823	//
1824	// If no inventory fields are set in [UpdateProductRequest.set_mask][],
1825	// then any existing inventory information will be preserved.
1826	//
1827	// Pre-existing inventory information can only be updated with
1828	// [SetInventory][google.cloud.retail.v2.ProductService.SetInventory],
1829	// [AddFulfillmentPlaces][google.cloud.retail.v2.ProductService.AddFulfillmentPlaces],
1830	// and
1831	// [RemoveFulfillmentPlaces][google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces].
1832	//
1833	// This feature is only available for users who have Retail Search enabled.
1834	// Please submit a form [here](https://cloud.google.com/contact) to contact
1835	// cloud sales if you are interested in using Retail Search.
1836	SetInventory(ctx context.Context, in *SetInventoryRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1837	// Incrementally adds place IDs to
1838	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
1839	//
1840	// This process is asynchronous and does not require the
1841	// [Product][google.cloud.retail.v2.Product] to exist before updating
1842	// fulfillment information. If the request is valid, the update will be
1843	// enqueued and processed downstream. As a consequence, when a response is
1844	// returned, the added place IDs are not immediately manifested in the
1845	// [Product][google.cloud.retail.v2.Product] queried by
1846	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1847	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1848	//
1849	// This feature is only available for users who have Retail Search enabled.
1850	// Please submit a form [here](https://cloud.google.com/contact) to contact
1851	// cloud sales if you are interested in using Retail Search.
1852	AddFulfillmentPlaces(ctx context.Context, in *AddFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1853	// Incrementally removes place IDs from a
1854	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
1855	//
1856	// This process is asynchronous and does not require the
1857	// [Product][google.cloud.retail.v2.Product] to exist before updating
1858	// fulfillment information. If the request is valid, the update will be
1859	// enqueued and processed downstream. As a consequence, when a response is
1860	// returned, the removed place IDs are not immediately manifested in the
1861	// [Product][google.cloud.retail.v2.Product] queried by
1862	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1863	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1864	//
1865	// This feature is only available for users who have Retail Search enabled.
1866	// Please submit a form [here](https://cloud.google.com/contact) to contact
1867	// cloud sales if you are interested in using Retail Search.
1868	RemoveFulfillmentPlaces(ctx context.Context, in *RemoveFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error)
1869}
1870
1871type productServiceClient struct {
1872	cc grpc.ClientConnInterface
1873}
1874
1875func NewProductServiceClient(cc grpc.ClientConnInterface) ProductServiceClient {
1876	return &productServiceClient{cc}
1877}
1878
1879func (c *productServiceClient) CreateProduct(ctx context.Context, in *CreateProductRequest, opts ...grpc.CallOption) (*Product, error) {
1880	out := new(Product)
1881	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/CreateProduct", in, out, opts...)
1882	if err != nil {
1883		return nil, err
1884	}
1885	return out, nil
1886}
1887
1888func (c *productServiceClient) GetProduct(ctx context.Context, in *GetProductRequest, opts ...grpc.CallOption) (*Product, error) {
1889	out := new(Product)
1890	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/GetProduct", in, out, opts...)
1891	if err != nil {
1892		return nil, err
1893	}
1894	return out, nil
1895}
1896
1897func (c *productServiceClient) ListProducts(ctx context.Context, in *ListProductsRequest, opts ...grpc.CallOption) (*ListProductsResponse, error) {
1898	out := new(ListProductsResponse)
1899	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/ListProducts", in, out, opts...)
1900	if err != nil {
1901		return nil, err
1902	}
1903	return out, nil
1904}
1905
1906func (c *productServiceClient) UpdateProduct(ctx context.Context, in *UpdateProductRequest, opts ...grpc.CallOption) (*Product, error) {
1907	out := new(Product)
1908	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/UpdateProduct", in, out, opts...)
1909	if err != nil {
1910		return nil, err
1911	}
1912	return out, nil
1913}
1914
1915func (c *productServiceClient) DeleteProduct(ctx context.Context, in *DeleteProductRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) {
1916	out := new(emptypb.Empty)
1917	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/DeleteProduct", in, out, opts...)
1918	if err != nil {
1919		return nil, err
1920	}
1921	return out, nil
1922}
1923
1924func (c *productServiceClient) ImportProducts(ctx context.Context, in *ImportProductsRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1925	out := new(longrunning.Operation)
1926	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/ImportProducts", in, out, opts...)
1927	if err != nil {
1928		return nil, err
1929	}
1930	return out, nil
1931}
1932
1933func (c *productServiceClient) SetInventory(ctx context.Context, in *SetInventoryRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1934	out := new(longrunning.Operation)
1935	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/SetInventory", in, out, opts...)
1936	if err != nil {
1937		return nil, err
1938	}
1939	return out, nil
1940}
1941
1942func (c *productServiceClient) AddFulfillmentPlaces(ctx context.Context, in *AddFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1943	out := new(longrunning.Operation)
1944	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/AddFulfillmentPlaces", in, out, opts...)
1945	if err != nil {
1946		return nil, err
1947	}
1948	return out, nil
1949}
1950
1951func (c *productServiceClient) RemoveFulfillmentPlaces(ctx context.Context, in *RemoveFulfillmentPlacesRequest, opts ...grpc.CallOption) (*longrunning.Operation, error) {
1952	out := new(longrunning.Operation)
1953	err := c.cc.Invoke(ctx, "/google.cloud.retail.v2.ProductService/RemoveFulfillmentPlaces", in, out, opts...)
1954	if err != nil {
1955		return nil, err
1956	}
1957	return out, nil
1958}
1959
1960// ProductServiceServer is the server API for ProductService service.
1961type ProductServiceServer interface {
1962	// Creates a [Product][google.cloud.retail.v2.Product].
1963	CreateProduct(context.Context, *CreateProductRequest) (*Product, error)
1964	// Gets a [Product][google.cloud.retail.v2.Product].
1965	GetProduct(context.Context, *GetProductRequest) (*Product, error)
1966	// Gets a list of [Product][google.cloud.retail.v2.Product]s.
1967	ListProducts(context.Context, *ListProductsRequest) (*ListProductsResponse, error)
1968	// Updates a [Product][google.cloud.retail.v2.Product].
1969	UpdateProduct(context.Context, *UpdateProductRequest) (*Product, error)
1970	// Deletes a [Product][google.cloud.retail.v2.Product].
1971	DeleteProduct(context.Context, *DeleteProductRequest) (*emptypb.Empty, error)
1972	// Bulk import of multiple [Product][google.cloud.retail.v2.Product]s.
1973	//
1974	// Request processing may be synchronous. No partial updating is supported.
1975	// Non-existing items are created.
1976	//
1977	// Note that it is possible for a subset of the
1978	// [Product][google.cloud.retail.v2.Product]s to be successfully updated.
1979	ImportProducts(context.Context, *ImportProductsRequest) (*longrunning.Operation, error)
1980	// Updates inventory information for a
1981	// [Product][google.cloud.retail.v2.Product] while respecting the last update
1982	// timestamps of each inventory field.
1983	//
1984	// This process is asynchronous and does not require the
1985	// [Product][google.cloud.retail.v2.Product] to exist before updating
1986	// fulfillment information. If the request is valid, the update will be
1987	// enqueued and processed downstream. As a consequence, when a response is
1988	// returned, updates are not immediately manifested in the
1989	// [Product][google.cloud.retail.v2.Product] queried by
1990	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
1991	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
1992	//
1993	// When inventory is updated with
1994	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] and
1995	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct], the
1996	// specified inventory field value(s) will overwrite any existing value(s)
1997	// while ignoring the last update time for this field. Furthermore, the last
1998	// update time for the specified inventory fields will be overwritten to the
1999	// time of the
2000	// [CreateProduct][google.cloud.retail.v2.ProductService.CreateProduct] or
2001	// [UpdateProduct][google.cloud.retail.v2.ProductService.UpdateProduct]
2002	// request.
2003	//
2004	// If no inventory fields are set in
2005	// [CreateProductRequest.product][google.cloud.retail.v2.CreateProductRequest.product],
2006	// then any pre-existing inventory information for this product will be used.
2007	//
2008	// If no inventory fields are set in [UpdateProductRequest.set_mask][],
2009	// then any existing inventory information will be preserved.
2010	//
2011	// Pre-existing inventory information can only be updated with
2012	// [SetInventory][google.cloud.retail.v2.ProductService.SetInventory],
2013	// [AddFulfillmentPlaces][google.cloud.retail.v2.ProductService.AddFulfillmentPlaces],
2014	// and
2015	// [RemoveFulfillmentPlaces][google.cloud.retail.v2.ProductService.RemoveFulfillmentPlaces].
2016	//
2017	// This feature is only available for users who have Retail Search enabled.
2018	// Please submit a form [here](https://cloud.google.com/contact) to contact
2019	// cloud sales if you are interested in using Retail Search.
2020	SetInventory(context.Context, *SetInventoryRequest) (*longrunning.Operation, error)
2021	// Incrementally adds place IDs to
2022	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
2023	//
2024	// This process is asynchronous and does not require the
2025	// [Product][google.cloud.retail.v2.Product] to exist before updating
2026	// fulfillment information. If the request is valid, the update will be
2027	// enqueued and processed downstream. As a consequence, when a response is
2028	// returned, the added place IDs are not immediately manifested in the
2029	// [Product][google.cloud.retail.v2.Product] queried by
2030	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
2031	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
2032	//
2033	// This feature is only available for users who have Retail Search enabled.
2034	// Please submit a form [here](https://cloud.google.com/contact) to contact
2035	// cloud sales if you are interested in using Retail Search.
2036	AddFulfillmentPlaces(context.Context, *AddFulfillmentPlacesRequest) (*longrunning.Operation, error)
2037	// Incrementally removes place IDs from a
2038	// [Product.fulfillment_info.place_ids][google.cloud.retail.v2.FulfillmentInfo.place_ids].
2039	//
2040	// This process is asynchronous and does not require the
2041	// [Product][google.cloud.retail.v2.Product] to exist before updating
2042	// fulfillment information. If the request is valid, the update will be
2043	// enqueued and processed downstream. As a consequence, when a response is
2044	// returned, the removed place IDs are not immediately manifested in the
2045	// [Product][google.cloud.retail.v2.Product] queried by
2046	// [GetProduct][google.cloud.retail.v2.ProductService.GetProduct] or
2047	// [ListProducts][google.cloud.retail.v2.ProductService.ListProducts].
2048	//
2049	// This feature is only available for users who have Retail Search enabled.
2050	// Please submit a form [here](https://cloud.google.com/contact) to contact
2051	// cloud sales if you are interested in using Retail Search.
2052	RemoveFulfillmentPlaces(context.Context, *RemoveFulfillmentPlacesRequest) (*longrunning.Operation, error)
2053}
2054
2055// UnimplementedProductServiceServer can be embedded to have forward compatible implementations.
2056type UnimplementedProductServiceServer struct {
2057}
2058
2059func (*UnimplementedProductServiceServer) CreateProduct(context.Context, *CreateProductRequest) (*Product, error) {
2060	return nil, status.Errorf(codes.Unimplemented, "method CreateProduct not implemented")
2061}
2062func (*UnimplementedProductServiceServer) GetProduct(context.Context, *GetProductRequest) (*Product, error) {
2063	return nil, status.Errorf(codes.Unimplemented, "method GetProduct not implemented")
2064}
2065func (*UnimplementedProductServiceServer) ListProducts(context.Context, *ListProductsRequest) (*ListProductsResponse, error) {
2066	return nil, status.Errorf(codes.Unimplemented, "method ListProducts not implemented")
2067}
2068func (*UnimplementedProductServiceServer) UpdateProduct(context.Context, *UpdateProductRequest) (*Product, error) {
2069	return nil, status.Errorf(codes.Unimplemented, "method UpdateProduct not implemented")
2070}
2071func (*UnimplementedProductServiceServer) DeleteProduct(context.Context, *DeleteProductRequest) (*emptypb.Empty, error) {
2072	return nil, status.Errorf(codes.Unimplemented, "method DeleteProduct not implemented")
2073}
2074func (*UnimplementedProductServiceServer) ImportProducts(context.Context, *ImportProductsRequest) (*longrunning.Operation, error) {
2075	return nil, status.Errorf(codes.Unimplemented, "method ImportProducts not implemented")
2076}
2077func (*UnimplementedProductServiceServer) SetInventory(context.Context, *SetInventoryRequest) (*longrunning.Operation, error) {
2078	return nil, status.Errorf(codes.Unimplemented, "method SetInventory not implemented")
2079}
2080func (*UnimplementedProductServiceServer) AddFulfillmentPlaces(context.Context, *AddFulfillmentPlacesRequest) (*longrunning.Operation, error) {
2081	return nil, status.Errorf(codes.Unimplemented, "method AddFulfillmentPlaces not implemented")
2082}
2083func (*UnimplementedProductServiceServer) RemoveFulfillmentPlaces(context.Context, *RemoveFulfillmentPlacesRequest) (*longrunning.Operation, error) {
2084	return nil, status.Errorf(codes.Unimplemented, "method RemoveFulfillmentPlaces not implemented")
2085}
2086
2087func RegisterProductServiceServer(s *grpc.Server, srv ProductServiceServer) {
2088	s.RegisterService(&_ProductService_serviceDesc, srv)
2089}
2090
2091func _ProductService_CreateProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2092	in := new(CreateProductRequest)
2093	if err := dec(in); err != nil {
2094		return nil, err
2095	}
2096	if interceptor == nil {
2097		return srv.(ProductServiceServer).CreateProduct(ctx, in)
2098	}
2099	info := &grpc.UnaryServerInfo{
2100		Server:     srv,
2101		FullMethod: "/google.cloud.retail.v2.ProductService/CreateProduct",
2102	}
2103	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2104		return srv.(ProductServiceServer).CreateProduct(ctx, req.(*CreateProductRequest))
2105	}
2106	return interceptor(ctx, in, info, handler)
2107}
2108
2109func _ProductService_GetProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2110	in := new(GetProductRequest)
2111	if err := dec(in); err != nil {
2112		return nil, err
2113	}
2114	if interceptor == nil {
2115		return srv.(ProductServiceServer).GetProduct(ctx, in)
2116	}
2117	info := &grpc.UnaryServerInfo{
2118		Server:     srv,
2119		FullMethod: "/google.cloud.retail.v2.ProductService/GetProduct",
2120	}
2121	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2122		return srv.(ProductServiceServer).GetProduct(ctx, req.(*GetProductRequest))
2123	}
2124	return interceptor(ctx, in, info, handler)
2125}
2126
2127func _ProductService_ListProducts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2128	in := new(ListProductsRequest)
2129	if err := dec(in); err != nil {
2130		return nil, err
2131	}
2132	if interceptor == nil {
2133		return srv.(ProductServiceServer).ListProducts(ctx, in)
2134	}
2135	info := &grpc.UnaryServerInfo{
2136		Server:     srv,
2137		FullMethod: "/google.cloud.retail.v2.ProductService/ListProducts",
2138	}
2139	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2140		return srv.(ProductServiceServer).ListProducts(ctx, req.(*ListProductsRequest))
2141	}
2142	return interceptor(ctx, in, info, handler)
2143}
2144
2145func _ProductService_UpdateProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2146	in := new(UpdateProductRequest)
2147	if err := dec(in); err != nil {
2148		return nil, err
2149	}
2150	if interceptor == nil {
2151		return srv.(ProductServiceServer).UpdateProduct(ctx, in)
2152	}
2153	info := &grpc.UnaryServerInfo{
2154		Server:     srv,
2155		FullMethod: "/google.cloud.retail.v2.ProductService/UpdateProduct",
2156	}
2157	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2158		return srv.(ProductServiceServer).UpdateProduct(ctx, req.(*UpdateProductRequest))
2159	}
2160	return interceptor(ctx, in, info, handler)
2161}
2162
2163func _ProductService_DeleteProduct_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2164	in := new(DeleteProductRequest)
2165	if err := dec(in); err != nil {
2166		return nil, err
2167	}
2168	if interceptor == nil {
2169		return srv.(ProductServiceServer).DeleteProduct(ctx, in)
2170	}
2171	info := &grpc.UnaryServerInfo{
2172		Server:     srv,
2173		FullMethod: "/google.cloud.retail.v2.ProductService/DeleteProduct",
2174	}
2175	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2176		return srv.(ProductServiceServer).DeleteProduct(ctx, req.(*DeleteProductRequest))
2177	}
2178	return interceptor(ctx, in, info, handler)
2179}
2180
2181func _ProductService_ImportProducts_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2182	in := new(ImportProductsRequest)
2183	if err := dec(in); err != nil {
2184		return nil, err
2185	}
2186	if interceptor == nil {
2187		return srv.(ProductServiceServer).ImportProducts(ctx, in)
2188	}
2189	info := &grpc.UnaryServerInfo{
2190		Server:     srv,
2191		FullMethod: "/google.cloud.retail.v2.ProductService/ImportProducts",
2192	}
2193	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2194		return srv.(ProductServiceServer).ImportProducts(ctx, req.(*ImportProductsRequest))
2195	}
2196	return interceptor(ctx, in, info, handler)
2197}
2198
2199func _ProductService_SetInventory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2200	in := new(SetInventoryRequest)
2201	if err := dec(in); err != nil {
2202		return nil, err
2203	}
2204	if interceptor == nil {
2205		return srv.(ProductServiceServer).SetInventory(ctx, in)
2206	}
2207	info := &grpc.UnaryServerInfo{
2208		Server:     srv,
2209		FullMethod: "/google.cloud.retail.v2.ProductService/SetInventory",
2210	}
2211	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2212		return srv.(ProductServiceServer).SetInventory(ctx, req.(*SetInventoryRequest))
2213	}
2214	return interceptor(ctx, in, info, handler)
2215}
2216
2217func _ProductService_AddFulfillmentPlaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2218	in := new(AddFulfillmentPlacesRequest)
2219	if err := dec(in); err != nil {
2220		return nil, err
2221	}
2222	if interceptor == nil {
2223		return srv.(ProductServiceServer).AddFulfillmentPlaces(ctx, in)
2224	}
2225	info := &grpc.UnaryServerInfo{
2226		Server:     srv,
2227		FullMethod: "/google.cloud.retail.v2.ProductService/AddFulfillmentPlaces",
2228	}
2229	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2230		return srv.(ProductServiceServer).AddFulfillmentPlaces(ctx, req.(*AddFulfillmentPlacesRequest))
2231	}
2232	return interceptor(ctx, in, info, handler)
2233}
2234
2235func _ProductService_RemoveFulfillmentPlaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
2236	in := new(RemoveFulfillmentPlacesRequest)
2237	if err := dec(in); err != nil {
2238		return nil, err
2239	}
2240	if interceptor == nil {
2241		return srv.(ProductServiceServer).RemoveFulfillmentPlaces(ctx, in)
2242	}
2243	info := &grpc.UnaryServerInfo{
2244		Server:     srv,
2245		FullMethod: "/google.cloud.retail.v2.ProductService/RemoveFulfillmentPlaces",
2246	}
2247	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
2248		return srv.(ProductServiceServer).RemoveFulfillmentPlaces(ctx, req.(*RemoveFulfillmentPlacesRequest))
2249	}
2250	return interceptor(ctx, in, info, handler)
2251}
2252
2253var _ProductService_serviceDesc = grpc.ServiceDesc{
2254	ServiceName: "google.cloud.retail.v2.ProductService",
2255	HandlerType: (*ProductServiceServer)(nil),
2256	Methods: []grpc.MethodDesc{
2257		{
2258			MethodName: "CreateProduct",
2259			Handler:    _ProductService_CreateProduct_Handler,
2260		},
2261		{
2262			MethodName: "GetProduct",
2263			Handler:    _ProductService_GetProduct_Handler,
2264		},
2265		{
2266			MethodName: "ListProducts",
2267			Handler:    _ProductService_ListProducts_Handler,
2268		},
2269		{
2270			MethodName: "UpdateProduct",
2271			Handler:    _ProductService_UpdateProduct_Handler,
2272		},
2273		{
2274			MethodName: "DeleteProduct",
2275			Handler:    _ProductService_DeleteProduct_Handler,
2276		},
2277		{
2278			MethodName: "ImportProducts",
2279			Handler:    _ProductService_ImportProducts_Handler,
2280		},
2281		{
2282			MethodName: "SetInventory",
2283			Handler:    _ProductService_SetInventory_Handler,
2284		},
2285		{
2286			MethodName: "AddFulfillmentPlaces",
2287			Handler:    _ProductService_AddFulfillmentPlaces_Handler,
2288		},
2289		{
2290			MethodName: "RemoveFulfillmentPlaces",
2291			Handler:    _ProductService_RemoveFulfillmentPlaces_Handler,
2292		},
2293	},
2294	Streams:  []grpc.StreamDesc{},
2295	Metadata: "google/cloud/retail/v2/product_service.proto",
2296}
2297