add labels
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Владимир Фёдоров 2024-05-30 03:03:39 +07:00
parent 59e60c4be1
commit 4335d14090
5 changed files with 304 additions and 201 deletions

View File

@ -84,6 +84,7 @@ message Product {
repeated Variant variants = 10; repeated Variant variants = 10;
repeated Characteristic characteristics = 11; repeated Characteristic characteristics = 11;
int64 category = 12; int64 category = 12;
repeated Label labels = 13;
} }
message GroupedProduct { message GroupedProduct {
@ -107,6 +108,10 @@ message Characteristic {
string value = 2; string value = 2;
} }
message Label {
string name = 1;
}
message GetProductReq { message GetProductReq {
int64 id = 1; int64 id = 1;
} }

View File

@ -22,6 +22,7 @@ type Product struct {
Variants []*crm.Variant `json:"variants"` Variants []*crm.Variant `json:"variants"`
Characteristics []*crm.Characteristic `json:"characteristics"` Characteristics []*crm.Characteristic `json:"characteristics"`
Category int64 `json:"category"` Category int64 `json:"category"`
Labels []*crm.Label `json:"labels"`
} }
var ( var (
@ -58,6 +59,7 @@ func (s *storageFile) GetPositions(_ context.Context, id int64) ([]*crm.Product,
res := make([]*crm.Product, 0, len(products)) res := make([]*crm.Product, 0, len(products))
for _, product := range products { for _, product := range products {
if id == 0 || product.Category == id { if id == 0 || product.Category == id {
s.enrichedProduct(product)
res = append(res, product) res = append(res, product)
} }
} }
@ -96,7 +98,9 @@ func (s *storageFile) GetProduct(_ context.Context, id int64) (*crm.Product, err
Variants: product.Variants, Variants: product.Variants,
Characteristics: product.Characteristics, Characteristics: product.Characteristics,
Category: product.Category, Category: product.Category,
Labels: product.Labels,
} }
s.enrichedProduct(res)
for _, p := range products { for _, p := range products {
if p.Group == product.Group { if p.Group == product.Group {
image := "" image := ""
@ -133,6 +137,12 @@ func (s *storageFile) GetBreadcrumbs(ctx context.Context, id int64) ([]*crm.Cate
return breadcrumbs, nil return breadcrumbs, nil
} }
func (s *storageFile) enrichedProduct(product *crm.Product) {
if len(product.Variants) > 1 {
product.Labels = append(product.Labels, &crm.Label{Name: "Оптом дешевле"})
}
}
func getBreadcrumbs(categories []*crm.Category, id int64) []*crm.Category { func getBreadcrumbs(categories []*crm.Category, id int64) []*crm.Category {
for _, category := range categories { for _, category := range categories {
if category.Id == id { if category.Id == id {

View File

@ -290,6 +290,7 @@ type Product struct {
Variants []*Variant `protobuf:"bytes,10,rep,name=variants,proto3" json:"variants,omitempty"` Variants []*Variant `protobuf:"bytes,10,rep,name=variants,proto3" json:"variants,omitempty"`
Characteristics []*Characteristic `protobuf:"bytes,11,rep,name=characteristics,proto3" json:"characteristics,omitempty"` Characteristics []*Characteristic `protobuf:"bytes,11,rep,name=characteristics,proto3" json:"characteristics,omitempty"`
Category int64 `protobuf:"varint,12,opt,name=category,proto3" json:"category,omitempty"` Category int64 `protobuf:"varint,12,opt,name=category,proto3" json:"category,omitempty"`
Labels []*Label `protobuf:"bytes,13,rep,name=labels,proto3" json:"labels,omitempty"`
} }
func (x *Product) Reset() { func (x *Product) Reset() {
@ -408,6 +409,13 @@ func (x *Product) GetCategory() int64 {
return 0 return 0
} }
func (x *Product) GetLabels() []*Label {
if x != nil {
return x.Labels
}
return nil
}
type GroupedProduct struct { type GroupedProduct struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -636,6 +644,53 @@ func (x *Characteristic) GetValue() string {
return "" return ""
} }
type Label struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
}
func (x *Label) Reset() {
*x = Label{}
if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Label) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Label) ProtoMessage() {}
func (x *Label) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Label.ProtoReflect.Descriptor instead.
func (*Label) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{10}
}
func (x *Label) GetName() string {
if x != nil {
return x.Name
}
return ""
}
type GetProductReq struct { type GetProductReq struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -647,7 +702,7 @@ type GetProductReq struct {
func (x *GetProductReq) Reset() { func (x *GetProductReq) Reset() {
*x = GetProductReq{} *x = GetProductReq{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[10] mi := &file_main_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -660,7 +715,7 @@ func (x *GetProductReq) String() string {
func (*GetProductReq) ProtoMessage() {} func (*GetProductReq) ProtoMessage() {}
func (x *GetProductReq) ProtoReflect() protoreflect.Message { func (x *GetProductReq) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[10] mi := &file_main_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -673,7 +728,7 @@ func (x *GetProductReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetProductReq.ProtoReflect.Descriptor instead. // Deprecated: Use GetProductReq.ProtoReflect.Descriptor instead.
func (*GetProductReq) Descriptor() ([]byte, []int) { func (*GetProductReq) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{10} return file_main_proto_rawDescGZIP(), []int{11}
} }
func (x *GetProductReq) GetId() int64 { func (x *GetProductReq) GetId() int64 {
@ -694,7 +749,7 @@ type ProductRsp struct {
func (x *ProductRsp) Reset() { func (x *ProductRsp) Reset() {
*x = ProductRsp{} *x = ProductRsp{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[11] mi := &file_main_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -707,7 +762,7 @@ func (x *ProductRsp) String() string {
func (*ProductRsp) ProtoMessage() {} func (*ProductRsp) ProtoMessage() {}
func (x *ProductRsp) ProtoReflect() protoreflect.Message { func (x *ProductRsp) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[11] mi := &file_main_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -720,7 +775,7 @@ func (x *ProductRsp) ProtoReflect() protoreflect.Message {
// Deprecated: Use ProductRsp.ProtoReflect.Descriptor instead. // Deprecated: Use ProductRsp.ProtoReflect.Descriptor instead.
func (*ProductRsp) Descriptor() ([]byte, []int) { func (*ProductRsp) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{11} return file_main_proto_rawDescGZIP(), []int{12}
} }
func (x *ProductRsp) GetProduct() *Product { func (x *ProductRsp) GetProduct() *Product {
@ -741,7 +796,7 @@ type GetBreadcrumbsReq struct {
func (x *GetBreadcrumbsReq) Reset() { func (x *GetBreadcrumbsReq) Reset() {
*x = GetBreadcrumbsReq{} *x = GetBreadcrumbsReq{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[12] mi := &file_main_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -754,7 +809,7 @@ func (x *GetBreadcrumbsReq) String() string {
func (*GetBreadcrumbsReq) ProtoMessage() {} func (*GetBreadcrumbsReq) ProtoMessage() {}
func (x *GetBreadcrumbsReq) ProtoReflect() protoreflect.Message { func (x *GetBreadcrumbsReq) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[12] mi := &file_main_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -767,7 +822,7 @@ func (x *GetBreadcrumbsReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetBreadcrumbsReq.ProtoReflect.Descriptor instead. // Deprecated: Use GetBreadcrumbsReq.ProtoReflect.Descriptor instead.
func (*GetBreadcrumbsReq) Descriptor() ([]byte, []int) { func (*GetBreadcrumbsReq) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{12} return file_main_proto_rawDescGZIP(), []int{13}
} }
func (x *GetBreadcrumbsReq) GetId() int64 { func (x *GetBreadcrumbsReq) GetId() int64 {
@ -788,7 +843,7 @@ type BreadcrumbsRsp struct {
func (x *BreadcrumbsRsp) Reset() { func (x *BreadcrumbsRsp) Reset() {
*x = BreadcrumbsRsp{} *x = BreadcrumbsRsp{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[13] mi := &file_main_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -801,7 +856,7 @@ func (x *BreadcrumbsRsp) String() string {
func (*BreadcrumbsRsp) ProtoMessage() {} func (*BreadcrumbsRsp) ProtoMessage() {}
func (x *BreadcrumbsRsp) ProtoReflect() protoreflect.Message { func (x *BreadcrumbsRsp) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[13] mi := &file_main_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -814,7 +869,7 @@ func (x *BreadcrumbsRsp) ProtoReflect() protoreflect.Message {
// Deprecated: Use BreadcrumbsRsp.ProtoReflect.Descriptor instead. // Deprecated: Use BreadcrumbsRsp.ProtoReflect.Descriptor instead.
func (*BreadcrumbsRsp) Descriptor() ([]byte, []int) { func (*BreadcrumbsRsp) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{13} return file_main_proto_rawDescGZIP(), []int{14}
} }
func (x *BreadcrumbsRsp) GetCategories() []*Category { func (x *BreadcrumbsRsp) GetCategories() []*Category {
@ -835,7 +890,7 @@ type OrderReq struct {
func (x *OrderReq) Reset() { func (x *OrderReq) Reset() {
*x = OrderReq{} *x = OrderReq{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[14] mi := &file_main_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -848,7 +903,7 @@ func (x *OrderReq) String() string {
func (*OrderReq) ProtoMessage() {} func (*OrderReq) ProtoMessage() {}
func (x *OrderReq) ProtoReflect() protoreflect.Message { func (x *OrderReq) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[14] mi := &file_main_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -861,7 +916,7 @@ func (x *OrderReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use OrderReq.ProtoReflect.Descriptor instead. // Deprecated: Use OrderReq.ProtoReflect.Descriptor instead.
func (*OrderReq) Descriptor() ([]byte, []int) { func (*OrderReq) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{14} return file_main_proto_rawDescGZIP(), []int{15}
} }
func (x *OrderReq) GetOrder() *Order { func (x *OrderReq) GetOrder() *Order {
@ -880,7 +935,7 @@ type OrderRsp struct {
func (x *OrderRsp) Reset() { func (x *OrderRsp) Reset() {
*x = OrderRsp{} *x = OrderRsp{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[15] mi := &file_main_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -893,7 +948,7 @@ func (x *OrderRsp) String() string {
func (*OrderRsp) ProtoMessage() {} func (*OrderRsp) ProtoMessage() {}
func (x *OrderRsp) ProtoReflect() protoreflect.Message { func (x *OrderRsp) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[15] mi := &file_main_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -906,7 +961,7 @@ func (x *OrderRsp) ProtoReflect() protoreflect.Message {
// Deprecated: Use OrderRsp.ProtoReflect.Descriptor instead. // Deprecated: Use OrderRsp.ProtoReflect.Descriptor instead.
func (*OrderRsp) Descriptor() ([]byte, []int) { func (*OrderRsp) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{15} return file_main_proto_rawDescGZIP(), []int{16}
} }
type Order struct { type Order struct {
@ -922,7 +977,7 @@ type Order struct {
func (x *Order) Reset() { func (x *Order) Reset() {
*x = Order{} *x = Order{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[16] mi := &file_main_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -935,7 +990,7 @@ func (x *Order) String() string {
func (*Order) ProtoMessage() {} func (*Order) ProtoMessage() {}
func (x *Order) ProtoReflect() protoreflect.Message { func (x *Order) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[16] mi := &file_main_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -948,7 +1003,7 @@ func (x *Order) ProtoReflect() protoreflect.Message {
// Deprecated: Use Order.ProtoReflect.Descriptor instead. // Deprecated: Use Order.ProtoReflect.Descriptor instead.
func (*Order) Descriptor() ([]byte, []int) { func (*Order) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{16} return file_main_proto_rawDescGZIP(), []int{17}
} }
func (x *Order) GetName() string { func (x *Order) GetName() string {
@ -984,7 +1039,7 @@ type OrderItem struct {
func (x *OrderItem) Reset() { func (x *OrderItem) Reset() {
*x = OrderItem{} *x = OrderItem{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[17] mi := &file_main_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -997,7 +1052,7 @@ func (x *OrderItem) String() string {
func (*OrderItem) ProtoMessage() {} func (*OrderItem) ProtoMessage() {}
func (x *OrderItem) ProtoReflect() protoreflect.Message { func (x *OrderItem) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[17] mi := &file_main_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1010,7 +1065,7 @@ func (x *OrderItem) ProtoReflect() protoreflect.Message {
// Deprecated: Use OrderItem.ProtoReflect.Descriptor instead. // Deprecated: Use OrderItem.ProtoReflect.Descriptor instead.
func (*OrderItem) Descriptor() ([]byte, []int) { func (*OrderItem) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{17} return file_main_proto_rawDescGZIP(), []int{18}
} }
func (x *OrderItem) GetProductId() int64 { func (x *OrderItem) GetProductId() int64 {
@ -1046,7 +1101,7 @@ type CardItem struct {
func (x *CardItem) Reset() { func (x *CardItem) Reset() {
*x = CardItem{} *x = CardItem{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[18] mi := &file_main_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1059,7 +1114,7 @@ func (x *CardItem) String() string {
func (*CardItem) ProtoMessage() {} func (*CardItem) ProtoMessage() {}
func (x *CardItem) ProtoReflect() protoreflect.Message { func (x *CardItem) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[18] mi := &file_main_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1072,7 +1127,7 @@ func (x *CardItem) ProtoReflect() protoreflect.Message {
// Deprecated: Use CardItem.ProtoReflect.Descriptor instead. // Deprecated: Use CardItem.ProtoReflect.Descriptor instead.
func (*CardItem) Descriptor() ([]byte, []int) { func (*CardItem) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{18} return file_main_proto_rawDescGZIP(), []int{19}
} }
func (x *CardItem) GetId() int64 { func (x *CardItem) GetId() int64 {
@ -1149,7 +1204,7 @@ type CardReq struct {
func (x *CardReq) Reset() { func (x *CardReq) Reset() {
*x = CardReq{} *x = CardReq{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[19] mi := &file_main_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1162,7 +1217,7 @@ func (x *CardReq) String() string {
func (*CardReq) ProtoMessage() {} func (*CardReq) ProtoMessage() {}
func (x *CardReq) ProtoReflect() protoreflect.Message { func (x *CardReq) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[19] mi := &file_main_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1175,7 +1230,7 @@ func (x *CardReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use CardReq.ProtoReflect.Descriptor instead. // Deprecated: Use CardReq.ProtoReflect.Descriptor instead.
func (*CardReq) Descriptor() ([]byte, []int) { func (*CardReq) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{19} return file_main_proto_rawDescGZIP(), []int{20}
} }
func (x *CardReq) GetItems() []*OrderItem { func (x *CardReq) GetItems() []*OrderItem {
@ -1196,7 +1251,7 @@ type CardRsp struct {
func (x *CardRsp) Reset() { func (x *CardRsp) Reset() {
*x = CardRsp{} *x = CardRsp{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[20] mi := &file_main_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1209,7 +1264,7 @@ func (x *CardRsp) String() string {
func (*CardRsp) ProtoMessage() {} func (*CardRsp) ProtoMessage() {}
func (x *CardRsp) ProtoReflect() protoreflect.Message { func (x *CardRsp) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[20] mi := &file_main_proto_msgTypes[21]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1222,7 +1277,7 @@ func (x *CardRsp) ProtoReflect() protoreflect.Message {
// Deprecated: Use CardRsp.ProtoReflect.Descriptor instead. // Deprecated: Use CardRsp.ProtoReflect.Descriptor instead.
func (*CardRsp) Descriptor() ([]byte, []int) { func (*CardRsp) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{20} return file_main_proto_rawDescGZIP(), []int{21}
} }
func (x *CardRsp) GetItems() []*CardItem { func (x *CardRsp) GetItems() []*CardItem {
@ -1243,7 +1298,7 @@ type GetImageReq struct {
func (x *GetImageReq) Reset() { func (x *GetImageReq) Reset() {
*x = GetImageReq{} *x = GetImageReq{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_main_proto_msgTypes[21] mi := &file_main_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1256,7 +1311,7 @@ func (x *GetImageReq) String() string {
func (*GetImageReq) ProtoMessage() {} func (*GetImageReq) ProtoMessage() {}
func (x *GetImageReq) ProtoReflect() protoreflect.Message { func (x *GetImageReq) ProtoReflect() protoreflect.Message {
mi := &file_main_proto_msgTypes[21] mi := &file_main_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1269,7 +1324,7 @@ func (x *GetImageReq) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetImageReq.ProtoReflect.Descriptor instead. // Deprecated: Use GetImageReq.ProtoReflect.Descriptor instead.
func (*GetImageReq) Descriptor() ([]byte, []int) { func (*GetImageReq) Descriptor() ([]byte, []int) {
return file_main_proto_rawDescGZIP(), []int{21} return file_main_proto_rawDescGZIP(), []int{22}
} }
func (x *GetImageReq) GetName() string { func (x *GetImageReq) GetName() string {
@ -1308,7 +1363,7 @@ var file_main_proto_rawDesc = []byte{
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x08, 0x70, 0x72, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x73, 0x70, 0x12, 0x2e, 0x0a, 0x08, 0x70, 0x72,
0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63,
0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x22, 0x9c, 0x03, 0x0a, 0x07, 0x50, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x22, 0xc6, 0x03, 0x0a, 0x07, 0x50,
0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65,
@ -1334,113 +1389,117 @@ var file_main_proto_rawDesc = []byte{
0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0f, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x52, 0x0f, 0x63, 0x68,
0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x1a, 0x0a, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x1a, 0x0a,
0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52,
0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x72, 0x6f, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x28, 0x0a, 0x06, 0x6c, 0x61, 0x62,
0x75, 0x70, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x72, 0x61, 0x62,
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62,
0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x65, 0x6c, 0x73, 0x22, 0x4c, 0x0a, 0x0e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x65, 0x64, 0x50, 0x72,
0x69, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0x54, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69,
0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x69,
0x03, 0x52, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67,
0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x22, 0x54, 0x0a, 0x07, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05,
0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x70, 0x72, 0x69,
0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x34, 0x0a, 0x63, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73,
0x08, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x34, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x65,
0x6c, 0x75, 0x65, 0x22, 0x3a, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x72, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
0x69, 0x73, 0x74, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x0a,
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x0e, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x69, 0x73, 0x74, 0x69, 0x63, 0x12,
0x1f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
0x22, 0x3a, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x73, 0x70, 0x12, 0x2c, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1b, 0x0a, 0x05, 0x4c, 0x61, 0x62,
0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x12, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x1f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f,
0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x23, 0x0a, 0x11, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
0x47, 0x65, 0x74, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x52, 0x65, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3a, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x64, 0x75,
0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x63, 0x74, 0x52, 0x73, 0x70, 0x12, 0x2c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
0x64, 0x22, 0x45, 0x0a, 0x0e, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63,
0x52, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x75, 0x63, 0x74, 0x22, 0x23, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63,
0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x61, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x32, 0x0a, 0x08, 0x4f, 0x72, 0x64, 0x65, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x45, 0x0a, 0x0e, 0x42, 0x72, 0x65, 0x61,
0x72, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x52, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x61,
0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13,
0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x0a, 0x0a, 0x08, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67,
0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x73, 0x70, 0x22, 0x5d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22,
0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x32, 0x0a, 0x08, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x05, 0x6f,
0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x72, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x72, 0x61,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x69, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72,
0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x61, 0x64, 0x65, 0x72, 0x22, 0x0a, 0x0a, 0x08, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x73, 0x70, 0x22,
0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x5d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x40, 0x0a, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05,
0x49, 0x74, 0x65, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x6e, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72,
0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd2, 0x01, 0x0a, 0x08, 0x43, 0x61, 0x64, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x40,
0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x0a, 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x70,
0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f,
0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x22, 0xd2, 0x01, 0x0a, 0x08, 0x43, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a,
0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a,
0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x07, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x61, 0x72, 0x74, 0x69, 0x63, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75,
0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x16, 0x0a,
0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x69,
0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x08, 0x20,
0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x35, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x76,
0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x12, 0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x69, 0x6e,
0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74,
0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a,
0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x34, 0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x52, 0x73, 0x70, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61,
0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x35, 0x0a, 0x07, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71,
0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x12, 0x2a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x47, 0x14, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64, 0x65,
0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x72, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x34, 0x0a, 0x07,
0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xe0, 0x43, 0x61, 0x72, 0x64, 0x52, 0x73, 0x70, 0x12, 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73,
0x04, 0x0a, 0x03, 0x43, 0x52, 0x4d, 0x12, 0x4f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63,
0x61, 0x6c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65,
0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x6d, 0x73, 0x22, 0x21, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65,
0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x6f, 0x67, 0x52, 0x73, 0x70, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x32, 0xe0, 0x04, 0x0a, 0x03, 0x43, 0x52, 0x4d, 0x12, 0x4f, 0x0a,
0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x5c, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x63, 0x72,
0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c,
0x63, 0x72, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72,
0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x6d, 0x2e, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x52, 0x73, 0x70, 0x22, 0x10, 0x82, 0xd3,
0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x73, 0x70, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x12, 0x5c,
0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a,
0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x55, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f,
0x75, 0x63, 0x74, 0x12, 0x18, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x63, 0x72, 0x61,
0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x52, 0x73, 0x70, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x12, 0x0f, 0x2f, 0x70, 0x6f,
0x74, 0x52, 0x73, 0x70, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x70, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x55, 0x0a, 0x0a,
0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x6d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x18, 0x2e, 0x63, 0x72, 0x61,
0x47, 0x65, 0x74, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x12, 0x1c, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d,
0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x73, 0x70, 0x22, 0x16, 0x82, 0xd3, 0xe4,
0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x7b,
0x75, 0x6d, 0x62, 0x73, 0x52, 0x73, 0x70, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x69, 0x64, 0x7d, 0x12, 0x6d, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63,
0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x12, 0x1c, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72,
0x62, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x12, 0x49, 0x0a, 0x05, 0x4f, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73,
0x72, 0x64, 0x65, 0x72, 0x12, 0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e,
0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x42, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d, 0x62, 0x73, 0x52, 0x73, 0x70, 0x22, 0x22,
0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x73, 0x70, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x22, 0x07, 0x2f, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x72, 0x65, 0x61, 0x64, 0x63, 0x72, 0x75, 0x6d,
0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x62, 0x73, 0x12, 0x49, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x13, 0x2e, 0x63, 0x72,
0x64, 0x12, 0x12, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71,
0x72, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x1a, 0x13, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x4f, 0x72, 0x64,
0x6d, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x73, 0x70, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x72, 0x52, 0x73, 0x70, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x05, 0x6f,
0x0e, 0x3a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x05, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x12, 0x72, 0x64, 0x65, 0x72, 0x22, 0x07, 0x2f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a,
0x50, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x16, 0x2e, 0x63, 0x72, 0x07, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x64, 0x12, 0x12, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73,
0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x63,
0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x43, 0x61, 0x72, 0x64, 0x52, 0x73, 0x70,
0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x3a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22,
0x10, 0x12, 0x0e, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x05, 0x2f, 0x63, 0x61, 0x72, 0x64, 0x12, 0x50, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x61,
0x7d, 0x42, 0x0e, 0x92, 0x41, 0x00, 0x5a, 0x09, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x67, 0x65, 0x12, 0x16, 0x2e, 0x63, 0x72, 0x61, 0x62, 0x73, 0x2e, 0x63, 0x72, 0x6d, 0x2e, 0x47,
0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x65, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x67, 0x6f, 0x6f,
0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79,
0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x69, 0x6d, 0x61, 0x67, 0x65,
0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x42, 0x0e, 0x92, 0x41, 0x00, 0x5a, 0x09, 0x70,
0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
@ -1455,7 +1514,7 @@ func file_main_proto_rawDescGZIP() []byte {
return file_main_proto_rawDescData return file_main_proto_rawDescData
} }
var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
var file_main_proto_goTypes = []interface{}{ var file_main_proto_goTypes = []interface{}{
(*GetCatalogReq)(nil), // 0: crabs.crm.GetCatalogReq (*GetCatalogReq)(nil), // 0: crabs.crm.GetCatalogReq
(*CatalogRsp)(nil), // 1: crabs.crm.CatalogRsp (*CatalogRsp)(nil), // 1: crabs.crm.CatalogRsp
@ -1467,19 +1526,20 @@ var file_main_proto_goTypes = []interface{}{
(*Variant)(nil), // 7: crabs.crm.Variant (*Variant)(nil), // 7: crabs.crm.Variant
(*Property)(nil), // 8: crabs.crm.Property (*Property)(nil), // 8: crabs.crm.Property
(*Characteristic)(nil), // 9: crabs.crm.Characteristic (*Characteristic)(nil), // 9: crabs.crm.Characteristic
(*GetProductReq)(nil), // 10: crabs.crm.GetProductReq (*Label)(nil), // 10: crabs.crm.Label
(*ProductRsp)(nil), // 11: crabs.crm.ProductRsp (*GetProductReq)(nil), // 11: crabs.crm.GetProductReq
(*GetBreadcrumbsReq)(nil), // 12: crabs.crm.GetBreadcrumbsReq (*ProductRsp)(nil), // 12: crabs.crm.ProductRsp
(*BreadcrumbsRsp)(nil), // 13: crabs.crm.BreadcrumbsRsp (*GetBreadcrumbsReq)(nil), // 13: crabs.crm.GetBreadcrumbsReq
(*OrderReq)(nil), // 14: crabs.crm.OrderReq (*BreadcrumbsRsp)(nil), // 14: crabs.crm.BreadcrumbsRsp
(*OrderRsp)(nil), // 15: crabs.crm.OrderRsp (*OrderReq)(nil), // 15: crabs.crm.OrderReq
(*Order)(nil), // 16: crabs.crm.Order (*OrderRsp)(nil), // 16: crabs.crm.OrderRsp
(*OrderItem)(nil), // 17: crabs.crm.OrderItem (*Order)(nil), // 17: crabs.crm.Order
(*CardItem)(nil), // 18: crabs.crm.CardItem (*OrderItem)(nil), // 18: crabs.crm.OrderItem
(*CardReq)(nil), // 19: crabs.crm.CardReq (*CardItem)(nil), // 19: crabs.crm.CardItem
(*CardRsp)(nil), // 20: crabs.crm.CardRsp (*CardReq)(nil), // 20: crabs.crm.CardReq
(*GetImageReq)(nil), // 21: crabs.crm.GetImageReq (*CardRsp)(nil), // 21: crabs.crm.CardRsp
(*httpbody.HttpBody)(nil), // 22: google.api.HttpBody (*GetImageReq)(nil), // 22: crabs.crm.GetImageReq
(*httpbody.HttpBody)(nil), // 23: google.api.HttpBody
} }
var file_main_proto_depIdxs = []int32{ var file_main_proto_depIdxs = []int32{
2, // 0: crabs.crm.CatalogRsp.categories:type_name -> crabs.crm.Category 2, // 0: crabs.crm.CatalogRsp.categories:type_name -> crabs.crm.Category
@ -1488,32 +1548,33 @@ var file_main_proto_depIdxs = []int32{
6, // 3: crabs.crm.Product.grouped_products:type_name -> crabs.crm.GroupedProduct 6, // 3: crabs.crm.Product.grouped_products:type_name -> crabs.crm.GroupedProduct
7, // 4: crabs.crm.Product.variants:type_name -> crabs.crm.Variant 7, // 4: crabs.crm.Product.variants:type_name -> crabs.crm.Variant
9, // 5: crabs.crm.Product.characteristics:type_name -> crabs.crm.Characteristic 9, // 5: crabs.crm.Product.characteristics:type_name -> crabs.crm.Characteristic
8, // 6: crabs.crm.Variant.properties:type_name -> crabs.crm.Property 10, // 6: crabs.crm.Product.labels:type_name -> crabs.crm.Label
5, // 7: crabs.crm.ProductRsp.product:type_name -> crabs.crm.Product 8, // 7: crabs.crm.Variant.properties:type_name -> crabs.crm.Property
2, // 8: crabs.crm.BreadcrumbsRsp.categories:type_name -> crabs.crm.Category 5, // 8: crabs.crm.ProductRsp.product:type_name -> crabs.crm.Product
16, // 9: crabs.crm.OrderReq.order:type_name -> crabs.crm.Order 2, // 9: crabs.crm.BreadcrumbsRsp.categories:type_name -> crabs.crm.Category
17, // 10: crabs.crm.Order.items:type_name -> crabs.crm.OrderItem 17, // 10: crabs.crm.OrderReq.order:type_name -> crabs.crm.Order
17, // 11: crabs.crm.CardReq.items:type_name -> crabs.crm.OrderItem 18, // 11: crabs.crm.Order.items:type_name -> crabs.crm.OrderItem
18, // 12: crabs.crm.CardRsp.items:type_name -> crabs.crm.CardItem 18, // 12: crabs.crm.CardReq.items:type_name -> crabs.crm.OrderItem
0, // 13: crabs.crm.CRM.GetCatalog:input_type -> crabs.crm.GetCatalogReq 19, // 13: crabs.crm.CardRsp.items:type_name -> crabs.crm.CardItem
3, // 14: crabs.crm.CRM.GetPositions:input_type -> crabs.crm.GetPositionsReq 0, // 14: crabs.crm.CRM.GetCatalog:input_type -> crabs.crm.GetCatalogReq
10, // 15: crabs.crm.CRM.GetProduct:input_type -> crabs.crm.GetProductReq 3, // 15: crabs.crm.CRM.GetPositions:input_type -> crabs.crm.GetPositionsReq
12, // 16: crabs.crm.CRM.GetBreadcrumbs:input_type -> crabs.crm.GetBreadcrumbsReq 11, // 16: crabs.crm.CRM.GetProduct:input_type -> crabs.crm.GetProductReq
14, // 17: crabs.crm.CRM.Order:input_type -> crabs.crm.OrderReq 13, // 17: crabs.crm.CRM.GetBreadcrumbs:input_type -> crabs.crm.GetBreadcrumbsReq
19, // 18: crabs.crm.CRM.GetCard:input_type -> crabs.crm.CardReq 15, // 18: crabs.crm.CRM.Order:input_type -> crabs.crm.OrderReq
21, // 19: crabs.crm.CRM.GetImage:input_type -> crabs.crm.GetImageReq 20, // 19: crabs.crm.CRM.GetCard:input_type -> crabs.crm.CardReq
1, // 20: crabs.crm.CRM.GetCatalog:output_type -> crabs.crm.CatalogRsp 22, // 20: crabs.crm.CRM.GetImage:input_type -> crabs.crm.GetImageReq
4, // 21: crabs.crm.CRM.GetPositions:output_type -> crabs.crm.PositionsRsp 1, // 21: crabs.crm.CRM.GetCatalog:output_type -> crabs.crm.CatalogRsp
11, // 22: crabs.crm.CRM.GetProduct:output_type -> crabs.crm.ProductRsp 4, // 22: crabs.crm.CRM.GetPositions:output_type -> crabs.crm.PositionsRsp
13, // 23: crabs.crm.CRM.GetBreadcrumbs:output_type -> crabs.crm.BreadcrumbsRsp 12, // 23: crabs.crm.CRM.GetProduct:output_type -> crabs.crm.ProductRsp
15, // 24: crabs.crm.CRM.Order:output_type -> crabs.crm.OrderRsp 14, // 24: crabs.crm.CRM.GetBreadcrumbs:output_type -> crabs.crm.BreadcrumbsRsp
20, // 25: crabs.crm.CRM.GetCard:output_type -> crabs.crm.CardRsp 16, // 25: crabs.crm.CRM.Order:output_type -> crabs.crm.OrderRsp
22, // 26: crabs.crm.CRM.GetImage:output_type -> google.api.HttpBody 21, // 26: crabs.crm.CRM.GetCard:output_type -> crabs.crm.CardRsp
20, // [20:27] is the sub-list for method output_type 23, // 27: crabs.crm.CRM.GetImage:output_type -> google.api.HttpBody
13, // [13:20] is the sub-list for method input_type 21, // [21:28] is the sub-list for method output_type
13, // [13:13] is the sub-list for extension type_name 14, // [14:21] is the sub-list for method input_type
13, // [13:13] is the sub-list for extension extendee 14, // [14:14] is the sub-list for extension type_name
0, // [0:13] is the sub-list for field type_name 14, // [14:14] is the sub-list for extension extendee
0, // [0:14] is the sub-list for field type_name
} }
func init() { file_main_proto_init() } func init() { file_main_proto_init() }
@ -1643,7 +1704,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetProductReq); i { switch v := v.(*Label); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1655,7 +1716,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ProductRsp); i { switch v := v.(*GetProductReq); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1667,7 +1728,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetBreadcrumbsReq); i { switch v := v.(*ProductRsp); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1679,7 +1740,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BreadcrumbsRsp); i { switch v := v.(*GetBreadcrumbsReq); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1691,7 +1752,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OrderReq); i { switch v := v.(*BreadcrumbsRsp); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1703,7 +1764,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OrderRsp); i { switch v := v.(*OrderReq); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1715,7 +1776,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Order); i { switch v := v.(*OrderRsp); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1727,7 +1788,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OrderItem); i { switch v := v.(*Order); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1739,7 +1800,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CardItem); i { switch v := v.(*OrderItem); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1751,7 +1812,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CardReq); i { switch v := v.(*CardItem); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1763,7 +1824,7 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CardRsp); i { switch v := v.(*CardReq); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1775,6 +1836,18 @@ func file_main_proto_init() {
} }
} }
file_main_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { file_main_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*CardRsp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_main_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GetImageReq); i { switch v := v.(*GetImageReq); i {
case 0: case 0:
return &v.state return &v.state
@ -1793,7 +1866,7 @@ func file_main_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_main_proto_rawDesc, RawDescriptor: file_main_proto_rawDesc,
NumEnums: 0, NumEnums: 0,
NumMessages: 22, NumMessages: 23,
NumExtensions: 0, NumExtensions: 0,
NumServices: 1, NumServices: 1,
}, },

View File

@ -2,30 +2,30 @@
{ {
"id": 0, "id": 0,
"name": "Главная", "name": "Главная",
"uri": "/categories/0", "uri": "/positions/0",
"children": [ "children": [
{ {
"id": 1, "id": 1,
"name": "Пряники", "name": "Пряники",
"uri": "/categories/1", "uri": "/positions/1",
"children": [] "children": []
}, },
{ {
"id": 2, "id": 2,
"name": "Печенье бисквитное", "name": "Печенье бисквитное",
"uri": "/categories/2", "uri": "/positions/2",
"children": [] "children": []
}, },
{ {
"id": 3, "id": 3,
"name": "Печенье песочное", "name": "Печенье песочное",
"uri": "/categories/3", "uri": "/positions/3",
"children": [] "children": []
}, },
{ {
"id": 4, "id": 4,
"name": "Восточные сладости", "name": "Восточные сладости",
"uri": "/categories/4", "uri": "/positions/4",
"children": [] "children": []
} }
] ]

View File

@ -254,6 +254,14 @@
}, },
"description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged."
}, },
"crabscrmLabel": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"crabscrmOrder": { "crabscrmOrder": {
"type": "object", "type": "object",
"properties": { "properties": {
@ -478,6 +486,13 @@
"category": { "category": {
"type": "string", "type": "string",
"format": "int64" "format": "int64"
},
"labels": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/crabscrmLabel"
}
} }
} }
}, },