diff --git a/execution/Makefile b/execution/Makefile index 8d258d0379..6d475c6b50 100644 --- a/execution/Makefile +++ b/execution/Makefile @@ -21,6 +21,10 @@ format: lint: golangci-lint run +.PHONY: lint-fix +lint-fix: + golangci-lint run --fix + .PHONY: prepare-merge prepare-merge: format test diff --git a/v2/Makefile b/v2/Makefile index e916a2f3e5..7feccf7137 100644 --- a/v2/Makefile +++ b/v2/Makefile @@ -23,6 +23,11 @@ lint: golangci-lint run cd ../execution && make lint +.PHONY: lint-fix +lint-fix: + golangci-lint run --fix + cd ../execution && make lint-fix + .PHONY: prepare-merge prepare-merge: format test diff --git a/v2/pkg/astvisitor/visitor.go b/v2/pkg/astvisitor/visitor.go index ed659be4a4..8ac5bf5f6f 100644 --- a/v2/pkg/astvisitor/visitor.go +++ b/v2/pkg/astvisitor/visitor.go @@ -4043,15 +4043,15 @@ func (w *Walker) InRootField() bool { // an inline fragment. // It returns the inline fragment ref and true if the current field is inside of an inline fragment. // It returns -1 and false if the current field is not inside of an inline fragment. -func (w *Walker) ResolveInlineFragment() (int, bool) { +func (w *Walker) ResolveInlineFragment() int { if len(w.Ancestors) < 2 { - return ast.InvalidRef, false + return ast.InvalidRef } node := w.Ancestors[len(w.Ancestors)-2] if node.Kind != ast.NodeKindInlineFragment { - return ast.InvalidRef, false + return ast.InvalidRef } - return node.Ref, true + return node.Ref } diff --git a/v2/pkg/engine/datasource/grpc_datasource/compiler.go b/v2/pkg/engine/datasource/grpc_datasource/compiler.go index 5a17a43a17..5728bdd6cc 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/compiler.go +++ b/v2/pkg/engine/datasource/grpc_datasource/compiler.go @@ -21,53 +21,8 @@ const ( InvalidRef = -1 ) -// DataType represents the different types of data that can be stored in a protobuf field. -type DataType string - -// Protobuf data types supported by the compiler. -const ( - DataTypeString DataType = "string" // String type - DataTypeInt32 DataType = "int32" // 32-bit integer type - DataTypeInt64 DataType = "int64" // 64-bit integer type - DataTypeUint32 DataType = "uint32" // 32-bit unsigned integer type - DataTypeUint64 DataType = "uint64" // 64-bit unsigned integer type - DataTypeFloat DataType = "float" // 32-bit floating point type - DataTypeDouble DataType = "double" // 64-bit floating point type - DataTypeBool DataType = "bool" // Boolean type - DataTypeEnum DataType = "enum" // Enumeration type - DataTypeMessage DataType = "message" // Nested message type - DataTypeUnknown DataType = "" // Represents an unknown or unsupported type - DataTypeBytes DataType = "bytes" // Bytes type -) - -// dataTypeMap maps string representation of protobuf types to DataType constants. -var dataTypeMap = map[string]DataType{ - "string": DataTypeString, - "int32": DataTypeInt32, - "int64": DataTypeInt64, - "uint32": DataTypeUint32, - "uint64": DataTypeUint64, - "float": DataTypeFloat, - "double": DataTypeDouble, - "bool": DataTypeBool, - "bytes": DataTypeBytes, - "enum": DataTypeEnum, - "message": DataTypeMessage, -} - -// String returns the string representation of the DataType. -func (d DataType) String() string { - return string(d) -} - -// IsValid checks if the DataType is a valid protobuf type. -func (d DataType) IsValid() bool { - _, ok := dataTypeMap[string(d)] - return ok -} - -func fromGraphQLType(s string) DataType { - switch s { +func fromGraphQLType(s []byte) DataType { + switch string(s) { case "ID", "String": return DataTypeString case "Int": @@ -88,12 +43,12 @@ func fromGraphQLType(s string) DataType { // parseDataType converts a string type name to a DataType constant. // Returns DataTypeUnknown if the type is not recognized. -func parseDataType(name string) DataType { - if !dataTypeMap[name].IsValid() { +func parseDataType(kind protoref.Kind) DataType { + if _, ok := dataTypeMap[kind]; !ok { return DataTypeUnknown } - return dataTypeMap[name] + return dataTypeMap[kind] } type NodeKind int @@ -480,24 +435,20 @@ func (p *RPCCompiler) CompileFetches(graph *DependencyGraph, fetches []FetchItem func (p *RPCCompiler) CompileNode(graph *DependencyGraph, fetch FetchItem, inputData gjson.Result) (ServiceCall, error) { call := fetch.Plan - inputMessage, ok := p.doc.MessageByName(call.Request.Name) - if !ok { - return ServiceCall{}, fmt.Errorf("input message %s not found in document", call.Request.Name) - } - outputMessage, ok := p.doc.MessageByName(call.Response.Name) if !ok { return ServiceCall{}, fmt.Errorf("output message %s not found in document", call.Response.Name) } - request, err := p.newEmptyMessage(inputMessage) + response, err := p.newEmptyMessage(outputMessage) if err != nil { return ServiceCall{}, err } - response, err := p.newEmptyMessage(outputMessage) - if err != nil { - return ServiceCall{}, err + var request protoref.Message + inputMessage, ok := p.doc.MessageByName(call.Request.Name) + if !ok { + return ServiceCall{}, fmt.Errorf("input message %s not found in document", call.Request.Name) } switch call.Kind { @@ -519,6 +470,12 @@ func (p *RPCCompiler) CompileNode(graph *DependencyGraph, fetch FetchItem, input Skip: true, }, err } + + case CallKindRequired: + request, err = p.buildRequiredFieldsMessage(inputMessage, &call.Request, inputData) + if err != nil { + return ServiceCall{}, err + } } serviceName, ok := p.resolveServiceName(call) @@ -653,6 +610,109 @@ func (p *RPCCompiler) buildProtoMessageWithContext(inputMessage Message, rpcMess return rootMessage, nil } +// buildRequiredFieldsMessage builds a protobuf message from an RPCMessage definition +// and JSON data. It handles nested messages and repeated fields. +// +// Example: +// +// message RequireWarehouseStockHealthScoreByIdRequest { +// // RequireWarehouseStockHealthScoreByIdContext provides the context for the required fields method RequireWarehouseStockHealthScoreById. +// repeated RequireWarehouseStockHealthScoreByIdContext context = 1; +// } +// +// message RequireWarehouseStockHealthScoreByIdContext { +// LookupWarehouseByIdRequestKey key = 1; +// RequireWarehouseStockHealthScoreByIdFields fields = 2; +// } +func (p *RPCCompiler) buildRequiredFieldsMessage(inputMessage Message, rpcMessage *RPCMessage, data gjson.Result) (protoref.Message, error) { + if rpcMessage == nil { + return nil, fmt.Errorf("rpc message is nil") + } + + if p.doc.MessageRefByName(rpcMessage.Name) == InvalidRef { + return nil, fmt.Errorf("message %s not found in document", rpcMessage.Name) + } + + rootMessage := dynamicpb.NewMessage(inputMessage.Desc) + + contextSchemaField := inputMessage.GetField("context") + if contextSchemaField == nil { + return nil, fmt.Errorf("context field not found in message %s", inputMessage.Name) + } + + contextRPCField := rpcMessage.Fields.ByName(contextSchemaField.Name) + if contextRPCField == nil { + return nil, fmt.Errorf("context field not found in message %s", rpcMessage.Name) + } + + contextList := p.newEmptyListMessageByName(rootMessage, contextSchemaField.Name) + contextFieldMessage := contextRPCField.Message + + if contextFieldMessage == nil { + return nil, fmt.Errorf("context field message not found in message %s", inputMessage.Name) + } + + keyField := contextFieldMessage.Fields.ByName("key") + if keyField == nil { + return nil, fmt.Errorf("key field message not found in message %s", contextFieldMessage.Name) + } + + keyMessage, ok := p.doc.MessageByName(keyField.Message.Name) + if !ok { + return nil, fmt.Errorf("message %s not found in document", keyField.Message.Name) + } + + requiresSelectionField := contextFieldMessage.Fields.ByName("fields") + if requiresSelectionField == nil { + return nil, fmt.Errorf("fields field not found in message %s", contextFieldMessage.Name) + } + + requiresSelectionMessage, ok := p.doc.MessageByName(requiresSelectionField.Message.Name) + if !ok { + return nil, fmt.Errorf("message %s not found in document", requiresSelectionField.Message.Name) + } + + representationsValue := data.Get("representations") + if exists, isArray := representationsValue.Exists(), representationsValue.IsArray(); !exists || !isArray { + if !exists { + return nil, errors.New("representations field not found in data") + } + + if !isArray { + return nil, errors.New("invalid type for representations element, expected representations to be an array") + } + } + + representations := representationsValue.Array() + for _, representation := range representations { + element := contextList.NewElement() + msg := element.Message() + + keyMsg, err := p.buildProtoMessage(keyMessage, keyField.Message, representation) + if err != nil { + return nil, err + } + + reqMsg, err := p.buildProtoMessage(requiresSelectionMessage, requiresSelectionField.Message, representation) + if err != nil { + return nil, err + } + + if err := p.setMessageValue(msg, keyField.Name, protoref.ValueOfMessage(keyMsg)); err != nil { + return nil, err + } + + if err := p.setMessageValue(msg, requiresSelectionField.Name, protoref.ValueOfMessage(reqMsg)); err != nil { + return nil, err + } + + // build fields message + contextList.Append(element) + } + + return rootMessage, nil +} + func (p *RPCCompiler) resolveContextData(context FetchItem, contextField *RPCField) []map[string]protoref.Value { if context.ServiceCall == nil || context.ServiceCall.Output == nil { return []map[string]protoref.Value{} @@ -734,8 +794,8 @@ func (p *RPCCompiler) resolveListDataForPath(message protoref.List, fd protoref. } // resolveDataForPath resolves the data for a given path in a message. -func (p *RPCCompiler) resolveDataForPath(messsage protoref.Message, path ast.Path) []protoref.Value { - if !messsage.IsValid() { +func (p *RPCCompiler) resolveDataForPath(message protoref.Message, path ast.Path) []protoref.Value { + if !message.IsValid() { return nil } @@ -746,7 +806,7 @@ func (p *RPCCompiler) resolveDataForPath(messsage protoref.Message, path ast.Pat segment := path[0] if fn := segment.FieldName.String(); strings.HasPrefix(fn, "@") { - list := p.resolveUnderlyingList(messsage, fn) + list := p.resolveUnderlyingList(message, fn) result := make([]protoref.Value, 0, len(list)) for _, item := range list { @@ -756,7 +816,7 @@ func (p *RPCCompiler) resolveDataForPath(messsage protoref.Message, path ast.Pat return result } - field, fd := p.getMessageField(messsage, segment.FieldName.String()) + field, fd := p.getMessageField(message, segment.FieldName.String()) if !field.IsValid() { return nil } @@ -1136,7 +1196,7 @@ func (p *RPCCompiler) traverseList(rootMsg protoref.Message, level int, field *F } default: for _, element := range elements { - itemsField.Append(p.setValueForKind(DataType(itemsFieldDesc.Kind().String()), element)) + itemsField.Append(p.setValueForKind(parseDataType(itemsFieldDesc.Kind()), element)) } } @@ -1285,16 +1345,27 @@ func (p *RPCCompiler) parseMessageDefinitions(messages protoref.MessageDescripto protoMessage := messages.Get(i) message := Message{ - Name: string(protoMessage.Name()), + Name: p.fullMessageName(protoMessage), Desc: protoMessage, } extractedMessages = append(extractedMessages, message) + + if submessages := protoMessage.Messages(); submessages.Len() > 0 { + extractedMessages = append(extractedMessages, p.parseMessageDefinitions(submessages)...) + } + } return extractedMessages } +// fullMessageName returns the full name of the message omiting the package name. +// In our case don't need the fqn as we only have one package where we need to resolve the messages. +func (p *RPCCompiler) fullMessageName(m protoref.MessageDescriptor) string { + return strings.TrimPrefix(string(m.FullName()), p.doc.Package+".") +} + // enrichMessageData enriches the message data with the field information. func (p *RPCCompiler) enrichMessageData(ref int, m protoref.MessageDescriptor) { fields := make([]Field, m.Fields().Len()) @@ -1307,7 +1378,7 @@ func (p *RPCCompiler) enrichMessageData(ref int, m protoref.MessageDescriptor) { if f.Kind() == protoref.MessageKind { // Handle nested messages when they are recursive types - field.MessageRef = p.doc.MessageRefByName(string(f.Message().Name())) + field.MessageRef = p.doc.MessageRefByName(p.fullMessageName(f.Message())) } fields[i] = field @@ -1323,11 +1394,10 @@ func (p *RPCCompiler) enrichMessageData(ref int, m protoref.MessageDescriptor) { // parseField extracts information from a protobuf field descriptor. func (p *RPCCompiler) parseField(f protoref.FieldDescriptor) Field { name := string(f.Name()) - typeName := f.Kind().String() return Field{ Name: name, - Type: parseDataType(typeName), + Type: parseDataType(f.Kind()), Number: int32(f.Number()), Repeated: f.IsList(), Optional: f.Cardinality() == protoref.Optional, diff --git a/v2/pkg/engine/datasource/grpc_datasource/compiler_test.go b/v2/pkg/engine/datasource/grpc_datasource/compiler_test.go index e2e175c738..ccc8c07395 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/compiler_test.go +++ b/v2/pkg/engine/datasource/grpc_datasource/compiler_test.go @@ -465,3 +465,44 @@ func TestCompileNestedLists(t *testing.T) { require.Equal(t, "modifier2", modifiersList.Get(1).String()) } } + +func TestCompileNestedMessages(t *testing.T) { + const protoSchemaWithNestedMessages = ` + syntax = "proto3"; + package product.v1; + + option go_package = "grpc-graphql/pkg/proto/product/v1;productv1"; + + message MyMessage { + message NestedMessage { + string nested_data = 1; + } + + int32 first = 1; + NestedMessage second = 2; + } + + message SecondMessage { + message MyMessage { + message NestedMessage { + string nested_data = 1; + } + + NestedMessage nested_message = 1; + } + + string second_data = 1; + MyMessage third = 2; + } + ` + + compiler, err := NewProtoCompiler(protoSchemaWithNestedMessages, nil) + require.NoError(t, err) + + require.Equal(t, 5, len(compiler.doc.Messages)) + require.Equal(t, "MyMessage", compiler.doc.Messages[0].Name) + require.Equal(t, "MyMessage.NestedMessage", compiler.doc.Messages[1].Name) + require.Equal(t, "SecondMessage", compiler.doc.Messages[2].Name) + require.Equal(t, "SecondMessage.MyMessage", compiler.doc.Messages[3].Name) + require.Equal(t, "SecondMessage.MyMessage.NestedMessage", compiler.doc.Messages[4].Name) +} diff --git a/v2/pkg/engine/datasource/grpc_datasource/configuration.go b/v2/pkg/engine/datasource/grpc_datasource/configuration.go index 2a607d4a0e..6acf5bbec0 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/configuration.go +++ b/v2/pkg/engine/datasource/grpc_datasource/configuration.go @@ -75,6 +75,9 @@ type EntityRPCConfig struct { // Key is a list of field names that uniquely identify the entity Key string + + // RequiredFields is the configuration for the required fields method + RequiredFields RequiredFieldsRPCMapping } // FieldMapData defines the mapping between a GraphQL field and a gRPC field @@ -97,6 +100,17 @@ type ResolveRPCTypeField struct { Response string // The name of the response message type } +// RequiredFieldsRPCMapping defines the mapping between a federation @requires fields and the gRPC RPC configurations +type RequiredFieldsRPCMapping map[string]RequiredFieldsRPCTypeField + +// RequiredFieldsRPCTypeField defines the mapping between a federation @requires field and a gRPC RPC configuration +type RequiredFieldsRPCTypeField struct { + RPCConfig + + // TargetName is the name of the gRPC field that is used to store the required fields arguments + TargetName string +} + // FindFieldMapping finds the gRPC field name for a given GraphQL field name and type func (g *GRPCMapping) FindFieldMapping(typeName string, fieldName string) (string, bool) { if g == nil || g.Fields == nil { @@ -177,6 +191,22 @@ func (g *GRPCMapping) FindEntityRPCConfig(typeName, key string) (RPCConfig, bool return RPCConfig{}, false } +func (g *GRPCMapping) FindRequiredFieldsRPCConfig(typeName, key, field string) (RequiredFieldsRPCTypeField, bool) { + rpcConfig, ok := g.EntityRPCs[typeName] + if !ok { + return RequiredFieldsRPCTypeField{}, false + } + + for _, ei := range rpcConfig { + if compareKeyFields(ei.Key, key) { + requiredFieldMapping, found := ei.RequiredFields[field] + return requiredFieldMapping, found + } + } + + return RequiredFieldsRPCTypeField{}, false +} + // FindResolveTypeFieldMapping finds the gRPC field name for a given GraphQL field name and type func (g *GRPCMapping) FindResolveTypeFieldMapping(typeName, fieldName string) *ResolveRPCTypeField { if g == nil || g.ResolveRPCs == nil { diff --git a/v2/pkg/engine/datasource/grpc_datasource/datatype.go b/v2/pkg/engine/datasource/grpc_datasource/datatype.go new file mode 100644 index 0000000000..3a9180847b --- /dev/null +++ b/v2/pkg/engine/datasource/grpc_datasource/datatype.go @@ -0,0 +1,58 @@ +package grpcdatasource + +import protoref "google.golang.org/protobuf/reflect/protoreflect" + +// DataType represents the different types of data that can be stored in a protobuf field. +// +//go:generate stringer -type=DataType -trimprefix=DataType -output=datatype_string.go +type DataType int8 + +// Protobuf data types supported by the compiler. +// These values intentionally match the google.protobuf.FieldDescriptorProto.Type enum +// (exposed via protoref.Kind) for efficient conversion. The protobuf spec has been +// stable since 2008, so these values are unlikely to change. +const ( + DataTypeUnknown DataType = -1 // Represents an unknown or unsupported type + DataTypeDouble DataType = 1 // 64-bit floating point type (protoref.DoubleKind) + DataTypeFloat DataType = 2 // 32-bit floating point type (protoref.FloatKind) + DataTypeInt64 DataType = 3 // 64-bit integer type (protoref.Int64Kind) + DataTypeUint64 DataType = 4 // 64-bit unsigned integer type (protoref.Uint64Kind) + DataTypeInt32 DataType = 5 // 32-bit integer type (protoref.Int32Kind) + DataTypeBool DataType = 8 // Boolean type (protoref.BoolKind) + DataTypeString DataType = 9 // String type (protoref.StringKind) + DataTypeMessage DataType = 11 // Nested message type (protoref.MessageKind) + DataTypeBytes DataType = 12 // Bytes type (protoref.BytesKind) + DataTypeUint32 DataType = 13 // 32-bit unsigned integer type (protoref.Uint32Kind) + DataTypeEnum DataType = 14 // Enumeration type (protoref.EnumKind) +) + +// Compile-time assertions to ensure DataType values match protoref.Kind values. +// If the protoref library ever changes these values, compilation will fail here. +func _() { + _ = [1]struct{}{}[DataTypeDouble-DataType(protoref.DoubleKind)] + _ = [1]struct{}{}[DataTypeFloat-DataType(protoref.FloatKind)] + _ = [1]struct{}{}[DataTypeInt64-DataType(protoref.Int64Kind)] + _ = [1]struct{}{}[DataTypeUint64-DataType(protoref.Uint64Kind)] + _ = [1]struct{}{}[DataTypeInt32-DataType(protoref.Int32Kind)] + _ = [1]struct{}{}[DataTypeBool-DataType(protoref.BoolKind)] + _ = [1]struct{}{}[DataTypeString-DataType(protoref.StringKind)] + _ = [1]struct{}{}[DataTypeMessage-DataType(protoref.MessageKind)] + _ = [1]struct{}{}[DataTypeBytes-DataType(protoref.BytesKind)] + _ = [1]struct{}{}[DataTypeUint32-DataType(protoref.Uint32Kind)] + _ = [1]struct{}{}[DataTypeEnum-DataType(protoref.EnumKind)] +} + +// dataTypeMap maps protoref.Kind to DataType constants. +var dataTypeMap = map[protoref.Kind]DataType{ + protoref.StringKind: DataTypeString, + protoref.Int32Kind: DataTypeInt32, + protoref.Int64Kind: DataTypeInt64, + protoref.Uint32Kind: DataTypeUint32, + protoref.Uint64Kind: DataTypeUint64, + protoref.FloatKind: DataTypeFloat, + protoref.DoubleKind: DataTypeDouble, + protoref.BoolKind: DataTypeBool, + protoref.BytesKind: DataTypeBytes, + protoref.EnumKind: DataTypeEnum, + protoref.MessageKind: DataTypeMessage, +} diff --git a/v2/pkg/engine/datasource/grpc_datasource/datatype_string.go b/v2/pkg/engine/datasource/grpc_datasource/datatype_string.go new file mode 100644 index 0000000000..3b4b6da365 --- /dev/null +++ b/v2/pkg/engine/datasource/grpc_datasource/datatype_string.go @@ -0,0 +1,54 @@ +// Code generated by "stringer -type=DataType -trimprefix=DataType -output=datatype_string.go"; DO NOT EDIT. + +package grpcdatasource + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[DataTypeUnknown - -1] + _ = x[DataTypeDouble-1] + _ = x[DataTypeFloat-2] + _ = x[DataTypeInt64-3] + _ = x[DataTypeUint64-4] + _ = x[DataTypeInt32-5] + _ = x[DataTypeBool-8] + _ = x[DataTypeString-9] + _ = x[DataTypeMessage-11] + _ = x[DataTypeBytes-12] + _ = x[DataTypeUint32-13] + _ = x[DataTypeEnum-14] +} + +const ( + _DataType_name_0 = "Unknown" + _DataType_name_1 = "DoubleFloatInt64Uint64Int32" + _DataType_name_2 = "BoolString" + _DataType_name_3 = "MessageBytesUint32Enum" +) + +var ( + _DataType_index_1 = [...]uint8{0, 6, 11, 16, 22, 27} + _DataType_index_2 = [...]uint8{0, 4, 10} + _DataType_index_3 = [...]uint8{0, 7, 12, 18, 22} +) + +func (i DataType) String() string { + switch { + case i == -1: + return _DataType_name_0 + case 1 <= i && i <= 5: + i -= 1 + return _DataType_name_1[_DataType_index_1[i]:_DataType_index_1[i+1]] + case 8 <= i && i <= 9: + i -= 8 + return _DataType_name_2[_DataType_index_2[i]:_DataType_index_2[i+1]] + case 11 <= i && i <= 14: + i -= 11 + return _DataType_name_3[_DataType_index_3[i]:_DataType_index_3[i+1]] + default: + return "DataType(" + strconv.FormatInt(int64(i), 10) + ")" + } +} diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan.go index 5d523446d7..aa33442d55 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/execution_plan.go +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan.go @@ -20,10 +20,24 @@ const ( // fieldResolverDirectiveName is the name of the directive that is used to configure the resolver context. fieldResolverDirectiveName = "connect__fieldResolver" + // requiresDirectiveName specifies the name of the @requires federation directive. + requiresDirectiveName = "requires" + // typenameFieldName is the name of the field that is used to store the typename of the object. typenameFieldName = "__typename" ) +const ( + // resultFieldName is the name of the field that is used to store the result of the RPC call. + resultFieldName = "result" + // contextFieldName is the name of the field that is used to store the context of the RPC call. + contextFieldName = "context" + // fieldArgsFieldName is the name of the field that is used to store the field arguments of the RPC call. + fieldArgsFieldName = "field_args" + // requiresArgumentsFieldName is the name of the field that is used to store the required fields arguments of the RPC call. + requiresArgumentsFieldName = "fields" +) + // OneOfType represents the type of a oneof field in a protobuf message. // It can be either an interface or a union type. type OneOfType uint8 @@ -71,6 +85,9 @@ const ( CallKindEntity // CallKindResolve is a fetch operation for resolving field values. CallKindResolve + // CallKindRequired is a fetch operation which is similar to Resolve, but it can be executed in parallel. + // Required fields are indicated by the @requires federation directive. + CallKindRequired ) // RPCCall represents a single call to a gRPC service method. @@ -108,9 +125,6 @@ type RPCMessage struct { OneOfType OneOfType // MemberTypes provides the names of the types that are implemented by the Interface or Union MemberTypes []string - // Message represents the nested message type definition for complex fields. - // This enables recursive construction of nested protobuf message structures. - Message *RPCMessage } // IsOneOf checks if the message is a oneof field. @@ -356,7 +370,7 @@ func formatRPCMessage(sb *strings.Builder, message RPCMessage, indent int) { for _, field := range message.Fields { fmt.Fprintf(sb, "%s - Name: %s\n", indentStr, field.Name) - fmt.Fprintf(sb, "%s TypeName: %s\n", indentStr, field.ProtoTypeName) + fmt.Fprintf(sb, "%s TypeName: %s (%d)\n", indentStr, field.ProtoTypeName.String(), field.ProtoTypeName) fmt.Fprintf(sb, "%s Repeated: %v\n", indentStr, field.Repeated) fmt.Fprintf(sb, "%s JSONPath: %s\n", indentStr, field.JSONPath) fmt.Fprintf(sb, "%s ResolvePath: %s\n", indentStr, field.ResolvePath.String()) @@ -401,12 +415,12 @@ func (r *rpcPlanningContext) toDataType(t *ast.Type) DataType { // parseGraphQLType parses an ast.Type and returns the corresponding DataType. // It handles the different type kinds and non-null types. func (r *rpcPlanningContext) parseGraphQLType(t *ast.Type) DataType { - dt := r.definition.Input.ByteSliceString(t.Name) + dt := r.definition.Input.ByteSlice(t.Name) // Retrieve the node to check the kind - node, found := r.definition.NodeByNameStr(dt) + node, found := r.definition.NodeByName(dt) if !found { - return DataTypeUnknown + return fromGraphQLType(dt) } // For non-scalar types, return the corresponding DataType @@ -577,10 +591,9 @@ func (r *rpcPlanningContext) createListMetadata(typeRef int) (*ListMetadata, err // buildField builds a field from a field definition. // It handles lists, enums, and other types. -func (r *rpcPlanningContext) buildField(enclosingTypeNode ast.Node, fieldDef int, fieldName, fieldAlias string) (RPCField, error) { +func (r *rpcPlanningContext) buildField(parentTypeName string, fieldDef int, fieldName, fieldAlias string) (RPCField, error) { fieldDefType := r.definition.FieldDefinitionType(fieldDef) typeName := r.toDataType(&r.definition.Types[fieldDefType]) - parentTypeName := enclosingTypeNode.NameString(r.definition) field := RPCField{ Name: r.resolveFieldMapping(parentTypeName, fieldName), @@ -834,7 +847,7 @@ func (r *rpcPlanningContext) buildFieldMessage(fieldTypeNode ast.Node, fieldRef continue } - field, err := r.buildRequiredField(fieldTypeNode, fieldRef, fieldDefRef) + field, err := r.buildResolverField(fieldTypeNode, fieldRef, fieldDefRef) if err != nil { return nil, err } @@ -915,6 +928,11 @@ func (r *rpcPlanningContext) isFieldResolver(fieldDefRef int, isRootField bool) return r.definition.FieldDefinitionHasArgumentsDefinitions(fieldDefRef) } +// isRequiredField checks if a field is a required field. +func (r *rpcPlanningContext) isRequiredField(fieldDefRef int) bool { + return r.definition.FieldDefinitionHasNamedDirective(fieldDefRef, requiresDirectiveName) +} + // getCompositeType checks whether the node is an interface or union type. // It returns OneOfTypeNone for non-composite types. func (r *rpcPlanningContext) getCompositeType(node ast.Node) OneOfType { @@ -1112,26 +1130,35 @@ type resolveRPCCallConfig struct { fieldArgsMessage *RPCMessage } -// buildFieldResolverTypeMessage builds the message for a given field resolver type. +type buildFieldMessageConfig struct { + typeName string + fragmentType OneOfType + memberTypes []string + fragmentSelections []fragmentSelection + fieldsSelectionSetRef int + fieldRefs []int +} + +// buildMessageForField builds the message for a given field resolver type. // When a field resolver returns a complex or composite type, we need to build a message for the type. -func (r *rpcPlanningContext) buildFieldResolverTypeMessage(typeName string, resolverField *resolverField) (*RPCMessage, error) { +func (r *rpcPlanningContext) buildMessageForField(config buildFieldMessageConfig) (*RPCMessage, error) { message := &RPCMessage{ - Name: typeName, - OneOfType: resolverField.fragmentType, - MemberTypes: resolverField.memberTypes, + Name: config.typeName, + OneOfType: config.fragmentType, + MemberTypes: config.memberTypes, } // field resolvers which return a non scalar type must have a selection set. // If we don't have a selection set we return an error. - if len(resolverField.fragmentSelections) == 0 && resolverField.fieldsSelectionSetRef == ast.InvalidRef { + if len(config.fragmentSelections) == 0 && config.fieldsSelectionSetRef == ast.InvalidRef { return nil, errors.New("unable to resolve required fields: no fields selection set found") } // If the resolved field returns a composite type we need to handle the selection set for the inline fragment. - if len(resolverField.fragmentSelections) > 0 { - message.FragmentFields = make(RPCFieldSelectionSet, len(resolverField.fragmentSelections)) + if len(config.fragmentSelections) > 0 { + message.FragmentFields = make(RPCFieldSelectionSet, len(config.fragmentSelections)) - for _, fragmentSelection := range resolverField.fragmentSelections { + for _, fragmentSelection := range config.fragmentSelections { inlineFragmentTypeNode, found := r.definition.NodeByNameStr(fragmentSelection.typeName) if !found { return nil, fmt.Errorf("unable to build composite field: underlying fragment type node not found for type %s", fragmentSelection.typeName) @@ -1146,17 +1173,17 @@ func (r *rpcPlanningContext) buildFieldResolverTypeMessage(typeName string, reso } } - if resolverField.fieldsSelectionSetRef == ast.InvalidRef { + if config.fieldsSelectionSetRef == ast.InvalidRef { return message, nil } // If the resolved field does not return a composite type we handle the selection set for the required field. - parentTypeNode, found := r.definition.NodeByNameStr(typeName) + parentTypeNode, found := r.definition.NodeByNameStr(config.typeName) if !found { - return nil, fmt.Errorf("parent type node not found for type %s", typeName) + return nil, fmt.Errorf("parent type node not found for type %s", config.typeName) } - fieldRefs := r.operation.SelectionSetFieldRefs(resolverField.fieldsSelectionSetRef) + fieldRefs := r.operation.SelectionSetFieldRefs(config.fieldsSelectionSetRef) message.Fields = make(RPCFields, 0, len(fieldRefs)) for _, fieldRef := range fieldRefs { @@ -1173,7 +1200,7 @@ func (r *rpcPlanningContext) buildFieldResolverTypeMessage(typeName string, reso continue } - field, err := r.buildRequiredField(parentTypeNode, fieldRef, fieldDefRef) + field, err := r.buildResolverField(parentTypeNode, fieldRef, fieldDefRef) if err != nil { return nil, err } @@ -1185,8 +1212,13 @@ func (r *rpcPlanningContext) buildFieldResolverTypeMessage(typeName string, reso return message, nil } -func (r *rpcPlanningContext) buildRequiredField(typeNode ast.Node, fieldRef, fieldDefinitionRef int) (RPCField, error) { - field, err := r.buildField(typeNode, fieldDefinitionRef, r.operation.FieldNameString(fieldRef), r.operation.FieldAliasString(fieldRef)) +func (r *rpcPlanningContext) buildResolverField(typeNode ast.Node, fieldRef, fieldDefinitionRef int) (RPCField, error) { + field, err := r.buildField( + typeNode.NameString(r.definition), + fieldDefinitionRef, + r.operation.FieldNameString(fieldRef), + r.operation.FieldAliasString(fieldRef), + ) if err != nil { return RPCField{}, err } @@ -1225,7 +1257,13 @@ func (r *rpcPlanningContext) buildCompositeFields(inlineFragmentNode ast.Node, f continue } - field, err := r.buildField(inlineFragmentNode, fieldDefRef, r.operation.FieldNameString(fieldRef), r.operation.FieldAliasString(fieldRef)) + field, err := r.buildField( + inlineFragmentNode.NameString(r.definition), + fieldDefRef, + r.operation.FieldNameString(fieldRef), + r.operation.FieldAliasString(fieldRef), + ) + if err != nil { return nil, err } @@ -1263,8 +1301,134 @@ func (r *rpcPlanningContext) fieldDefinitionRefForType(fieldName, typeName strin } +// createRequiredFieldsRPCCalls creates a new call for each required field. +// It returns a list of calls which are needed to provide certain fields for the entity, which require data from the representation variables. +/* +message RequireWarehouseStockHealthScoreByIdRequest { + // RequireWarehouseStockHealthScoreByIdContext provides the context for the required fields method RequireWarehouseStockHealthScoreById. + repeated RequireWarehouseStockHealthScoreByIdContext context = 1; +} + +message RequireWarehouseStockHealthScoreByIdContext { + LookupWarehouseByIdRequestKey key = 1; + RequireWarehouseStockHealthScoreByIdFields fields = 2; +} + +message RequireWarehouseStockHealthScoreByIdResult { + double stock_health_score = 1; +} + +message RequireWarehouseStockHealthScoreByIdFields { + message RestockData { + string last_restock_date = 1; + } + + int32 inventory_count = 1; + RestockData restock_data = 2; +} +*/ +func (r *rpcPlanningContext) createRequiredFieldsRPCCalls(callIndex *int, subgraphName string, entityTypeName string, data entityConfigData) ([]RPCCall, error) { + calls := make([]RPCCall, 0, len(data.requiredFields)) + for _, requiredField := range data.requiredFields { + call, err := r.createRequiredFieldsRPCCall(*callIndex, subgraphName, entityTypeName, &requiredField, data) + if err != nil { + return nil, err + } + + *callIndex++ + calls = append(calls, call) + } + + return calls, nil +} + +// createRequiredFieldsRPCCall creates a new required fields RPC call for a given configuration. +func (r *rpcPlanningContext) createRequiredFieldsRPCCall(callIndex int, subgraphName, typeName string, requiredField *requiredField, data entityConfigData) (RPCCall, error) { + rpcConfig, exists := r.mapping.FindRequiredFieldsRPCConfig(typeName, data.keyFields, requiredField.fieldName) + if !exists { + return RPCCall{}, fmt.Errorf("required fields RPC config not found for type: %s, field: %s", typeName, requiredField.fieldName) + } + + fieldMessage := &RPCMessage{ + Name: rpcConfig.RPC + "Fields", + } + + fieldDefRef := r.fieldDefinitionRefForType(requiredField.fieldName, typeName) + if fieldDefRef == ast.InvalidRef { + return RPCCall{}, fmt.Errorf("unable to build required field: field definition not found for field %s", requiredField.fieldName) + } + + call := RPCCall{ + ID: callIndex, + ServiceName: r.resolveServiceName(subgraphName), + Kind: CallKindRequired, + MethodName: rpcConfig.RPC, + ResponsePath: ast.Path{ + {Kind: ast.FieldName, FieldName: []byte("_entities")}, + {Kind: ast.FieldName, FieldName: []byte(requiredField.fieldName)}, + }, + Request: RPCMessage{ + Name: rpcConfig.Request, + Fields: RPCFields{ + { + Name: contextFieldName, // Static name for the context field. + ProtoTypeName: DataTypeMessage, + JSONPath: "representations", + Repeated: true, + Message: &RPCMessage{ + Name: rpcConfig.RPC + "Context", + Fields: RPCFields{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: data.keyFieldMessage, + }, + { + Name: requiresArgumentsFieldName, + ProtoTypeName: DataTypeMessage, + Message: fieldMessage, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: rpcConfig.Response, + Fields: RPCFields{ + { + Name: resultFieldName, + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: resultFieldName, + Message: &RPCMessage{ + Name: rpcConfig.RPC + "Result", + Fields: RPCFields{requiredField.resultField}, + }, + }, + }, + }, + } + + walker := astvisitor.WalkerFromPool() + defer walker.Release() + + vis := newRequiredFieldsVisitor(walker, fieldMessage, r) + if err := vis.visit(r.definition, typeName, requiredField.selectionSet, requiredFieldVisitorConfig{ + referenceNestedMessages: true, + }); err != nil { + return RPCCall{}, err + } + + return call, nil +} + // createResolverRPCCalls creates a new call for each resolved field. func (r *rpcPlanningContext) createResolverRPCCalls(subgraphName string, resolvedFields []resolverField) ([]RPCCall, error) { + if len(resolvedFields) == 0 { + return nil, nil + } + // We need to create a new call for each resolved field. calls := make([]RPCCall, 0, len(resolvedFields)) @@ -1303,7 +1467,7 @@ func (r *rpcPlanningContext) createResolverRPCCalls(subgraphName string, resolve for i := range resolvedField.contextFields { field, err := r.buildField( - resolvedField.parentTypeNode, + resolvedField.parentTypeNode.NameString(r.definition), resolvedField.contextFields[i].fieldRef, r.definition.FieldDefinitionNameString(resolvedField.contextFields[i].fieldRef), "", @@ -1337,12 +1501,6 @@ func (r *rpcPlanningContext) createResolverRPCCalls(subgraphName string, resolve return calls, nil } -const ( - resultFieldName = "result" - contextFieldName = "context" - fieldArgsFieldName = "field_args" -) - // newResolveRPCCall creates a new resolve RPC call for a given resolved field. func (r *rpcPlanningContext) newResolveRPCCall(config *resolveRPCCallConfig) (RPCCall, error) { resolveConfig := config.resolveConfig @@ -1354,9 +1512,13 @@ func (r *rpcPlanningContext) newResolveRPCCall(config *resolveRPCCallConfig) (RP var responseFieldsMessage *RPCMessage if dataType == DataTypeMessage { var err error - responseFieldsMessage, err = r.buildFieldResolverTypeMessage( - r.definition.ResolveTypeNameString(underlyingTypeRef), - resolvedField, + responseFieldsMessage, err = r.buildMessageForField(buildFieldMessageConfig{ + typeName: r.definition.ResolveTypeNameString(underlyingTypeRef), + fragmentType: resolvedField.fragmentType, + memberTypes: resolvedField.memberTypes, + fragmentSelections: resolvedField.fragmentSelections, + fieldsSelectionSetRef: resolvedField.fieldsSelectionSetRef, + }, ) if err != nil { @@ -1369,7 +1531,7 @@ func (r *rpcPlanningContext) newResolveRPCCall(config *resolveRPCCallConfig) (RP return RPCCall{}, fmt.Errorf("unable to build response field: field definition not found for field %s", r.operation.FieldNameString(resolvedField.fieldRef)) } - field, err := r.buildField(resolvedField.parentTypeNode, fd, r.operation.FieldNameString(resolvedField.fieldRef), r.operation.FieldAliasString(resolvedField.fieldRef)) + field, err := r.buildField(resolvedField.parentTypeNode.NameString(r.definition), fd, r.operation.FieldNameString(resolvedField.fieldRef), r.operation.FieldAliasString(resolvedField.fieldRef)) if err != nil { return RPCCall{}, err } diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_federation_test.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_federation_test.go index e2cde3c829..0117c80e38 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_federation_test.go +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_federation_test.go @@ -16,7 +16,7 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport" ) -func TestEntityLookup(t *testing.T) { +func TestExecutionPlan_Federation_EntityLookup(t *testing.T) { t.Parallel() tests := []struct { name string @@ -65,7 +65,7 @@ func TestEntityLookup(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupProductByIdKey", + Name: "LookupProductByIdRequestKey", MemberTypes: []string{"Product"}, Fields: []RPCField{ { @@ -149,7 +149,7 @@ func TestEntityLookup(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupProductByIdKey", + Name: "LookupProductByIdRequestKey", MemberTypes: []string{"Product"}, Fields: []RPCField{ { @@ -215,7 +215,7 @@ func TestEntityLookup(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupStorageByIdKey", + Name: "LookupStorageByIdRequestKey", MemberTypes: []string{"Storage"}, Fields: []RPCField{ { @@ -301,7 +301,7 @@ func TestEntityLookup(t *testing.T) { } } -func TestEntityKeys(t *testing.T) { +func TestExecutionPlan_Federation_EntityKeys(t *testing.T) { t.Parallel() tests := []struct { name string @@ -361,7 +361,7 @@ func TestEntityKeys(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdKey", + Name: "LookupUserByIdRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -471,7 +471,7 @@ func TestEntityKeys(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdAndAddressKey", + Name: "LookupUserByIdAndAddressRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -584,7 +584,7 @@ func TestEntityKeys(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdAndNameKey", + Name: "LookupUserByIdAndNameRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -686,7 +686,7 @@ func TestEntityKeys(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdAndNameKey", + Name: "LookupUserByIdAndNameRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -794,7 +794,7 @@ func TestEntityKeys(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdAndNameAndAddressKey", + Name: "LookupUserByIdAndNameAndAddressRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -919,7 +919,7 @@ func TestEntityKeys(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdKey", + Name: "LookupUserByIdRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -991,1109 +991,6 @@ func TestEntityKeys(t *testing.T) { } } -func TestEntityLookupWithFieldResolvers(t *testing.T) { - t.Parallel() - tests := []struct { - name string - query string - expectedPlan *RPCExecutionPlan - mapping *GRPCMapping - federationConfigs plan.FederationFieldConfigurations - }{ - - { - name: "Should create an execution plan for an entity lookup with a field resolver", - query: `query EntityLookup($representations: [_Any!]!, $input: ShippingEstimateInput!) { _entities(representations: $representations) { ... on Product { __typename id name price shippingEstimate(input: $input) } } }`, - mapping: testMapping(), - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - expectedPlan: &RPCExecutionPlan{ - Calls: []RPCCall{ - { - ServiceName: "Products", - MethodName: "LookupProductById", - Kind: CallKindEntity, - Request: RPCMessage{ - Name: "LookupProductByIdRequest", - Fields: []RPCField{ - { - Name: "keys", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "representations", - Message: &RPCMessage{ - Name: "LookupProductByIdKey", - MemberTypes: []string{"Product"}, - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "LookupProductByIdResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "_entities", - Message: &RPCMessage{ - Name: "Product", - Fields: []RPCField{ - { - Name: "__typename", - ProtoTypeName: DataTypeString, - JSONPath: "__typename", - StaticValue: "Product", - }, - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - }, - }, - }, - }, - }, - }, - }, - { - ID: 1, - ServiceName: "Products", - MethodName: "ResolveProductShippingEstimate", - Kind: CallKindResolve, - DependentCalls: []int{0}, - ResponsePath: buildPath("_entities.shippingEstimate"), - Request: RPCMessage{ - Name: "ResolveProductShippingEstimateRequest", - Fields: []RPCField{ - { - Name: "context", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductShippingEstimateContext", - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - ResolvePath: buildPath("result.id"), - }, - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - ResolvePath: buildPath("result.price"), - }, - }, - }, - }, - { - Name: "field_args", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Message: &RPCMessage{ - Name: "ResolveProductShippingEstimateArgs", - Fields: []RPCField{ - { - Name: "input", - ProtoTypeName: DataTypeMessage, - JSONPath: "input", - Message: &RPCMessage{ - Name: "ShippingEstimateInput", - Fields: []RPCField{ - { - Name: "destination", - ProtoTypeName: DataTypeEnum, - JSONPath: "destination", - EnumName: "ShippingDestination", - }, - { - Name: "weight", - ProtoTypeName: DataTypeDouble, - JSONPath: "weight", - }, - { - Name: "expedited", - ProtoTypeName: DataTypeBool, - JSONPath: "expedited", - Optional: true, - }, - }, - }, - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "ResolveProductShippingEstimateResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - JSONPath: "result", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductShippingEstimateResult", - Fields: []RPCField{ - { - Name: "shipping_estimate", - ProtoTypeName: DataTypeDouble, - JSONPath: "shippingEstimate", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - { - name: "Should create an execution plan for multiple entity lookups with field resolvers", - query: `query MultiEntityLookup($representations: [_Any!]!, $input: ShippingEstimateInput!) { _entities(representations: $representations) { ... on Storage { __typename id name location } ... on Product { __typename id name price shippingEstimate(input: $input) } } }`, - mapping: testMapping(), - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Storage", - SelectionSet: "id", - }, - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - expectedPlan: &RPCExecutionPlan{ - Calls: []RPCCall{ - { - ServiceName: "Products", - MethodName: "LookupStorageById", - Kind: CallKindEntity, - Request: RPCMessage{ - Name: "LookupStorageByIdRequest", - Fields: []RPCField{ - { - Name: "keys", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "representations", - Message: &RPCMessage{ - Name: "LookupStorageByIdKey", - MemberTypes: []string{"Storage"}, - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "LookupStorageByIdResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "_entities", - Message: &RPCMessage{ - Name: "Storage", - Fields: []RPCField{ - { - Name: "__typename", - ProtoTypeName: DataTypeString, - JSONPath: "__typename", - StaticValue: "Storage", - }, - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "location", - ProtoTypeName: DataTypeString, - JSONPath: "location", - }, - }, - }, - }, - }, - }, - }, - { - ID: 1, - ServiceName: "Products", - MethodName: "LookupProductById", - Kind: CallKindEntity, - Request: RPCMessage{ - Name: "LookupProductByIdRequest", - Fields: []RPCField{ - { - Name: "keys", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "representations", - Message: &RPCMessage{ - Name: "LookupProductByIdKey", - MemberTypes: []string{"Product"}, - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "LookupProductByIdResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "_entities", - Message: &RPCMessage{ - Name: "Product", - Fields: []RPCField{ - { - Name: "__typename", - ProtoTypeName: DataTypeString, - JSONPath: "__typename", - StaticValue: "Product", - }, - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - }, - }, - }, - }, - }, - }, - }, - { - ID: 2, - ServiceName: "Products", - MethodName: "ResolveProductShippingEstimate", - Kind: CallKindResolve, - DependentCalls: []int{1}, - ResponsePath: buildPath("_entities.shippingEstimate"), - Request: RPCMessage{ - Name: "ResolveProductShippingEstimateRequest", - Fields: []RPCField{ - { - Name: "context", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductShippingEstimateContext", - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - ResolvePath: buildPath("result.id"), - }, - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - ResolvePath: buildPath("result.price"), - }, - }, - }, - }, - { - Name: "field_args", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Message: &RPCMessage{ - Name: "ResolveProductShippingEstimateArgs", - Fields: []RPCField{ - { - Name: "input", - ProtoTypeName: DataTypeMessage, - JSONPath: "input", - Message: &RPCMessage{ - Name: "ShippingEstimateInput", - Fields: []RPCField{ - { - Name: "destination", - ProtoTypeName: DataTypeEnum, - JSONPath: "destination", - EnumName: "ShippingDestination", - }, - { - Name: "weight", - ProtoTypeName: DataTypeDouble, - JSONPath: "weight", - }, - { - Name: "expedited", - ProtoTypeName: DataTypeBool, - JSONPath: "expedited", - Optional: true, - }, - }, - }, - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "ResolveProductShippingEstimateResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - JSONPath: "result", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductShippingEstimateResult", - Fields: []RPCField{ - { - Name: "shipping_estimate", - ProtoTypeName: DataTypeDouble, - JSONPath: "shippingEstimate", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - // Parse the GraphQL schema - schemaDoc := grpctest.MustGraphQLSchema(t) - - // Parse the GraphQL query - queryDoc, report := astparser.ParseGraphqlDocumentString(tt.query) - if report.HasErrors() { - t.Fatalf("failed to parse query: %s", report.Error()) - } - - planner, err := NewPlanner("Products", tt.mapping, tt.federationConfigs) - if err != nil { - t.Fatalf("failed to create planner: %s", err) - } - plan, err := planner.PlanOperation(&queryDoc, &schemaDoc) - if err != nil { - t.Fatalf("failed to plan operation: %s", err) - } - - diff := cmp.Diff(tt.expectedPlan, plan) - if diff != "" { - t.Fatalf("execution plan mismatch: %s", diff) - } - }) - } -} - -func TestEntityLookupWithFieldResolvers_WithCompositeTypes(t *testing.T) { - t.Parallel() - tests := []struct { - name string - query string - expectedPlan *RPCExecutionPlan - mapping *GRPCMapping - federationConfigs plan.FederationFieldConfigurations - }{ - { - name: "Should create an execution plan for an entity lookup with a field resolver returning interface type", - query: `query EntityLookupWithInterface($representations: [_Any!]!, $includeDetails: Boolean!) { _entities(representations: $representations) { ... on Product { __typename id name mascotRecommendation(includeDetails: $includeDetails) { ... on Cat { name meowVolume } ... on Dog { name barkVolume } } } } }`, - mapping: testMapping(), - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - expectedPlan: &RPCExecutionPlan{ - Calls: []RPCCall{ - { - ServiceName: "Products", - MethodName: "LookupProductById", - Kind: CallKindEntity, - Request: RPCMessage{ - Name: "LookupProductByIdRequest", - Fields: []RPCField{ - { - Name: "keys", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "representations", - Message: &RPCMessage{ - Name: "LookupProductByIdKey", - MemberTypes: []string{"Product"}, - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "LookupProductByIdResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "_entities", - Message: &RPCMessage{ - Name: "Product", - Fields: []RPCField{ - { - Name: "__typename", - ProtoTypeName: DataTypeString, - JSONPath: "__typename", - StaticValue: "Product", - }, - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - }, - }, - }, - }, - }, - }, - { - ID: 1, - ServiceName: "Products", - MethodName: "ResolveProductMascotRecommendation", - Kind: CallKindResolve, - DependentCalls: []int{0}, - ResponsePath: buildPath("_entities.mascotRecommendation"), - Request: RPCMessage{ - Name: "ResolveProductMascotRecommendationRequest", - Fields: []RPCField{ - { - Name: "context", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductMascotRecommendationContext", - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - ResolvePath: buildPath("result.id"), - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - ResolvePath: buildPath("result.name"), - }, - }, - }, - }, - { - Name: "field_args", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Message: &RPCMessage{ - Name: "ResolveProductMascotRecommendationArgs", - Fields: []RPCField{ - { - Name: "include_details", - ProtoTypeName: DataTypeBool, - JSONPath: "includeDetails", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "ResolveProductMascotRecommendationResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - JSONPath: "result", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductMascotRecommendationResult", - Fields: []RPCField{ - { - Name: "mascot_recommendation", - ProtoTypeName: DataTypeMessage, - JSONPath: "mascotRecommendation", - Optional: true, - Message: &RPCMessage{ - Name: "Animal", - OneOfType: OneOfTypeInterface, - MemberTypes: []string{"Cat", "Dog"}, - FragmentFields: RPCFieldSelectionSet{ - "Cat": { - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "meow_volume", - ProtoTypeName: DataTypeInt32, - JSONPath: "meowVolume", - }, - }, - "Dog": { - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "bark_volume", - ProtoTypeName: DataTypeInt32, - JSONPath: "barkVolume", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - { - name: "Should create an execution plan for an entity lookup with a field resolver returning union type", - query: `query EntityLookupWithUnion($representations: [_Any!]!, $checkAvailability: Boolean!) { _entities(representations: $representations) { ... on Product { __typename id name stockStatus(checkAvailability: $checkAvailability) { ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } }`, - mapping: testMapping(), - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - expectedPlan: &RPCExecutionPlan{ - Calls: []RPCCall{ - { - ServiceName: "Products", - MethodName: "LookupProductById", - Kind: CallKindEntity, - Request: RPCMessage{ - Name: "LookupProductByIdRequest", - Fields: []RPCField{ - { - Name: "keys", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "representations", - Message: &RPCMessage{ - Name: "LookupProductByIdKey", - MemberTypes: []string{"Product"}, - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "LookupProductByIdResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "_entities", - Message: &RPCMessage{ - Name: "Product", - Fields: []RPCField{ - { - Name: "__typename", - ProtoTypeName: DataTypeString, - JSONPath: "__typename", - StaticValue: "Product", - }, - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - }, - }, - }, - }, - }, - }, - { - ID: 1, - ServiceName: "Products", - MethodName: "ResolveProductStockStatus", - Kind: CallKindResolve, - DependentCalls: []int{0}, - ResponsePath: buildPath("_entities.stockStatus"), - Request: RPCMessage{ - Name: "ResolveProductStockStatusRequest", - Fields: []RPCField{ - { - Name: "context", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductStockStatusContext", - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - ResolvePath: buildPath("result.id"), - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - ResolvePath: buildPath("result.name"), - }, - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - ResolvePath: buildPath("result.price"), - }, - }, - }, - }, - { - Name: "field_args", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Message: &RPCMessage{ - Name: "ResolveProductStockStatusArgs", - Fields: []RPCField{ - { - Name: "check_availability", - ProtoTypeName: DataTypeBool, - JSONPath: "checkAvailability", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "ResolveProductStockStatusResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - JSONPath: "result", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductStockStatusResult", - Fields: []RPCField{ - { - Name: "stock_status", - ProtoTypeName: DataTypeMessage, - JSONPath: "stockStatus", - Message: &RPCMessage{ - Name: "ActionResult", - OneOfType: OneOfTypeUnion, - MemberTypes: []string{"ActionSuccess", "ActionError"}, - FragmentFields: RPCFieldSelectionSet{ - "ActionSuccess": { - { - Name: "message", - ProtoTypeName: DataTypeString, - JSONPath: "message", - }, - { - Name: "timestamp", - ProtoTypeName: DataTypeString, - JSONPath: "timestamp", - }, - }, - "ActionError": { - { - Name: "message", - ProtoTypeName: DataTypeString, - JSONPath: "message", - }, - { - Name: "code", - ProtoTypeName: DataTypeString, - JSONPath: "code", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - { - name: "Should create an execution plan for an entity lookup with a field resolver returning nested composite types", - query: `query EntityLookupWithNested($representations: [_Any!]!, $includeExtended: Boolean!) { _entities(representations: $representations) { ... on Product { __typename id name price productDetails(includeExtended: $includeExtended) { id description recommendedPet { ... on Cat { name meowVolume } ... on Dog { name barkVolume } } reviewSummary { ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } } }`, - mapping: testMapping(), - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - expectedPlan: &RPCExecutionPlan{ - Calls: []RPCCall{ - { - ServiceName: "Products", - MethodName: "LookupProductById", - Kind: CallKindEntity, - Request: RPCMessage{ - Name: "LookupProductByIdRequest", - Fields: []RPCField{ - { - Name: "keys", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "representations", - Message: &RPCMessage{ - Name: "LookupProductByIdKey", - MemberTypes: []string{"Product"}, - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "LookupProductByIdResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - Repeated: true, - JSONPath: "_entities", - Message: &RPCMessage{ - Name: "Product", - Fields: []RPCField{ - { - Name: "__typename", - ProtoTypeName: DataTypeString, - JSONPath: "__typename", - StaticValue: "Product", - }, - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - }, - }, - }, - }, - }, - }, - }, - { - ID: 1, - ServiceName: "Products", - MethodName: "ResolveProductProductDetails", - Kind: CallKindResolve, - DependentCalls: []int{0}, - ResponsePath: buildPath("_entities.productDetails"), - Request: RPCMessage{ - Name: "ResolveProductProductDetailsRequest", - Fields: []RPCField{ - { - Name: "context", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductProductDetailsContext", - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - ResolvePath: buildPath("result.id"), - }, - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - ResolvePath: buildPath("result.name"), - }, - { - Name: "price", - ProtoTypeName: DataTypeDouble, - JSONPath: "price", - ResolvePath: buildPath("result.price"), - }, - }, - }, - }, - { - Name: "field_args", - ProtoTypeName: DataTypeMessage, - JSONPath: "", - Message: &RPCMessage{ - Name: "ResolveProductProductDetailsArgs", - Fields: []RPCField{ - { - Name: "include_extended", - ProtoTypeName: DataTypeBool, - JSONPath: "includeExtended", - }, - }, - }, - }, - }, - }, - Response: RPCMessage{ - Name: "ResolveProductProductDetailsResponse", - Fields: []RPCField{ - { - Name: "result", - ProtoTypeName: DataTypeMessage, - JSONPath: "result", - Repeated: true, - Message: &RPCMessage{ - Name: "ResolveProductProductDetailsResult", - Fields: []RPCField{ - { - Name: "product_details", - ProtoTypeName: DataTypeMessage, - JSONPath: "productDetails", - Optional: true, - Message: &RPCMessage{ - Name: "ProductDetails", - Fields: []RPCField{ - { - Name: "id", - ProtoTypeName: DataTypeString, - JSONPath: "id", - }, - { - Name: "description", - ProtoTypeName: DataTypeString, - JSONPath: "description", - }, - { - Name: "recommended_pet", - ProtoTypeName: DataTypeMessage, - JSONPath: "recommendedPet", - Message: &RPCMessage{ - Name: "Animal", - OneOfType: OneOfTypeInterface, - MemberTypes: []string{"Cat", "Dog"}, - FragmentFields: RPCFieldSelectionSet{ - "Cat": { - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "meow_volume", - ProtoTypeName: DataTypeInt32, - JSONPath: "meowVolume", - }, - }, - "Dog": { - { - Name: "name", - ProtoTypeName: DataTypeString, - JSONPath: "name", - }, - { - Name: "bark_volume", - ProtoTypeName: DataTypeInt32, - JSONPath: "barkVolume", - }, - }, - }, - }, - }, - { - Name: "review_summary", - ProtoTypeName: DataTypeMessage, - JSONPath: "reviewSummary", - Message: &RPCMessage{ - Name: "ActionResult", - OneOfType: OneOfTypeUnion, - MemberTypes: []string{"ActionSuccess", "ActionError"}, - FragmentFields: RPCFieldSelectionSet{ - "ActionSuccess": { - { - Name: "message", - ProtoTypeName: DataTypeString, - JSONPath: "message", - }, - { - Name: "timestamp", - ProtoTypeName: DataTypeString, - JSONPath: "timestamp", - }, - }, - "ActionError": { - { - Name: "message", - ProtoTypeName: DataTypeString, - JSONPath: "message", - }, - { - Name: "code", - ProtoTypeName: DataTypeString, - JSONPath: "code", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - t.Parallel() - // Parse the GraphQL schema - schemaDoc := grpctest.MustGraphQLSchema(t) - - // Parse the GraphQL query - queryDoc, report := astparser.ParseGraphqlDocumentString(tt.query) - if report.HasErrors() { - t.Fatalf("failed to parse query: %s", report.Error()) - } - - planner, err := NewPlanner("Products", tt.mapping, tt.federationConfigs) - if err != nil { - t.Fatalf("failed to create planner: %s", err) - } - plan, err := planner.PlanOperation(&queryDoc, &schemaDoc) - if err != nil { - t.Fatalf("failed to plan operation: %s", err) - } - - diff := cmp.Diff(tt.expectedPlan, plan) - if diff != "" { - t.Fatalf("execution plan mismatch: %s", diff) - } - }) - } -} - var nestedInlineFragmentFederationSchema = testFederationSchemaString(` type Query { _entities(representations: [_Any!]!): [_Entity]! @@ -2200,7 +1097,7 @@ func TestEntityLookupWithNestedInlineFragments(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdKey", + Name: "LookupUserByIdRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -2325,7 +1222,7 @@ func TestEntityLookupWithNestedInlineFragments(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdKey", + Name: "LookupUserByIdRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -2429,7 +1326,7 @@ func TestEntityLookupWithNestedInlineFragments(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdKey", + Name: "LookupUserByIdRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -2538,7 +1435,7 @@ func TestEntityLookupWithNestedInlineFragments(t *testing.T) { Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupUserByIdKey", + Name: "LookupUserByIdRequestKey", MemberTypes: []string{"User"}, Fields: []RPCField{ { @@ -2802,7 +1699,7 @@ func TestEntityLookupWithFieldResolvers_ComplexResolverInNestedMessage(t *testin Repeated: true, JSONPath: "representations", Message: &RPCMessage{ - Name: "LookupProductByIdKey", + Name: "LookupProductByIdRequestKey", MemberTypes: []string{"Product"}, Fields: []RPCField{ { diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_field_resolvers_test.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_field_resolvers_test.go index a2c8fc64f3..a580ca36d4 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_field_resolvers_test.go +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_field_resolvers_test.go @@ -3,8 +3,13 @@ package grpcdatasource import ( "testing" + "github.com/google/go-cmp/cmp" + "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" + "github.com/wundergraph/graphql-go-tools/v2/pkg/astparser" "github.com/wundergraph/graphql-go-tools/v2/pkg/astvalidation" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/grpctest" "github.com/wundergraph/graphql-go-tools/v2/pkg/internal/unsafeparser" "github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport" ) @@ -4377,7 +4382,1109 @@ func TestExecutionPlanFieldResolvers_CustomSchemas(t *testing.T) { } } -// TestExecutionPlanFieldResolvers_ComplexResolverInNestedMessage tests that fields +func TestExecutionPlan_FederationFieldResolvers(t *testing.T) { + t.Parallel() + tests := []struct { + name string + query string + expectedPlan *RPCExecutionPlan + mapping *GRPCMapping + federationConfigs plan.FederationFieldConfigurations + }{ + + { + name: "Should create an execution plan for an entity lookup with a field resolver", + query: `query EntityLookup($representations: [_Any!]!, $input: ShippingEstimateInput!) { _entities(representations: $representations) { ... on Product { __typename id name price shippingEstimate(input: $input) } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupProductById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupProductByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupProductByIdRequestKey", + MemberTypes: []string{"Product"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupProductByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Product", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Product", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + MethodName: "ResolveProductShippingEstimate", + Kind: CallKindResolve, + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.shippingEstimate"), + Request: RPCMessage{ + Name: "ResolveProductShippingEstimateRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductShippingEstimateContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + ResolvePath: buildPath("result.price"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveProductShippingEstimateArgs", + Fields: []RPCField{ + { + Name: "input", + ProtoTypeName: DataTypeMessage, + JSONPath: "input", + Message: &RPCMessage{ + Name: "ShippingEstimateInput", + Fields: []RPCField{ + { + Name: "destination", + ProtoTypeName: DataTypeEnum, + JSONPath: "destination", + EnumName: "ShippingDestination", + }, + { + Name: "weight", + ProtoTypeName: DataTypeDouble, + JSONPath: "weight", + }, + { + Name: "expedited", + ProtoTypeName: DataTypeBool, + JSONPath: "expedited", + Optional: true, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveProductShippingEstimateResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductShippingEstimateResult", + Fields: []RPCField{ + { + Name: "shipping_estimate", + ProtoTypeName: DataTypeDouble, + JSONPath: "shippingEstimate", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for multiple entity lookups with field resolvers", + query: `query MultiEntityLookup($representations: [_Any!]!, $input: ShippingEstimateInput!) { _entities(representations: $representations) { ... on Storage { __typename id name location } ... on Product { __typename id name price shippingEstimate(input: $input) } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "location", + ProtoTypeName: DataTypeString, + JSONPath: "location", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + MethodName: "LookupProductById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupProductByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupProductByIdRequestKey", + MemberTypes: []string{"Product"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupProductByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Product", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Product", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + MethodName: "ResolveProductShippingEstimate", + Kind: CallKindResolve, + DependentCalls: []int{1}, + ResponsePath: buildPath("_entities.shippingEstimate"), + Request: RPCMessage{ + Name: "ResolveProductShippingEstimateRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductShippingEstimateContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + ResolvePath: buildPath("result.price"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveProductShippingEstimateArgs", + Fields: []RPCField{ + { + Name: "input", + ProtoTypeName: DataTypeMessage, + JSONPath: "input", + Message: &RPCMessage{ + Name: "ShippingEstimateInput", + Fields: []RPCField{ + { + Name: "destination", + ProtoTypeName: DataTypeEnum, + JSONPath: "destination", + EnumName: "ShippingDestination", + }, + { + Name: "weight", + ProtoTypeName: DataTypeDouble, + JSONPath: "weight", + }, + { + Name: "expedited", + ProtoTypeName: DataTypeBool, + JSONPath: "expedited", + Optional: true, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveProductShippingEstimateResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductShippingEstimateResult", + Fields: []RPCField{ + { + Name: "shipping_estimate", + ProtoTypeName: DataTypeDouble, + JSONPath: "shippingEstimate", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tt.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + planner, err := NewPlanner("Products", tt.mapping, tt.federationConfigs) + if err != nil { + t.Fatalf("failed to create planner: %s", err) + } + plan, err := planner.PlanOperation(&queryDoc, &schemaDoc) + if err != nil { + t.Fatalf("failed to plan operation: %s", err) + } + + diff := cmp.Diff(tt.expectedPlan, plan) + if diff != "" { + t.Fatalf("execution plan mismatch: %s", diff) + } + }) + } +} + +func TestExecutionPlan_FederationFieldResolvers_WithCompositeTypes(t *testing.T) { + t.Parallel() + tests := []struct { + name string + query string + expectedPlan *RPCExecutionPlan + mapping *GRPCMapping + federationConfigs plan.FederationFieldConfigurations + }{ + { + name: "Should create an execution plan for an entity lookup with a field resolver returning interface type", + query: `query EntityLookupWithInterface($representations: [_Any!]!, $includeDetails: Boolean!) { _entities(representations: $representations) { ... on Product { __typename id name mascotRecommendation(includeDetails: $includeDetails) { ... on Cat { name meowVolume } ... on Dog { name barkVolume } } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupProductById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupProductByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupProductByIdRequestKey", + MemberTypes: []string{"Product"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupProductByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Product", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Product", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + MethodName: "ResolveProductMascotRecommendation", + Kind: CallKindResolve, + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.mascotRecommendation"), + Request: RPCMessage{ + Name: "ResolveProductMascotRecommendationRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductMascotRecommendationContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveProductMascotRecommendationArgs", + Fields: []RPCField{ + { + Name: "include_details", + ProtoTypeName: DataTypeBool, + JSONPath: "includeDetails", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveProductMascotRecommendationResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductMascotRecommendationResult", + Fields: []RPCField{ + { + Name: "mascot_recommendation", + ProtoTypeName: DataTypeMessage, + JSONPath: "mascotRecommendation", + Optional: true, + Message: &RPCMessage{ + Name: "Animal", + OneOfType: OneOfTypeInterface, + MemberTypes: []string{"Cat", "Dog"}, + FragmentFields: RPCFieldSelectionSet{ + "Cat": { + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "meow_volume", + ProtoTypeName: DataTypeInt32, + JSONPath: "meowVolume", + }, + }, + "Dog": { + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "bark_volume", + ProtoTypeName: DataTypeInt32, + JSONPath: "barkVolume", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for an entity lookup with a field resolver returning union type", + query: `query EntityLookupWithUnion($representations: [_Any!]!, $checkAvailability: Boolean!) { _entities(representations: $representations) { ... on Product { __typename id name stockStatus(checkAvailability: $checkAvailability) { ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupProductById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupProductByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupProductByIdRequestKey", + MemberTypes: []string{"Product"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupProductByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Product", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Product", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + MethodName: "ResolveProductStockStatus", + Kind: CallKindResolve, + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.stockStatus"), + Request: RPCMessage{ + Name: "ResolveProductStockStatusRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductStockStatusContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + ResolvePath: buildPath("result.price"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveProductStockStatusArgs", + Fields: []RPCField{ + { + Name: "check_availability", + ProtoTypeName: DataTypeBool, + JSONPath: "checkAvailability", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveProductStockStatusResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductStockStatusResult", + Fields: []RPCField{ + { + Name: "stock_status", + ProtoTypeName: DataTypeMessage, + JSONPath: "stockStatus", + Message: &RPCMessage{ + Name: "ActionResult", + OneOfType: OneOfTypeUnion, + MemberTypes: []string{"ActionSuccess", "ActionError"}, + FragmentFields: RPCFieldSelectionSet{ + "ActionSuccess": { + { + Name: "message", + ProtoTypeName: DataTypeString, + JSONPath: "message", + }, + { + Name: "timestamp", + ProtoTypeName: DataTypeString, + JSONPath: "timestamp", + }, + }, + "ActionError": { + { + Name: "message", + ProtoTypeName: DataTypeString, + JSONPath: "message", + }, + { + Name: "code", + ProtoTypeName: DataTypeString, + JSONPath: "code", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for an entity lookup with a field resolver returning nested composite types", + query: `query EntityLookupWithNested($representations: [_Any!]!, $includeExtended: Boolean!) { _entities(representations: $representations) { ... on Product { __typename id name price productDetails(includeExtended: $includeExtended) { id description recommendedPet { ... on Cat { name meowVolume } ... on Dog { name barkVolume } } reviewSummary { ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupProductById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupProductByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupProductByIdRequestKey", + MemberTypes: []string{"Product"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupProductByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Product", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Product", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + MethodName: "ResolveProductProductDetails", + Kind: CallKindResolve, + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.productDetails"), + Request: RPCMessage{ + Name: "ResolveProductProductDetailsRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductProductDetailsContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + { + Name: "price", + ProtoTypeName: DataTypeDouble, + JSONPath: "price", + ResolvePath: buildPath("result.price"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveProductProductDetailsArgs", + Fields: []RPCField{ + { + Name: "include_extended", + ProtoTypeName: DataTypeBool, + JSONPath: "includeExtended", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveProductProductDetailsResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveProductProductDetailsResult", + Fields: []RPCField{ + { + Name: "product_details", + ProtoTypeName: DataTypeMessage, + JSONPath: "productDetails", + Optional: true, + Message: &RPCMessage{ + Name: "ProductDetails", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "description", + ProtoTypeName: DataTypeString, + JSONPath: "description", + }, + { + Name: "recommended_pet", + ProtoTypeName: DataTypeMessage, + JSONPath: "recommendedPet", + Message: &RPCMessage{ + Name: "Animal", + OneOfType: OneOfTypeInterface, + MemberTypes: []string{"Cat", "Dog"}, + FragmentFields: RPCFieldSelectionSet{ + "Cat": { + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "meow_volume", + ProtoTypeName: DataTypeInt32, + JSONPath: "meowVolume", + }, + }, + "Dog": { + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "bark_volume", + ProtoTypeName: DataTypeInt32, + JSONPath: "barkVolume", + }, + }, + }, + }, + }, + { + Name: "review_summary", + ProtoTypeName: DataTypeMessage, + JSONPath: "reviewSummary", + Message: &RPCMessage{ + Name: "ActionResult", + OneOfType: OneOfTypeUnion, + MemberTypes: []string{"ActionSuccess", "ActionError"}, + FragmentFields: RPCFieldSelectionSet{ + "ActionSuccess": { + { + Name: "message", + ProtoTypeName: DataTypeString, + JSONPath: "message", + }, + { + Name: "timestamp", + ProtoTypeName: DataTypeString, + JSONPath: "timestamp", + }, + }, + "ActionError": { + { + Name: "message", + ProtoTypeName: DataTypeString, + JSONPath: "message", + }, + { + Name: "code", + ProtoTypeName: DataTypeString, + JSONPath: "code", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tt.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + planner, err := NewPlanner("Products", tt.mapping, tt.federationConfigs) + if err != nil { + t.Fatalf("failed to create planner: %s", err) + } + plan, err := planner.PlanOperation(&queryDoc, &schemaDoc) + if err != nil { + t.Fatalf("failed to plan operation: %s", err) + } + + diff := cmp.Diff(tt.expectedPlan, plan) + if diff != "" { + t.Fatalf("execution plan mismatch: %s", diff) + } + }) + } +} + // following a complex-return-type resolver inside a nested message are placed into // the correct parent message. This is a regression test for a bug where // LeaveSelectionSet incorrectly calls leaveNestedField for resolver fields whose diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_requires_test.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_requires_test.go new file mode 100644 index 0000000000..f2dbf6ce6f --- /dev/null +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_requires_test.go @@ -0,0 +1,2799 @@ +package grpcdatasource + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/astparser" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/grpctest" +) + +func TestExecutionPlan_FederationRequires(t *testing.T) { + t.Parallel() + tests := []struct { + name string + query string + expectedPlan *RPCExecutionPlan + mapping *GRPCMapping + federationConfigs plan.FederationFieldConfigurations + }{ + { + name: "Should create an execution plan for an entity lookup with required fields", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Warehouse { __typename name location stockHealthScore } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Warehouse", + SelectionSet: "id", + }, + { + TypeName: "Warehouse", + FieldName: "stockHealthScore", + SelectionSet: "inventoryCount restockData { lastRestockDate }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupWarehouseById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupWarehouseByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupWarehouseByIdRequestKey", + MemberTypes: []string{"Warehouse"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupWarehouseByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Warehouse", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Warehouse", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + { + Name: "location", + ProtoTypeName: DataTypeString, + JSONPath: "location", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireWarehouseStockHealthScoreById", + ResponsePath: buildPath("_entities.stockHealthScore"), + Request: RPCMessage{ + Name: "RequireWarehouseStockHealthScoreByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireWarehouseStockHealthScoreByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupWarehouseByIdRequestKey", + MemberTypes: []string{"Warehouse"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireWarehouseStockHealthScoreByIdFields", + Fields: []RPCField{ + { + Name: "inventory_count", + ProtoTypeName: DataTypeInt32, + JSONPath: "inventoryCount", + }, + { + Name: "restock_data", + ProtoTypeName: DataTypeMessage, + JSONPath: "restockData", + Message: &RPCMessage{ + Name: "RequireWarehouseStockHealthScoreByIdFields.RestockData", + Fields: []RPCField{ + { + Name: "last_restock_date", + ProtoTypeName: DataTypeString, + JSONPath: "lastRestockDate", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireWarehouseStockHealthScoreByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireWarehouseStockHealthScoreByIdResult", + Fields: RPCFields{ + { + Name: "stock_health_score", + ProtoTypeName: DataTypeDouble, + JSONPath: "stockHealthScore", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for tagSummary requiring tags list", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename name tagSummary } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageTagSummaryById", + ResponsePath: buildPath("_entities.tagSummary"), + Request: RPCMessage{ + Name: "RequireStorageTagSummaryByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdFields", + Fields: []RPCField{ + { + Name: "tags", + ProtoTypeName: DataTypeString, + Repeated: true, + JSONPath: "tags", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageTagSummaryByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdResult", + Fields: RPCFields{ + { + Name: "tag_summary", + ProtoTypeName: DataTypeString, + JSONPath: "tagSummary", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for optionalTagSummary requiring nullable list", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename optionalTagSummary } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalTagSummary", + SelectionSet: "optionalTags", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageOptionalTagSummaryById", + ResponsePath: buildPath("_entities.optionalTagSummary"), + Request: RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdFields", + Fields: []RPCField{ + { + Name: "optional_tags", + ProtoTypeName: DataTypeString, + JSONPath: "optionalTags", + Optional: true, + IsListType: true, + ListMetadata: &ListMetadata{ + NestingLevel: 1, + LevelInfo: []LevelInfo{{Optional: true}}, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdResult", + Fields: RPCFields{ + { + Name: "optional_tag_summary", + ProtoTypeName: DataTypeString, + JSONPath: "optionalTagSummary", + Optional: true, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for metadataScore requiring nested object fields", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename metadataScore } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageMetadataScoreById", + ResponsePath: buildPath("_entities.metadataScore"), + Request: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResult", + Fields: RPCFields{ + { + Name: "metadata_score", + ProtoTypeName: DataTypeDouble, + JSONPath: "metadataScore", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for processedMetadata returning complex type", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename processedMetadata { capacity zone priority } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedMetadata", + SelectionSet: "metadata { capacity zone priority }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageProcessedMetadataById", + ResponsePath: buildPath("_entities.processedMetadata"), + Request: RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + { + Name: "priority", + ProtoTypeName: DataTypeInt32, + JSONPath: "priority", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdResult", + Fields: RPCFields{ + { + Name: "processed_metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "processedMetadata", + Message: &RPCMessage{ + Name: "StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + { + Name: "priority", + ProtoTypeName: DataTypeInt32, + JSONPath: "priority", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for optionalProcessedMetadata returning nullable complex type", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename optionalProcessedMetadata { capacity zone } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalProcessedMetadata", + SelectionSet: "metadata { capacity zone }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageOptionalProcessedMetadataById", + ResponsePath: buildPath("_entities.optionalProcessedMetadata"), + Request: RPCMessage{ + Name: "RequireStorageOptionalProcessedMetadataByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageOptionalProcessedMetadataByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageOptionalProcessedMetadataByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageOptionalProcessedMetadataByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageOptionalProcessedMetadataByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageOptionalProcessedMetadataByIdResult", + Fields: RPCFields{ + { + Name: "optional_processed_metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "optionalProcessedMetadata", + Optional: true, + Message: &RPCMessage{ + Name: "StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for processedTags returning list", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename processedTags } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedTags", + SelectionSet: "tags", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageProcessedTagsById", + ResponsePath: buildPath("_entities.processedTags"), + Request: RPCMessage{ + Name: "RequireStorageProcessedTagsByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageProcessedTagsByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageProcessedTagsByIdFields", + Fields: []RPCField{ + { + Name: "tags", + ProtoTypeName: DataTypeString, + Repeated: true, + JSONPath: "tags", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageProcessedTagsByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageProcessedTagsByIdResult", + Fields: RPCFields{ + { + Name: "processed_tags", + ProtoTypeName: DataTypeString, + Repeated: true, + JSONPath: "processedTags", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create an execution plan for multiple requires fields in single query", + query: `query EntityLookup($representations: [_Any!]!) { _entities(representations: $representations) { ... on Storage { __typename name tagSummary metadataScore } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageTagSummaryById", + ResponsePath: buildPath("_entities.tagSummary"), + Request: RPCMessage{ + Name: "RequireStorageTagSummaryByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdFields", + Fields: []RPCField{ + { + Name: "tags", + ProtoTypeName: DataTypeString, + Repeated: true, + JSONPath: "tags", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageTagSummaryByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdResult", + Fields: RPCFields{ + { + Name: "tag_summary", + ProtoTypeName: DataTypeString, + JSONPath: "tagSummary", + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageMetadataScoreById", + ResponsePath: buildPath("_entities.metadataScore"), + Request: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResult", + Fields: RPCFields{ + { + Name: "metadata_score", + ProtoTypeName: DataTypeDouble, + JSONPath: "metadataScore", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tt.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + planner, err := NewPlanner("Products", tt.mapping, tt.federationConfigs) + if err != nil { + t.Fatalf("failed to create planner: %s", err) + } + plan, err := planner.PlanOperation(&queryDoc, &schemaDoc) + if err != nil { + t.Fatalf("failed to plan operation: %s", err) + } + + diff := cmp.Diff(tt.expectedPlan, plan) + if diff != "" { + t.Fatalf("execution plan mismatch: %s", diff) + } + }) + } +} + +func TestExecutionPlan_FederationRequires_WithFieldResolvers(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + query string + expectedPlan *RPCExecutionPlan + mapping *GRPCMapping + federationConfigs plan.FederationFieldConfigurations + }{ + { + name: "Should create execution plan for tagSummary (requires) + storageStatus (field resolver)", + query: `query EntityLookup($representations: [_Any!]!, $checkHealth: Boolean!) { _entities(representations: $representations) { ... on Storage { __typename id tagSummary storageStatus(checkHealth: $checkHealth) { ... on ActionSuccess { message } } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindResolve, + MethodName: "ResolveStorageStorageStatus", + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.storageStatus"), + Request: RPCMessage{ + Name: "ResolveStorageStorageStatusRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageStorageStatusContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveStorageStorageStatusArgs", + Fields: []RPCField{ + { + Name: "check_health", + ProtoTypeName: DataTypeBool, + JSONPath: "checkHealth", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveStorageStorageStatusResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageStorageStatusResult", + Fields: []RPCField{ + { + Name: "storage_status", + ProtoTypeName: DataTypeMessage, + JSONPath: "storageStatus", + Message: &RPCMessage{ + Name: "ActionResult", + OneOfType: OneOfTypeUnion, + MemberTypes: []string{"ActionSuccess", "ActionError"}, + FragmentFields: RPCFieldSelectionSet{ + "ActionSuccess": { + { + Name: "message", + ProtoTypeName: DataTypeString, + JSONPath: "message", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageTagSummaryById", + ResponsePath: buildPath("_entities.tagSummary"), + Request: RPCMessage{ + Name: "RequireStorageTagSummaryByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdFields", + Fields: []RPCField{ + { + Name: "tags", + ProtoTypeName: DataTypeString, + Repeated: true, + JSONPath: "tags", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageTagSummaryByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdResult", + Fields: RPCFields{ + { + Name: "tag_summary", + ProtoTypeName: DataTypeString, + JSONPath: "tagSummary", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create execution plan for metadataScore (requires) + linkedStorages (field resolver)", + query: `query EntityLookup($representations: [_Any!]!, $depth: Int!) { _entities(representations: $representations) { ... on Storage { __typename id metadataScore linkedStorages(depth: $depth) { id name } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindResolve, + MethodName: "ResolveStorageLinkedStorages", + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.linkedStorages"), + Request: RPCMessage{ + Name: "ResolveStorageLinkedStoragesRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageLinkedStoragesContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + { + Name: "location", + ProtoTypeName: DataTypeString, + JSONPath: "location", + ResolvePath: buildPath("result.location"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveStorageLinkedStoragesArgs", + Fields: []RPCField{ + { + Name: "depth", + ProtoTypeName: DataTypeInt32, + JSONPath: "depth", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveStorageLinkedStoragesResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageLinkedStoragesResult", + Fields: []RPCField{ + { + Name: "linked_storages", + ProtoTypeName: DataTypeMessage, + JSONPath: "linkedStorages", + Repeated: true, + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageMetadataScoreById", + ResponsePath: buildPath("_entities.metadataScore"), + Request: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResult", + Fields: RPCFields{ + { + Name: "metadata_score", + ProtoTypeName: DataTypeDouble, + JSONPath: "metadataScore", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create execution plan for optionalTagSummary (nullable requires) + nearbyStorages (nullable field resolver)", + query: `query EntityLookup($representations: [_Any!]!, $radius: Int) { _entities(representations: $representations) { ... on Storage { __typename id optionalTagSummary nearbyStorages(radius: $radius) { id name } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalTagSummary", + SelectionSet: "optionalTags", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindResolve, + MethodName: "ResolveStorageNearbyStorages", + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.nearbyStorages"), + Request: RPCMessage{ + Name: "ResolveStorageNearbyStoragesRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageNearbyStoragesContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "location", + ProtoTypeName: DataTypeString, + JSONPath: "location", + ResolvePath: buildPath("result.location"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveStorageNearbyStoragesArgs", + Fields: []RPCField{ + { + Name: "radius", + ProtoTypeName: DataTypeInt32, + JSONPath: "radius", + Optional: true, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveStorageNearbyStoragesResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageNearbyStoragesResult", + Fields: []RPCField{ + { + Name: "nearby_storages", + ProtoTypeName: DataTypeMessage, + JSONPath: "nearbyStorages", + Optional: true, + IsListType: true, + ListMetadata: &ListMetadata{ + NestingLevel: 1, + LevelInfo: []LevelInfo{{Optional: true}}, + }, + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageOptionalTagSummaryById", + ResponsePath: buildPath("_entities.optionalTagSummary"), + Request: RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdFields", + Fields: []RPCField{ + { + Name: "optional_tags", + ProtoTypeName: DataTypeString, + JSONPath: "optionalTags", + Optional: true, + IsListType: true, + ListMetadata: &ListMetadata{ + NestingLevel: 1, + LevelInfo: []LevelInfo{{Optional: true}}, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageOptionalTagSummaryByIdResult", + Fields: RPCFields{ + { + Name: "optional_tag_summary", + ProtoTypeName: DataTypeString, + JSONPath: "optionalTagSummary", + Optional: true, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create execution plan for multiple requires (tagSummary + metadataScore) + storageStatus (field resolver)", + query: `query EntityLookup($representations: [_Any!]!, $checkHealth: Boolean!) { _entities(representations: $representations) { ... on Storage { __typename id tagSummary metadataScore storageStatus(checkHealth: $checkHealth) { ... on ActionSuccess { message } } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindResolve, + MethodName: "ResolveStorageStorageStatus", + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.storageStatus"), + Request: RPCMessage{ + Name: "ResolveStorageStorageStatusRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageStorageStatusContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveStorageStorageStatusArgs", + Fields: []RPCField{ + { + Name: "check_health", + ProtoTypeName: DataTypeBool, + JSONPath: "checkHealth", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveStorageStorageStatusResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageStorageStatusResult", + Fields: []RPCField{ + { + Name: "storage_status", + ProtoTypeName: DataTypeMessage, + JSONPath: "storageStatus", + Message: &RPCMessage{ + Name: "ActionResult", + OneOfType: OneOfTypeUnion, + MemberTypes: []string{"ActionSuccess", "ActionError"}, + FragmentFields: RPCFieldSelectionSet{ + "ActionSuccess": { + { + Name: "message", + ProtoTypeName: DataTypeString, + JSONPath: "message", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageTagSummaryById", + ResponsePath: buildPath("_entities.tagSummary"), + Request: RPCMessage{ + Name: "RequireStorageTagSummaryByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdFields", + Fields: []RPCField{ + { + Name: "tags", + ProtoTypeName: DataTypeString, + Repeated: true, + JSONPath: "tags", + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageTagSummaryByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageTagSummaryByIdResult", + Fields: RPCFields{ + { + Name: "tag_summary", + ProtoTypeName: DataTypeString, + JSONPath: "tagSummary", + }, + }, + }, + }, + }, + }, + }, + { + ID: 3, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageMetadataScoreById", + ResponsePath: buildPath("_entities.metadataScore"), + Request: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageMetadataScoreByIdResult", + Fields: RPCFields{ + { + Name: "metadata_score", + ProtoTypeName: DataTypeDouble, + JSONPath: "metadataScore", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + name: "Should create execution plan for processedMetadata (complex return requires) + linkedStorages (field resolver)", + query: `query EntityLookup($representations: [_Any!]!, $depth: Int!) { _entities(representations: $representations) { ... on Storage { __typename id processedMetadata { capacity zone priority } linkedStorages(depth: $depth) { id name } } } }`, + mapping: testMapping(), + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedMetadata", + SelectionSet: "metadata { capacity zone priority }", + }, + }, + expectedPlan: &RPCExecutionPlan{ + Calls: []RPCCall{ + { + ServiceName: "Products", + MethodName: "LookupStorageById", + Kind: CallKindEntity, + Request: RPCMessage{ + Name: "LookupStorageByIdRequest", + Fields: []RPCField{ + { + Name: "keys", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "LookupStorageByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "_entities", + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "__typename", + ProtoTypeName: DataTypeString, + JSONPath: "__typename", + StaticValue: "Storage", + }, + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + }, + }, + }, + { + ID: 1, + ServiceName: "Products", + Kind: CallKindResolve, + MethodName: "ResolveStorageLinkedStorages", + DependentCalls: []int{0}, + ResponsePath: buildPath("_entities.linkedStorages"), + Request: RPCMessage{ + Name: "ResolveStorageLinkedStoragesRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageLinkedStoragesContext", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + ResolvePath: buildPath("result.id"), + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + ResolvePath: buildPath("result.name"), + }, + { + Name: "location", + ProtoTypeName: DataTypeString, + JSONPath: "location", + ResolvePath: buildPath("result.location"), + }, + }, + }, + }, + { + Name: "field_args", + ProtoTypeName: DataTypeMessage, + JSONPath: "", + Message: &RPCMessage{ + Name: "ResolveStorageLinkedStoragesArgs", + Fields: []RPCField{ + { + Name: "depth", + ProtoTypeName: DataTypeInt32, + JSONPath: "depth", + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "ResolveStorageLinkedStoragesResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + JSONPath: "result", + Repeated: true, + Message: &RPCMessage{ + Name: "ResolveStorageLinkedStoragesResult", + Fields: []RPCField{ + { + Name: "linked_storages", + ProtoTypeName: DataTypeMessage, + JSONPath: "linkedStorages", + Repeated: true, + Message: &RPCMessage{ + Name: "Storage", + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + { + Name: "name", + ProtoTypeName: DataTypeString, + JSONPath: "name", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + ID: 2, + ServiceName: "Products", + Kind: CallKindRequired, + MethodName: "RequireStorageProcessedMetadataById", + ResponsePath: buildPath("_entities.processedMetadata"), + Request: RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdRequest", + Fields: []RPCField{ + { + Name: "context", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "representations", + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdContext", + Fields: []RPCField{ + { + Name: "key", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "LookupStorageByIdRequestKey", + MemberTypes: []string{"Storage"}, + Fields: []RPCField{ + { + Name: "id", + ProtoTypeName: DataTypeString, + JSONPath: "id", + }, + }, + }, + }, + { + Name: "fields", + ProtoTypeName: DataTypeMessage, + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdFields", + Fields: []RPCField{ + { + Name: "metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "metadata", + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdFields.StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + { + Name: "priority", + ProtoTypeName: DataTypeInt32, + JSONPath: "priority", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + Response: RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdResponse", + Fields: []RPCField{ + { + Name: "result", + ProtoTypeName: DataTypeMessage, + Repeated: true, + JSONPath: "result", + Message: &RPCMessage{ + Name: "RequireStorageProcessedMetadataByIdResult", + Fields: RPCFields{ + { + Name: "processed_metadata", + ProtoTypeName: DataTypeMessage, + JSONPath: "processedMetadata", + Message: &RPCMessage{ + Name: "StorageMetadata", + Fields: []RPCField{ + { + Name: "capacity", + ProtoTypeName: DataTypeInt32, + JSONPath: "capacity", + }, + { + Name: "zone", + ProtoTypeName: DataTypeString, + JSONPath: "zone", + }, + { + Name: "priority", + ProtoTypeName: DataTypeInt32, + JSONPath: "priority", + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tt.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + planner, err := NewPlanner("Products", tt.mapping, tt.federationConfigs) + if err != nil { + t.Fatalf("failed to create planner: %s", err) + } + plan, err := planner.PlanOperation(&queryDoc, &schemaDoc) + if err != nil { + t.Fatalf("failed to plan operation: %s", err) + } + + diff := cmp.Diff(tt.expectedPlan, plan) + if diff != "" { + t.Fatalf("execution plan mismatch: %s", diff) + } + }) + } +} diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_test.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_test.go index 074c2967de..77b60b8133 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_test.go +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_test.go @@ -91,7 +91,7 @@ func buildPath(path string) ast.Path { return items } -func TestQueryExecutionPlans(t *testing.T) { +func TestExecutionPlan_Query(t *testing.T) { t.Parallel() tests := []struct { name string @@ -1156,7 +1156,7 @@ func TestQueryExecutionPlans(t *testing.T) { } } -func TestQueryExecutionPlans_WithConfig(t *testing.T) { +func TestExecutionPlan_Query_WithConfig(t *testing.T) { t.Parallel() tests := []struct { name string @@ -1287,7 +1287,7 @@ func TestQueryExecutionPlans_WithConfig(t *testing.T) { } } -func TestProductExecutionPlan(t *testing.T) { +func TestExecutionPlan_Query_WithCategories(t *testing.T) { t.Parallel() tests := []struct { name string @@ -1507,7 +1507,7 @@ func TestProductExecutionPlan(t *testing.T) { } } -func TestProductExecutionPlanWithAliases(t *testing.T) { +func TestExecutionPlan_Operations_WithAliases(t *testing.T) { t.Parallel() tests := []struct { name string diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor.go index f04d44f47a..649b1fa5ca 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor.go +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor.go @@ -367,7 +367,13 @@ func (r *rpcPlanVisitor) EnterField(ref int) { return } - field, err := r.planCtx.buildField(r.walker.EnclosingTypeDefinition, fieldDefRef, fieldName, fieldAlias) + field, err := r.planCtx.buildField( + r.walker.EnclosingTypeDefinition.NameString(r.definition), + fieldDefRef, + fieldName, + fieldAlias, + ) + if err != nil { r.walker.StopWithInternalErr(err) return @@ -381,8 +387,8 @@ func (r *rpcPlanVisitor) EnterField(ref int) { r.fieldPath = r.fieldPath.WithFieldNameItem([]byte(prefix + field.Name)) - // check if we are inside of an inline fragment - if ref, ok := r.walker.ResolveInlineFragment(); ok { + // check if we are inside an inline fragment + if ref := r.walker.ResolveInlineFragment(); ref != ast.InvalidRef { if r.planInfo.currentResponseMessage.FragmentFields == nil { r.planInfo.currentResponseMessage.FragmentFields = make(RPCFieldSelectionSet) } diff --git a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor_federation.go b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor_federation.go index f7553c782c..bb00d9e9cc 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor_federation.go +++ b/v2/pkg/engine/datasource/grpc_datasource/execution_plan_visitor_federation.go @@ -15,27 +15,6 @@ import ( "github.com/wundergraph/graphql-go-tools/v2/pkg/operationreport" ) -// entityInfo contains the information about the entity that is being looked up. -type entityInfo struct { - typeName string - entityRootFieldRef int - entityInlineFragmentRef int -} - -type federationConfigData struct { - entityTypeName string - keyFields string - requiredFields string -} - -func newFederationConfigData(entityTypeName string) federationConfigData { - return federationConfigData{ - entityTypeName: entityTypeName, - keyFields: "", - requiredFields: "", - } -} - type rpcPlanVisitorFederation struct { walker *astvisitor.Walker operation *ast.Document @@ -43,9 +22,9 @@ type rpcPlanVisitorFederation struct { planCtx *rpcPlanningContext mapping *GRPCMapping - planInfo planningInfo - entityInfo entityInfo - federationConfigData []federationConfigData + planInfo planningInfo + entityInfo entityInfo + entityConfig entityConfig plan *RPCExecutionPlan subgraphName string @@ -70,7 +49,7 @@ func newRPCPlanVisitorFederation(config rpcPlanVisitorConfig) *rpcPlanVisitorFed entityRootFieldRef: ast.InvalidRef, entityInlineFragmentRef: ast.InvalidRef, }, - federationConfigData: parseFederationConfigData(config.federationConfigs), + entityConfig: parseFederationConfigData(config.federationConfigs), resolverFields: make([]resolverField, 0), fieldResolverAncestors: newStack[int](0), fieldPath: ast.Path{}.WithFieldNameItem([]byte("result")), @@ -105,19 +84,33 @@ func (r *rpcPlanVisitorFederation) EnterDocument(operation *ast.Document, defini // LeaveDocument implements astvisitor.DocumentVisitor. func (r *rpcPlanVisitorFederation) LeaveDocument(_, _ *ast.Document) { - if len(r.resolverFields) == 0 { - return - } - calls, err := r.planCtx.createResolverRPCCalls(r.subgraphName, r.resolverFields) if err != nil { r.walker.StopWithInternalErr(err) return } - r.plan.Calls = append(r.plan.Calls, calls...) - r.resolverFields = nil + if len(calls) > 0 { + r.plan.Calls = append(r.plan.Calls, calls...) + r.resolverFields = nil + } + for entityTypeName, entityConfigData := range r.entityConfig { + if len(entityConfigData.requiredFields) == 0 { + continue + } + + calls, err = r.planCtx.createRequiredFieldsRPCCalls(&r.callIndex, r.subgraphName, entityTypeName, entityConfigData) + if err != nil { + r.walker.StopWithInternalErr(err) + return + } + + if len(calls) > 0 { + r.plan.Calls = append(r.plan.Calls, calls...) + } + + } } // EnterOperationDefinition implements astvisitor.EnterOperationDefinitionVisitor. @@ -133,7 +126,7 @@ func (r *rpcPlanVisitorFederation) EnterOperationDefinition(ref int) { // EnterInlineFragment implements astvisitor.InlineFragmentVisitor. func (r *rpcPlanVisitorFederation) EnterInlineFragment(ref int) { fragmentName := r.operation.InlineFragmentTypeConditionNameString(ref) - fc, ok := r.FederationConfigDataByEntityTypeName(fragmentName) + entityConfigData, ok := r.entityConfig.getEntity(fragmentName) if !ok { return } @@ -151,12 +144,12 @@ func (r *rpcPlanVisitorFederation) EnterInlineFragment(ref int) { r.entityInfo.entityInlineFragmentRef = ref r.entityInfo.typeName = fragmentName - if err := r.resolveEntityInformation(ref, fc); err != nil { + if err := r.resolveEntityInformation(ref, fragmentName, entityConfigData); err != nil { r.walker.StopWithInternalErr(err) return } - r.scaffoldEntityLookup(fc) + r.scaffoldEntityLookup(fragmentName, entityConfigData) } // LeaveInlineFragment implements astvisitor.InlineFragmentVisitor. @@ -312,6 +305,13 @@ func (r *rpcPlanVisitorFederation) EnterField(ref int) { return } + // If the field is a required field, we don't want to add it to the current response message. + if r.planCtx.isRequiredField(fieldDefRef) { + r.enterRequiredField(ref, fieldDefRef, r.walker.EnclosingTypeDefinition) + r.walker.SkipNode() + return + } + // If the field is a field resolver, we need to handle it later in a separate resolver call. // We only store the information about the field and create the call later. if r.planCtx.isFieldResolver(fieldDefRef, inRootField) { @@ -333,7 +333,13 @@ func (r *rpcPlanVisitorFederation) EnterField(ref int) { return } - field, err := r.planCtx.buildField(r.walker.EnclosingTypeDefinition, fieldDefRef, fieldName, fieldAlias) + field, err := r.planCtx.buildField( + r.walker.EnclosingTypeDefinition.NameString(r.definition), + fieldDefRef, + fieldName, + fieldAlias, + ) + if err != nil { r.walker.StopWithInternalErr(err) return @@ -348,7 +354,7 @@ func (r *rpcPlanVisitorFederation) EnterField(ref int) { r.fieldPath = r.fieldPath.WithFieldNameItem([]byte(prefix + field.Name)) // check if we are inside of an inline fragment and not the entity inline fragment - if ref, ok := r.walker.ResolveInlineFragment(); ok && r.entityInfo.entityInlineFragmentRef != ref { + if ref := r.walker.ResolveInlineFragment(); ref != ast.InvalidRef && r.entityInfo.entityInlineFragmentRef != ref { if r.planInfo.currentResponseMessage.FragmentFields == nil { r.planInfo.currentResponseMessage.FragmentFields = make(RPCFieldSelectionSet) } @@ -384,6 +390,58 @@ func (r *rpcPlanVisitorFederation) LeaveField(ref int) { } } +// enterRequiredField handles the creation of the required field. +// TODO: Handle support for nested field resolvers. +func (r *rpcPlanVisitorFederation) enterRequiredField(ref, fieldDefRef int, parentTypeNode ast.Node) { + // build a field and add it to the entity config. + // If the field has selections, we need to recursively enter the subsequent selections and apply the logic in EnterField. + fieldName := r.operation.FieldNameString(ref) + + field, err := r.planCtx.buildField( + parentTypeNode.NameString(r.definition), + fieldDefRef, + fieldName, + r.operation.FieldAliasString(ref), + ) + + if err != nil { + r.walker.StopWithInternalErr(err) + return + } + + if field.ProtoTypeName == DataTypeMessage { + fieldDefType := r.definition.FieldDefinitionType(fieldDefRef) + message, err := r.planCtx.buildMessageForField(buildFieldMessageConfig{ + typeName: r.definition.ResolveTypeNameString(fieldDefType), + fieldsSelectionSetRef: r.operation.Fields[ref].SelectionSet, + }) + + if err != nil { + r.walker.StopWithInternalErr(err) + return + } + + field.Message = message + } + + config, exists := r.entityConfig.getEntity(r.entityInfo.typeName) + if !exists { + r.walker.StopWithInternalErr(fmt.Errorf("entity config not found for type %s", r.entityInfo.typeName)) + return + } + + index, requiredField := config.findRequiredField(fieldName) + if index == ast.InvalidRef { + r.walker.StopWithInternalErr(fmt.Errorf("required field not found for type %s and field %s", r.entityInfo.typeName, fieldName)) + return + } + + requiredField.ref = ref + requiredField.fieldDefRef = fieldDefRef + requiredField.resultField = field + config.requiredFields[index] = requiredField +} + // enterFieldResolver enters a field resolver. // ref is the field reference in the operation document. // fieldDefRef is the field definition reference in the definition document. @@ -432,7 +490,7 @@ func (r *rpcPlanVisitorFederation) enterFieldResolver(ref int, fieldDefRef int) r.fieldPath = r.fieldPath.WithFieldNameItem(buf.Bytes()) } -func (r *rpcPlanVisitorFederation) resolveEntityInformation(inlineFragmentRef int, fc federationConfigData) error { +func (r *rpcPlanVisitorFederation) resolveEntityInformation(inlineFragmentRef int, entityTypeName string, entityConfigData entityConfigData) error { fragmentName := r.operation.InlineFragmentTypeConditionNameString(inlineFragmentRef) node, found := r.definition.NodeByNameStr(r.operation.InlineFragmentTypeConditionNameString(inlineFragmentRef)) if !found { @@ -445,9 +503,9 @@ func (r *rpcPlanVisitorFederation) resolveEntityInformation(inlineFragmentRef in return nil } - rpcConfig, exists := r.mapping.FindEntityRPCConfig(fc.entityTypeName, fc.keyFields) + rpcConfig, exists := r.mapping.FindEntityRPCConfig(entityTypeName, entityConfigData.keyFields) if !exists { - return fmt.Errorf("entity type %s not found in mapping", fc.entityTypeName) + return fmt.Errorf("entity type %s not found in mapping", entityTypeName) } r.currentCall.Request.Name = rpcConfig.Request @@ -460,16 +518,16 @@ func (r *rpcPlanVisitorFederation) resolveEntityInformation(inlineFragmentRef in // scaffoldEntityLookup creates the entity lookup call structure // by creating the key field message and adding it to the current request message. // It also adds the results message to the current response message. -func (r *rpcPlanVisitorFederation) scaffoldEntityLookup(fc federationConfigData) { +func (r *rpcPlanVisitorFederation) scaffoldEntityLookup(typeName string, ecd entityConfigData) { keyFieldMessage := &RPCMessage{ - Name: r.currentCall.MethodName + "Key", + Name: r.currentCall.Request.Name + "Key", } walker := astvisitor.WalkerFromPool() defer walker.Release() requiredFieldsVisitor := newRequiredFieldsVisitor(walker, keyFieldMessage, r.planCtx) - err := requiredFieldsVisitor.visitWithDefaults(r.definition, fc.entityTypeName, fc.keyFields) + err := requiredFieldsVisitor.visitWithDefaults(r.definition, typeName, ecd.keyFields) if err != nil { r.walker.StopWithInternalErr(err) return @@ -485,14 +543,16 @@ func (r *rpcPlanVisitorFederation) scaffoldEntityLookup(fc federationConfigData) }, } + r.entityConfig.setEntityKeyMessage(typeName, keyFieldMessage) + entityMessage := &RPCMessage{ - Name: fc.entityTypeName, + Name: typeName, Fields: []RPCField{ { Name: "__typename", ProtoTypeName: DataTypeString, JSONPath: "__typename", - StaticValue: fc.entityTypeName, + StaticValue: typeName, }, }, } @@ -512,16 +572,6 @@ func (r *rpcPlanVisitorFederation) scaffoldEntityLookup(fc federationConfigData) r.planInfo.currentResponseMessage = entityMessage } -// FederationConfigDataByEntityTypeName returns the entity config data for the given entity type name. -func (r *rpcPlanVisitorFederation) FederationConfigDataByEntityTypeName(entityTypeName string) (federationConfigData, bool) { - for _, fc := range r.federationConfigData { - if fc.entityTypeName == entityTypeName { - return fc, true - } - } - return federationConfigData{}, false -} - func (r *rpcPlanVisitorFederation) IsEntityInlineFragment(node ast.Node) bool { if node.Kind != ast.NodeKindInlineFragment { return false @@ -534,36 +584,81 @@ func (r *rpcPlanVisitorFederation) IsEntityInlineFragment(node ast.Node) bool { return r.entityInfo.entityInlineFragmentRef == node.Ref } -func parseFederationConfigData(federationConfigs plan.FederationFieldConfigurations) []federationConfigData { - var out []federationConfigData +// entityInfo contains the information about the entity that is being looked up. +type entityInfo struct { + typeName string + entityRootFieldRef int + entityInlineFragmentRef int +} - typeNameIndexSet := map[string]int{} - typeNameIndex := 0 +type entityConfig map[string]entityConfigData - for _, fc := range federationConfigs { - // Create a new entity type if it doesn't exist - if _, ok := typeNameIndexSet[fc.TypeName]; !ok { - out = append(out, newFederationConfigData(fc.TypeName)) - typeNameIndexSet[fc.TypeName] = typeNameIndex - typeNameIndex++ +type requiredField struct { + fieldName string + ref int + fieldDefRef int + selectionSet string + resultField RPCField +} +type entityConfigData struct { + keyFields string + keyFieldMessage *RPCMessage + requiredFields []requiredField +} + +func (e entityConfigData) findRequiredField(fieldName string) (int, requiredField) { + for i, rf := range e.requiredFields { + if rf.fieldName == fieldName { + return i, rf } + } - data := &out[typeNameIndexSet[fc.TypeName]] + return ast.InvalidRef, requiredField{} +} - // Selection set determines whether we have key fields or additional required fields - if fc.SelectionSet == "" { - continue +func (e entityConfig) setEntity(typeName string, data entityConfigData) { + e[typeName] = data +} + +func (e entityConfig) setEntityKeyMessage(typeName string, message *RPCMessage) { + data, ok := e[typeName] + if !ok { + return + } + + data.keyFieldMessage = message + e[typeName] = data +} + +func (e entityConfig) getEntity(typeName string) (entityConfigData, bool) { + data, ok := e[typeName] + return data, ok +} + +func parseFederationConfigData(federationConfigs plan.FederationFieldConfigurations) entityConfig { + config := make(entityConfig) + + for _, fc := range federationConfigs { + data, ok := config.getEntity(fc.TypeName) + if !ok { + data = entityConfigData{ + requiredFields: make([]requiredField, 0), + } } - // This is a required field, so we add it to the required fields if fc.FieldName != "" { - data.requiredFields = fc.SelectionSet - continue + data.requiredFields = append(data.requiredFields, requiredField{ + fieldName: fc.FieldName, + ref: ast.InvalidRef, + fieldDefRef: ast.InvalidRef, + selectionSet: fc.SelectionSet, + }) + } else { + data.keyFields = fc.SelectionSet } - // This is a key field, so we add it to the key fields - data.keyFields = fc.SelectionSet + config.setEntity(fc.TypeName, data) } - return out + return config } diff --git a/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource.go b/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource.go index 8cd3643dff..a4f4309926 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource.go +++ b/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource.go @@ -184,7 +184,7 @@ func (d *DataSource) Load(ctx context.Context, headers http.Header, input []byte for _, result := range results { switch result.kind { - case CallKindResolve: + case CallKindResolve, CallKindRequired: err = builder.mergeWithPath(root, result.response, result.responsePath) default: root, err = builder.mergeValues(root, result.response) diff --git a/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_federation_test.go b/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_federation_test.go new file mode 100644 index 0000000000..c62cd0c7ea --- /dev/null +++ b/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_federation_test.go @@ -0,0 +1,1620 @@ +package grpcdatasource + +import ( + "context" + "encoding/json" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + "github.com/tidwall/gjson" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/astparser" + "github.com/wundergraph/graphql-go-tools/v2/pkg/engine/plan" + "github.com/wundergraph/graphql-go-tools/v2/pkg/grpctest" +) + +func Test_DataSource_Load_WithEntity_Calls(t *testing.T) { + conn, cleanup := setupTestGRPCServer(t) + t.Cleanup(cleanup) + + type graphqlError struct { + Message string `json:"message"` + } + type graphqlResponse struct { + Data map[string]interface{} `json:"data"` + Errors []graphqlError `json:"errors,omitempty"` + } + + testCases := []struct { + name string + query string + vars string + federationConfigs plan.FederationFieldConfigurations + validate func(t *testing.T, data map[string]interface{}) + validateError func(t *testing.T, errData []graphqlError) + }{ + { + name: "Query nullable fields type with all fields", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Product { id name } ...on Storage { id name } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Product","id":"1"}, + {"__typename":"Storage","id":"3"}, + {"__typename":"Product","id":"2"}, + {"__typename":"Storage","id":"4"} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + { + TypeName: "Storage", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.NotEmpty(t, entities, "_entities should not be empty") + + // Check required fields are present + require.Contains(t, entities[0], "id") + require.Contains(t, entities[0], "name") + require.Contains(t, entities[1], "id") + require.Contains(t, entities[1], "name") + + require.Len(t, entities, 4, "Should return 4 entities") + + product, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "product should be an object") + require.Equal(t, "1", product["id"]) + require.Equal(t, "Product 1", product["name"]) + + storage, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage should be an object") + require.Equal(t, "3", storage["id"]) + require.Equal(t, "Storage 3", storage["name"]) + + product2, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "product2 should be an object") + require.Equal(t, "2", product2["id"]) + require.Equal(t, "Product 2", product2["name"]) + + storage2, ok := entities[3].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "4", storage2["id"]) + require.Equal(t, "Storage 4", storage2["name"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query warehouse and expect an error", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Warehouse { id name } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Warehouse","id":"1"}, + {"__typename":"Warehouse","id":"2"}, + {"__typename":"Warehouse","id":"3"}, + {"__typename":"Warehouse","id":"4"} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Warehouse", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + require.Empty(t, data) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.NotEmpty(t, errorData) + require.Equal(t, "entity type Warehouse received 3 entities in the subgraph response, but 4 are expected", errorData[0].Message) + }, + }, + { + name: "Query Product with field resolvers", + query: `query($representations: [_Any!]!, $input: ShippingEstimateInput!) { _entities(representations: $representations) { ...on Product { id name price shippingEstimate(input: $input) } } }`, + vars: `{"variables":{ + "representations":[ + {"__typename":"Product","id":"1"}, + {"__typename":"Product","id":"2"}, + {"__typename":"Product","id":"3"} + ], + "input":{ + "destination":"INTERNATIONAL", + "weight":10.0, + "expedited":true + } + }}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + require.NotEmpty(t, data) + + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.NotEmpty(t, entities, "_entities should not be empty") + require.Len(t, entities, 3, "Should return 3 entities") + for index, entity := range entities { + entity, ok := entity.(map[string]interface{}) + require.True(t, ok, "entity should be an object") + productID := index + 1 + + require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) + require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) + require.InDelta(t, float64(99.99), entity["price"], 0.01) + require.InDelta(t, float64(77.49), entity["shippingEstimate"], 0.01) + } + + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + require.True(t, gjson.Valid(tc.vars)) + + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tc.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(t), testMapping()) + if err != nil { + t.Fatalf("failed to compile proto: %v", err) + } + + // Create the datasource + ds, err := NewDataSource(conn, DataSourceConfig{ + Operation: &queryDoc, + Definition: &schemaDoc, + SubgraphName: "Products", + Mapping: testMapping(), + Compiler: compiler, + FederationConfigs: tc.federationConfigs, + }) + require.NoError(t, err) + + // Execute the query through our datasource + input := fmt.Sprintf(`{"query":%q,"body":%s}`, tc.query, tc.vars) + data, err := ds.Load(context.Background(), nil, []byte(input)) + require.NoError(t, err) + + // Parse the response + var resp graphqlResponse + + err = json.Unmarshal(data, &resp) + require.NoError(t, err, "Failed to unmarshal response") + + tc.validate(t, resp.Data) + tc.validateError(t, resp.Errors) + }) + } +} + +func Test_DataSource_Load_WithEntity_Calls_WithCompositeTypes(t *testing.T) { + conn, cleanup := setupTestGRPCServer(t) + t.Cleanup(cleanup) + + type graphqlError struct { + Message string `json:"message"` + } + type graphqlResponse struct { + Data map[string]interface{} `json:"data"` + Errors []graphqlError `json:"errors,omitempty"` + } + + testCases := []struct { + name string + query string + vars string + federationConfigs plan.FederationFieldConfigurations + validate func(t *testing.T, data map[string]interface{}) + validateError func(t *testing.T, errData []graphqlError) + }{ + { + name: "Query Product with field resolver returning interface type", + query: `query($representations: [_Any!]!, $includeDetails: Boolean!) { _entities(representations: $representations) { ...on Product { __typename id name mascotRecommendation(includeDetails: $includeDetails) { ... on Cat { __typename name meowVolume } ... on Dog { __typename name barkVolume } } } } }`, + vars: `{ + "variables": { + "representations": [ + {"__typename":"Product","id":"1"}, + {"__typename":"Product","id":"2"}, + {"__typename":"Product","id":"3"} + ], + "includeDetails": true + } + }`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + require.NotEmpty(t, data) + + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.NotEmpty(t, entities, "_entities should not be empty") + require.Len(t, entities, 3, "Should return 3 entities") + + for index, entity := range entities { + entity, ok := entity.(map[string]interface{}) + require.True(t, ok, "entity should be an object") + productID := index + 1 + + require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) + require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) + + mascot, ok := entity["mascotRecommendation"].(map[string]interface{}) + require.True(t, ok, "mascotRecommendation should be an object") + + // Alternates between Cat and Dog based on index + if index%2 == 0 { + // Should be Cat + typename, ok := mascot["__typename"].(string) + require.True(t, ok, "__typename should be present") + require.Equal(t, "Cat", typename) + + require.Contains(t, mascot, "name") + require.Contains(t, mascot["name"], "MascotCat") + + // Validate meowVolume field + require.Contains(t, mascot, "meowVolume") + meowVolume, ok := mascot["meowVolume"].(float64) + require.True(t, ok, "meowVolume should be a number") + require.Greater(t, meowVolume, float64(0), "meowVolume should be greater than 0") + } else { + // Should be Dog + typename, ok := mascot["__typename"].(string) + require.True(t, ok, "__typename should be present") + require.Equal(t, "Dog", typename) + + require.Contains(t, mascot, "name") + require.Contains(t, mascot["name"], "MascotDog") + + // Validate barkVolume field + require.Contains(t, mascot, "barkVolume") + barkVolume, ok := mascot["barkVolume"].(float64) + require.True(t, ok, "barkVolume should be a number") + require.Greater(t, barkVolume, float64(0), "barkVolume should be greater than 0") + } + } + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Product with field resolver returning union type", + query: `query($representations: [_Any!]!, $checkAvailability: Boolean!) { _entities(representations: $representations) { ...on Product { __typename id name stockStatus(checkAvailability: $checkAvailability) { ... on ActionSuccess { __typename message timestamp } ... on ActionError { __typename message code } } } } }`, + vars: `{ + "variables": { + "representations": [ + {"__typename":"Product","id":"1"}, + {"__typename":"Product","id":"2"}, + {"__typename":"Product","id":"3"} + ], + "checkAvailability": false + } + }`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + require.NotEmpty(t, data) + + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.NotEmpty(t, entities, "_entities should not be empty") + require.Len(t, entities, 3, "Should return 3 entities") + + for index, entity := range entities { + entity, ok := entity.(map[string]interface{}) + require.True(t, ok, "entity should be an object") + productID := index + 1 + + require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) + require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) + + stockStatus, ok := entity["stockStatus"].(map[string]interface{}) + require.True(t, ok, "stockStatus should be an object") + + // With checkAvailability: false, all should be success + typename, ok := stockStatus["__typename"].(string) + require.True(t, ok, "__typename should be present") + require.Equal(t, "ActionSuccess", typename) + + require.Contains(t, stockStatus, "message") + require.Contains(t, stockStatus, "timestamp") + + message, ok := stockStatus["message"].(string) + require.True(t, ok, "message should be a string") + require.Contains(t, message, "in stock and available") + + timestamp, ok := stockStatus["timestamp"].(string) + require.True(t, ok, "timestamp should be a string") + require.NotEmpty(t, timestamp) + } + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Product with field resolver returning nested composite types", + query: `query($representations: [_Any!]!, $includeExtended: Boolean!) { _entities(representations: $representations) { ...on Product { __typename id name price productDetails(includeExtended: $includeExtended) { id description recommendedPet { __typename ... on Cat { name meowVolume } ... on Dog { name barkVolume } } reviewSummary { __typename ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } } }`, + vars: `{ + "variables": { + "representations": [ + {"__typename":"Product","id":"1"}, + {"__typename":"Product","id":"2"} + ], + "includeExtended": false + } + }`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Product", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + require.NotEmpty(t, data) + + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.NotEmpty(t, entities, "_entities should not be empty") + require.Len(t, entities, 2, "Should return 2 entities") + + for index, entity := range entities { + entity, ok := entity.(map[string]interface{}) + require.True(t, ok, "entity should be an object") + productID := index + 1 + + require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) + require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) + + details, ok := entity["productDetails"].(map[string]interface{}) + require.True(t, ok, "productDetails should be an object") + + require.Contains(t, details, "id") + require.Contains(t, details, "description") + require.Contains(t, details["description"], "Standard details") + + // Check recommendedPet (interface) + pet, ok := details["recommendedPet"].(map[string]interface{}) + require.True(t, ok, "recommendedPet should be an object") + + // Alternates between Cat and Dog + if index%2 == 0 { + // Should be Cat + petTypename, ok := pet["__typename"].(string) + require.True(t, ok, "pet __typename should be present") + require.Equal(t, "Cat", petTypename) + + require.Contains(t, pet, "name") + require.Contains(t, pet["name"], "RecommendedCat") + + // Validate meowVolume field + require.Contains(t, pet, "meowVolume") + meowVolume, ok := pet["meowVolume"].(float64) + require.True(t, ok, "meowVolume should be a number") + require.Greater(t, meowVolume, float64(0), "meowVolume should be greater than 0") + } else { + // Should be Dog + petTypename, ok := pet["__typename"].(string) + require.True(t, ok, "pet __typename should be present") + require.Equal(t, "Dog", petTypename) + + require.Contains(t, pet, "name") + require.Contains(t, pet["name"], "RecommendedDog") + + // Validate barkVolume field + require.Contains(t, pet, "barkVolume") + barkVolume, ok := pet["barkVolume"].(float64) + require.True(t, ok, "barkVolume should be a number") + require.Greater(t, barkVolume, float64(0), "barkVolume should be greater than 0") + } + + // Check reviewSummary (union) + reviewSummary, ok := details["reviewSummary"].(map[string]interface{}) + require.True(t, ok, "reviewSummary should be an object") + + // With includeExtended: false and low prices, should be success + reviewTypename, ok := reviewSummary["__typename"].(string) + require.True(t, ok, "reviewSummary __typename should be present") + require.Equal(t, "ActionSuccess", reviewTypename) + + require.Contains(t, reviewSummary, "message") + require.Contains(t, reviewSummary, "timestamp") + + message, ok := reviewSummary["message"].(string) + require.True(t, ok, "message should be a string") + require.Contains(t, message, "positive reviews") + + timestamp, ok := reviewSummary["timestamp"].(string) + require.True(t, ok, "timestamp should be a string") + require.NotEmpty(t, timestamp) + } + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tc.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(t), testMapping()) + if err != nil { + t.Fatalf("failed to compile proto: %v", err) + } + + // Create the datasource + ds, err := NewDataSource(conn, DataSourceConfig{ + Operation: &queryDoc, + Definition: &schemaDoc, + SubgraphName: "Products", + Mapping: testMapping(), + Compiler: compiler, + FederationConfigs: tc.federationConfigs, + }) + require.NoError(t, err) + + // Execute the query through our datasource + input := fmt.Sprintf(`{"query":%q,"body":%s}`, tc.query, tc.vars) + data, err := ds.Load(context.Background(), nil, []byte(input)) + require.NoError(t, err) + + // Parse the response + var resp graphqlResponse + + err = json.Unmarshal(data, &resp) + require.NoError(t, err, "Failed to unmarshal response") + + tc.validate(t, resp.Data) + tc.validateError(t, resp.Errors) + }) + } +} + +func Test_DataSource_Load_WithEntity_Calls_And_Requires(t *testing.T) { + conn, cleanup := setupTestGRPCServer(t) + t.Cleanup(cleanup) + + type graphqlError struct { + Message string `json:"message"` + } + type graphqlResponse struct { + Data map[string]interface{} `json:"data"` + Errors []graphqlError `json:"errors,omitempty"` + } + + testCases := []struct { + name string + query string + vars string + federationConfigs plan.FederationFieldConfigurations + validate func(t *testing.T, data map[string]interface{}) + validateError func(t *testing.T, errData []graphqlError) + }{ + { + /* + type Storage @key(fields: "id") { + id: ID! + name: String! + location: String! + itemCount: Int! @external + restockData: RestockData! @external + stockHealthScore: Float! @requires(fields: "itemCount restockData { lastRestockDate }") + } + */ + name: "Query Storage type with required field", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id name stockHealthScore } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","itemCount":100,"restockData":{"lastRestockDate":"2021-01-01"}}, + {"__typename":"Storage","id":"2","itemCount":200,"restockData":{"lastRestockDate":"2021-01-02"}}, + {"__typename":"Storage","id":"3","itemCount":300,"restockData":{"lastRestockDate":"2021-01-03"}}, + {"__typename":"Storage","id":"4","itemCount":400,"restockData":{"lastRestockDate":"2021-01-04"}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "stockHealthScore", + SelectionSet: "itemCount restockData { lastRestockDate }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 4, "Should return 4 entities") + + // Storage 1: itemCount=100, restockData provided -> score = 100*0.1 + 10 = 20.0 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "Storage 1", storage1["name"]) + require.Equal(t, 20.0, storage1["stockHealthScore"]) + + // Storage 2: itemCount=200, restockData provided -> score = 200*0.1 + 10 = 30.0 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "Storage 2", storage2["name"]) + require.Equal(t, 30.0, storage2["stockHealthScore"]) + + // Storage 3: itemCount=300, restockData provided -> score = 300*0.1 + 10 = 40.0 + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Equal(t, "Storage 3", storage3["name"]) + require.Equal(t, 40.0, storage3["stockHealthScore"]) + + // Storage 4: itemCount=400, restockData provided -> score = 400*0.1 + 10 = 50.0 + storage4, ok := entities[3].(map[string]interface{}) + require.True(t, ok, "storage4 should be an object") + require.Equal(t, "4", storage4["id"]) + require.Equal(t, "Storage 4", storage4["name"]) + require.Equal(t, 50.0, storage4["stockHealthScore"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with empty restockData (no +10 bonus)", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id name stockHealthScore } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","itemCount":100,"restockData":{"lastRestockDate":""}}, + {"__typename":"Storage","id":"2","itemCount":500,"restockData":{"lastRestockDate":""}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "stockHealthScore", + SelectionSet: "itemCount restockData { lastRestockDate }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: itemCount=100, no restockData -> score = 100*0.1 = 10.0 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "Storage 1", storage1["name"]) + require.Equal(t, 10.0, storage1["stockHealthScore"]) + + // Storage 2: itemCount=500, no restockData -> score = 500*0.1 = 50.0 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "Storage 2", storage2["name"]) + require.Equal(t, 50.0, storage2["stockHealthScore"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query single Storage entity with required field", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id name stockHealthScore } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"42","itemCount":1000,"restockData":{"lastRestockDate":"2024-06-15"}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "stockHealthScore", + SelectionSet: "itemCount restockData { lastRestockDate }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 1, "Should return 1 entity") + + // Storage 42: itemCount=1000, restockData provided -> score = 1000*0.1 + 10 = 110.0 + storage, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage should be an object") + require.Equal(t, "42", storage["id"]) + require.Equal(t, "Storage 42", storage["name"]) + require.Equal(t, 110.0, storage["stockHealthScore"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage without stockHealthScore field", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id name } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1"}, + {"__typename":"Storage","id":"2"} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Just id and name, no stockHealthScore + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "Storage 1", storage1["name"]) + require.NotContains(t, storage1, "stockHealthScore") + + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "Storage 2", storage2["name"]) + require.NotContains(t, storage2, "stockHealthScore") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with tagSummary requiring tags list", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id name tagSummary } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","tags":["electronics","gadgets","sale"]}, + {"__typename":"Storage","id":"2","tags":["books","fiction"]}, + {"__typename":"Storage","id":"3","tags":[]} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 3, "Should return 3 entities") + + // Storage 1: tags = ["electronics", "gadgets", "sale"] -> "electronics, gadgets, sale" + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "Storage 1", storage1["name"]) + require.Equal(t, "electronics, gadgets, sale", storage1["tagSummary"]) + + // Storage 2: tags = ["books", "fiction"] -> "books, fiction" + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "Storage 2", storage2["name"]) + require.Equal(t, "books, fiction", storage2["tagSummary"]) + + // Storage 3: tags = [] -> "" + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Equal(t, "Storage 3", storage3["name"]) + require.Equal(t, "", storage3["tagSummary"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with optionalTagSummary requiring nullable tags list", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id optionalTagSummary } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","optionalTags":["premium","featured"]}, + {"__typename":"Storage","id":"2","optionalTags":[]}, + {"__typename":"Storage","id":"3","optionalTags":null} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalTagSummary", + SelectionSet: "optionalTags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 3, "Should return 3 entities") + + // Storage 1: optionalTags = ["premium", "featured"] -> "premium, featured" + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "premium, featured", storage1["optionalTagSummary"]) + + // Storage 2: optionalTags = [] -> null (empty list returns nil) + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Nil(t, storage2["optionalTagSummary"]) + + // Storage 3: optionalTags = null -> null + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Nil(t, storage3["optionalTagSummary"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with metadataScore requiring nested object", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id metadataScore } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","metadata":{"capacity":100,"zone":"A"}}, + {"__typename":"Storage","id":"2","metadata":{"capacity":200,"zone":"B"}}, + {"__typename":"Storage","id":"3","metadata":{"capacity":300,"zone":"C"}}, + {"__typename":"Storage","id":"4","metadata":{"capacity":400,"zone":"D"}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 4, "Should return 4 entities") + + // Storage 1: capacity=100, zone="A" (weight=1.0) -> 100*1.0 = 100.0 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, 100.0, storage1["metadataScore"]) + + // Storage 2: capacity=200, zone="B" (weight=0.8) -> 200*0.8 = 160.0 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, 160.0, storage2["metadataScore"]) + + // Storage 3: capacity=300, zone="C" (weight=0.6) -> 300*0.6 = 180.0 + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Equal(t, 180.0, storage3["metadataScore"]) + + // Storage 4: capacity=400, zone="D" (weight=0.5) -> 400*0.5 = 200.0 + storage4, ok := entities[3].(map[string]interface{}) + require.True(t, ok, "storage4 should be an object") + require.Equal(t, "4", storage4["id"]) + require.Equal(t, 200.0, storage4["metadataScore"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with processedMetadata returning complex type", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id processedMetadata { capacity zone priority } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","metadata":{"capacity":50,"zone":"a","priority":5}}, + {"__typename":"Storage","id":"2","metadata":{"capacity":100,"zone":"b","priority":10}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedMetadata", + SelectionSet: "metadata { capacity zone priority }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: capacity=50*2=100, zone="A" (uppercase), priority=5+10=15 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + metadata1, ok := storage1["processedMetadata"].(map[string]interface{}) + require.True(t, ok, "processedMetadata should be an object") + require.Equal(t, float64(100), metadata1["capacity"]) + require.Equal(t, "A", metadata1["zone"]) + require.Equal(t, float64(15), metadata1["priority"]) + + // Storage 2: capacity=100*2=200, zone="B" (uppercase), priority=10+10=20 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + metadata2, ok := storage2["processedMetadata"].(map[string]interface{}) + require.True(t, ok, "processedMetadata should be an object") + require.Equal(t, float64(200), metadata2["capacity"]) + require.Equal(t, "B", metadata2["zone"]) + require.Equal(t, float64(20), metadata2["priority"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with optionalProcessedMetadata returning nullable complex type", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id optionalProcessedMetadata { capacity zone } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","metadata":{"capacity":100,"zone":"X"}}, + {"__typename":"Storage","id":"2","metadata":{"capacity":200,"zone":"Y"}}, + {"__typename":"Storage","id":"3","metadata":{"capacity":300,"zone":"Z"}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalProcessedMetadata", + SelectionSet: "metadata { capacity zone }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 3, "Should return 3 entities") + + // Storage 1 (index 0, even): returns processed metadata + // capacity=100*3=300, zone="x" (lowercase), priority=1 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + metadata1, ok := storage1["optionalProcessedMetadata"].(map[string]interface{}) + require.True(t, ok, "optionalProcessedMetadata should be an object for index 0") + require.Equal(t, float64(300), metadata1["capacity"]) + require.Equal(t, "x", metadata1["zone"]) + + // Storage 2 (index 1, odd): returns null + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Nil(t, storage2["optionalProcessedMetadata"]) + + // Storage 3 (index 2, even): returns processed metadata + // capacity=300*3=900, zone="z" (lowercase), priority=1 + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + metadata3, ok := storage3["optionalProcessedMetadata"].(map[string]interface{}) + require.True(t, ok, "optionalProcessedMetadata should be an object for index 2") + require.Equal(t, float64(900), metadata3["capacity"]) + require.Equal(t, "z", metadata3["zone"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with processedTags returning list", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id processedTags } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","tags":["foo","bar"]}, + {"__typename":"Storage","id":"2","tags":["hello"]} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedTags", + SelectionSet: "tags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: tags = ["foo", "bar"] -> ["PROCESSED_FOO", "PROCESSED_BAR"] + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + tags1, ok := storage1["processedTags"].([]interface{}) + require.True(t, ok, "processedTags should be an array") + require.Len(t, tags1, 2) + require.Equal(t, "PROCESSED_FOO", tags1[0]) + require.Equal(t, "PROCESSED_BAR", tags1[1]) + + // Storage 2: tags = ["hello"] -> ["PROCESSED_HELLO"] + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + tags2, ok := storage2["processedTags"].([]interface{}) + require.True(t, ok, "processedTags should be an array") + require.Len(t, tags2, 1) + require.Equal(t, "PROCESSED_HELLO", tags2[0]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with optionalProcessedTags returning nullable list", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id optionalProcessedTags } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","optionalTags":["Alpha","Beta"]}, + {"__typename":"Storage","id":"2","optionalTags":["Gamma"]}, + {"__typename":"Storage","id":"3","optionalTags":[]} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalProcessedTags", + SelectionSet: "optionalTags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 3, "Should return 3 entities") + + // Storage 1 (index 0, even with data): returns ["opt_alpha", "opt_beta"] + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + tags1, ok := storage1["optionalProcessedTags"].([]interface{}) + require.True(t, ok, "optionalProcessedTags should be an array for index 0") + require.Len(t, tags1, 2) + require.Equal(t, "OPT_alpha", tags1[0]) + require.Equal(t, "OPT_beta", tags1[1]) + + // Storage 2 (index 1, odd): returns null + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Nil(t, storage2["optionalProcessedTags"]) + + // Storage 3 (index 2, even but empty): returns null (empty list returns nil) + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Nil(t, storage3["optionalProcessedTags"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with processedMetadataHistory returning list of complex types", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id processedMetadataHistory { capacity zone priority } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","metadataHistory":[{"capacity":10,"zone":"A"},{"capacity":20,"zone":"B"}]}, + {"__typename":"Storage","id":"2","metadataHistory":[{"capacity":100,"zone":"X"}]} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedMetadataHistory", + SelectionSet: "metadataHistory { capacity zone }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: history with 2 items + // Item 0: capacity=10*1=10, zone="HIST_A", priority=1 + // Item 1: capacity=20*2=40, zone="HIST_B", priority=2 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + history1, ok := storage1["processedMetadataHistory"].([]interface{}) + require.True(t, ok, "processedMetadataHistory should be an array") + require.Len(t, history1, 2) + + item0, ok := history1[0].(map[string]interface{}) + require.True(t, ok, "history item should be an object") + require.Equal(t, float64(10), item0["capacity"]) + require.Equal(t, "HIST_A", item0["zone"]) + require.Equal(t, float64(1), item0["priority"]) + + item1, ok := history1[1].(map[string]interface{}) + require.True(t, ok, "history item should be an object") + require.Equal(t, float64(40), item1["capacity"]) + require.Equal(t, "HIST_B", item1["zone"]) + require.Equal(t, float64(2), item1["priority"]) + + // Storage 2: history with 1 item + // Item 0: capacity=100*1=100, zone="HIST_X", priority=1 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + history2, ok := storage2["processedMetadataHistory"].([]interface{}) + require.True(t, ok, "processedMetadataHistory should be an array") + require.Len(t, history2, 1) + + item2, ok := history2[0].(map[string]interface{}) + require.True(t, ok, "history item should be an object") + require.Equal(t, float64(100), item2["capacity"]) + require.Equal(t, "HIST_X", item2["zone"]) + require.Equal(t, float64(1), item2["priority"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with multiple requires fields in single query", + query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Storage { id name tagSummary metadataScore } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","tags":["tech","sale"],"metadata":{"capacity":100,"zone":"A"}}, + {"__typename":"Storage","id":"2","tags":["books"],"metadata":{"capacity":200,"zone":"B"}} + ]}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: tagSummary = "tech, sale", metadataScore = 100*1.0 = 100.0 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "Storage 1", storage1["name"]) + require.Equal(t, "tech, sale", storage1["tagSummary"]) + require.Equal(t, 100.0, storage1["metadataScore"]) + + // Storage 2: tagSummary = "books", metadataScore = 200*0.8 = 160.0 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "Storage 2", storage2["name"]) + require.Equal(t, "books", storage2["tagSummary"]) + require.Equal(t, 160.0, storage2["metadataScore"]) + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tc.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(t), testMapping()) + if err != nil { + t.Fatalf("failed to compile proto: %v", err) + } + + // Create the datasource + ds, err := NewDataSource(conn, DataSourceConfig{ + Operation: &queryDoc, + Definition: &schemaDoc, + SubgraphName: "Products", + Mapping: testMapping(), + Compiler: compiler, + FederationConfigs: tc.federationConfigs, + }) + require.NoError(t, err) + + // Execute the query through our datasource + input := fmt.Sprintf(`{"query":%q,"body":%s}`, tc.query, tc.vars) + data, err := ds.Load(context.Background(), nil, []byte(input)) + require.NoError(t, err) + + // Parse the response + var resp graphqlResponse + + err = json.Unmarshal(data, &resp) + require.NoError(t, err, "Failed to unmarshal response") + + tc.validate(t, resp.Data) + tc.validateError(t, resp.Errors) + }) + } +} + +func Test_DataSource_Load_WithEntity_Calls_And_Requires_And_FieldResolvers(t *testing.T) { + conn, cleanup := setupTestGRPCServer(t) + t.Cleanup(cleanup) + + type graphqlError struct { + Message string `json:"message"` + } + type graphqlResponse struct { + Data map[string]interface{} `json:"data"` + Errors []graphqlError `json:"errors,omitempty"` + } + + testCases := []struct { + name string + query string + vars string + federationConfigs plan.FederationFieldConfigurations + validate func(t *testing.T, data map[string]interface{}) + validateError func(t *testing.T, errData []graphqlError) + }{ + { + name: "Query Storage with tagSummary (requires) + storageStatus (field resolver)", + query: `query($representations: [_Any!]!, $checkHealth: Boolean!) { _entities(representations: $representations) { ...on Storage { __typename id tagSummary storageStatus(checkHealth: $checkHealth) { ... on ActionSuccess { message } ... on ActionError { message code } } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","tags":["electronics","gadgets","sale"]}, + {"__typename":"Storage","id":"2","tags":["books","fiction"]}, + {"__typename":"Storage","id":"3","tags":[]} + ],"checkHealth":false}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 3, "Should return 3 entities") + + // Storage 1: tags = ["electronics", "gadgets", "sale"] -> "electronics, gadgets, sale" + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "Storage", storage1["__typename"]) + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "electronics, gadgets, sale", storage1["tagSummary"]) + // Check storageStatus field resolver result + status1, ok := storage1["storageStatus"].(map[string]interface{}) + require.True(t, ok, "storageStatus should be an object") + require.Contains(t, status1, "message") + require.Contains(t, status1["message"], "is healthy") + + // Storage 2: tags = ["books", "fiction"] -> "books, fiction" + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "books, fiction", storage2["tagSummary"]) + status2, ok := storage2["storageStatus"].(map[string]interface{}) + require.True(t, ok, "storageStatus should be an object") + require.Contains(t, status2, "message") + + // Storage 3: tags = [] -> "" + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Equal(t, "", storage3["tagSummary"]) + status3, ok := storage3["storageStatus"].(map[string]interface{}) + require.True(t, ok, "storageStatus should be an object") + require.Contains(t, status3, "message") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with metadataScore (requires) + linkedStorages (field resolver)", + query: `query($representations: [_Any!]!, $depth: Int!) { _entities(representations: $representations) { ...on Storage { __typename id metadataScore linkedStorages(depth: $depth) { id name } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","metadata":{"capacity":100,"zone":"A"}}, + {"__typename":"Storage","id":"2","metadata":{"capacity":200,"zone":"B"}} + ],"depth":2}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: capacity=100, zone="A" (weight=1.0) -> 100*1.0 = 100.0 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "Storage", storage1["__typename"]) + require.Equal(t, "1", storage1["id"]) + require.Equal(t, 100.0, storage1["metadataScore"]) + // Check linkedStorages field resolver result + linked1, ok := storage1["linkedStorages"].([]interface{}) + require.True(t, ok, "linkedStorages should be an array") + require.Len(t, linked1, 2, "Should return 2 linked storages (depth=2)") + for i, linked := range linked1 { + linkedStorage, ok := linked.(map[string]interface{}) + require.True(t, ok, "linked storage should be an object") + require.Contains(t, linkedStorage["id"], fmt.Sprintf("linked-storage-1-%d", i)) + require.Contains(t, linkedStorage, "name") + } + + // Storage 2: capacity=200, zone="B" (weight=0.8) -> 200*0.8 = 160.0 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, 160.0, storage2["metadataScore"]) + linked2, ok := storage2["linkedStorages"].([]interface{}) + require.True(t, ok, "linkedStorages should be an array") + require.Len(t, linked2, 2, "Should return 2 linked storages (depth=2)") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with optionalTagSummary (nullable requires) + nearbyStorages (nullable field resolver)", + query: `query($representations: [_Any!]!, $radius: Int) { _entities(representations: $representations) { ...on Storage { __typename id optionalTagSummary nearbyStorages(radius: $radius) { id name } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","optionalTags":["premium","featured"]}, + {"__typename":"Storage","id":"2","optionalTags":[]}, + {"__typename":"Storage","id":"3","optionalTags":null} + ],"radius":3}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalTagSummary", + SelectionSet: "optionalTags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 3, "Should return 3 entities") + + // Storage 1: optionalTags = ["premium", "featured"] -> "premium, featured" + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "Storage", storage1["__typename"]) + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "premium, featured", storage1["optionalTagSummary"]) + // Check nearbyStorages field resolver result with radius=3 + nearby1, ok := storage1["nearbyStorages"].([]interface{}) + require.True(t, ok, "nearbyStorages should be an array") + require.Len(t, nearby1, 3, "Should return 3 nearby storages (radius=3)") + + // Storage 2: optionalTags = [] -> null (empty list returns nil) + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Nil(t, storage2["optionalTagSummary"]) + nearby2, ok := storage2["nearbyStorages"].([]interface{}) + require.True(t, ok, "nearbyStorages should be an array") + require.Len(t, nearby2, 3, "Should return 3 nearby storages (radius=3)") + + // Storage 3: optionalTags = null -> null + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Nil(t, storage3["optionalTagSummary"]) + nearby3, ok := storage3["nearbyStorages"].([]interface{}) + require.True(t, ok, "nearbyStorages should be an array") + require.Len(t, nearby3, 3, "Should return 3 nearby storages (radius=3)") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with optionalTagSummary (nullable requires) + nearbyStorages (null radius - tests null behavior)", + query: `query($representations: [_Any!]!, $radius: Int) { _entities(representations: $representations) { ...on Storage { __typename id optionalTagSummary nearbyStorages(radius: $radius) { id name } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","optionalTags":["premium"]}, + {"__typename":"Storage","id":"2","optionalTags":["featured"]}, + {"__typename":"Storage","id":"3","optionalTags":["sale"]}, + {"__typename":"Storage","id":"4","optionalTags":["discount"]} + ],"radius":null}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "optionalTagSummary", + SelectionSet: "optionalTags", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 4, "Should return 4 entities") + + // When radius is null, the mock service behavior is: + // - Even indices (0, 2): return empty list + // - Odd indices (1, 3): return null + + // Storage 1 (index 0, even): nearbyStorages should be empty list + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "Storage", storage1["__typename"]) + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "premium", storage1["optionalTagSummary"]) + nearby1, ok := storage1["nearbyStorages"].([]interface{}) + require.True(t, ok, "nearbyStorages should be an empty array for even index") + require.Len(t, nearby1, 0, "Should return empty list for index 0 when radius is null") + + // Storage 2 (index 1, odd): nearbyStorages should be null + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "featured", storage2["optionalTagSummary"]) + require.Nil(t, storage2["nearbyStorages"], "nearbyStorages should be null for odd index") + + // Storage 3 (index 2, even): nearbyStorages should be empty list + storage3, ok := entities[2].(map[string]interface{}) + require.True(t, ok, "storage3 should be an object") + require.Equal(t, "3", storage3["id"]) + require.Equal(t, "sale", storage3["optionalTagSummary"]) + nearby3, ok := storage3["nearbyStorages"].([]interface{}) + require.True(t, ok, "nearbyStorages should be an empty array for even index") + require.Len(t, nearby3, 0, "Should return empty list for index 2 when radius is null") + + // Storage 4 (index 3, odd): nearbyStorages should be null + storage4, ok := entities[3].(map[string]interface{}) + require.True(t, ok, "storage4 should be an object") + require.Equal(t, "4", storage4["id"]) + require.Equal(t, "discount", storage4["optionalTagSummary"]) + require.Nil(t, storage4["nearbyStorages"], "nearbyStorages should be null for odd index") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with multiple requires (tagSummary + metadataScore) + storageStatus (field resolver)", + query: `query($representations: [_Any!]!, $checkHealth: Boolean!) { _entities(representations: $representations) { ...on Storage { __typename id tagSummary metadataScore storageStatus(checkHealth: $checkHealth) { ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","tags":["tech","sale"],"metadata":{"capacity":100,"zone":"A"}}, + {"__typename":"Storage","id":"2","tags":["books"],"metadata":{"capacity":200,"zone":"B"}} + ],"checkHealth":false}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "tagSummary", + SelectionSet: "tags", + }, + { + TypeName: "Storage", + FieldName: "metadataScore", + SelectionSet: "metadata { capacity zone }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: tagSummary = "tech, sale", metadataScore = 100*1.0 = 100.0 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "Storage", storage1["__typename"]) + require.Equal(t, "1", storage1["id"]) + require.Equal(t, "tech, sale", storage1["tagSummary"]) + require.Equal(t, 100.0, storage1["metadataScore"]) + // Check storageStatus field resolver result + status1, ok := storage1["storageStatus"].(map[string]interface{}) + require.True(t, ok, "storageStatus should be an object") + require.Contains(t, status1, "message") + require.Contains(t, status1["message"], "is healthy") + require.Contains(t, status1, "timestamp") + + // Storage 2: tagSummary = "books", metadataScore = 200*0.8 = 160.0 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + require.Equal(t, "books", storage2["tagSummary"]) + require.Equal(t, 160.0, storage2["metadataScore"]) + status2, ok := storage2["storageStatus"].(map[string]interface{}) + require.True(t, ok, "storageStatus should be an object") + require.Contains(t, status2, "message") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + { + name: "Query Storage with processedMetadata (complex return requires) + linkedStorages (field resolver)", + query: `query($representations: [_Any!]!, $depth: Int!) { _entities(representations: $representations) { ...on Storage { __typename id processedMetadata { capacity zone priority } linkedStorages(depth: $depth) { id name } } } }`, + vars: `{"variables":{"representations":[ + {"__typename":"Storage","id":"1","metadata":{"capacity":50,"zone":"a","priority":5}}, + {"__typename":"Storage","id":"2","metadata":{"capacity":100,"zone":"b","priority":10}} + ],"depth":1}}`, + federationConfigs: plan.FederationFieldConfigurations{ + { + TypeName: "Storage", + SelectionSet: "id", + }, + { + TypeName: "Storage", + FieldName: "processedMetadata", + SelectionSet: "metadata { capacity zone priority }", + }, + }, + validate: func(t *testing.T, data map[string]interface{}) { + entities, ok := data["_entities"].([]interface{}) + require.True(t, ok, "_entities should be an array") + require.Len(t, entities, 2, "Should return 2 entities") + + // Storage 1: capacity=50*2=100, zone="A" (uppercase), priority=5+10=15 + storage1, ok := entities[0].(map[string]interface{}) + require.True(t, ok, "storage1 should be an object") + require.Equal(t, "Storage", storage1["__typename"]) + require.Equal(t, "1", storage1["id"]) + metadata1, ok := storage1["processedMetadata"].(map[string]interface{}) + require.True(t, ok, "processedMetadata should be an object") + require.Equal(t, float64(100), metadata1["capacity"]) + require.Equal(t, "A", metadata1["zone"]) + require.Equal(t, float64(15), metadata1["priority"]) + // Check linkedStorages field resolver result + linked1, ok := storage1["linkedStorages"].([]interface{}) + require.True(t, ok, "linkedStorages should be an array") + require.Len(t, linked1, 1, "Should return 1 linked storage (depth=1)") + linkedStorage1, ok := linked1[0].(map[string]interface{}) + require.True(t, ok, "linked storage should be an object") + require.Contains(t, linkedStorage1["id"], "linked-storage-1-0") + require.Contains(t, linkedStorage1, "name") + + // Storage 2: capacity=100*2=200, zone="B" (uppercase), priority=10+10=20 + storage2, ok := entities[1].(map[string]interface{}) + require.True(t, ok, "storage2 should be an object") + require.Equal(t, "2", storage2["id"]) + metadata2, ok := storage2["processedMetadata"].(map[string]interface{}) + require.True(t, ok, "processedMetadata should be an object") + require.Equal(t, float64(200), metadata2["capacity"]) + require.Equal(t, "B", metadata2["zone"]) + require.Equal(t, float64(20), metadata2["priority"]) + linked2, ok := storage2["linkedStorages"].([]interface{}) + require.True(t, ok, "linkedStorages should be an array") + require.Len(t, linked2, 1, "Should return 1 linked storage (depth=1)") + }, + validateError: func(t *testing.T, errorData []graphqlError) { + require.Empty(t, errorData) + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Parse the GraphQL schema + schemaDoc := grpctest.MustGraphQLSchema(t) + + // Parse the GraphQL query + queryDoc, report := astparser.ParseGraphqlDocumentString(tc.query) + if report.HasErrors() { + t.Fatalf("failed to parse query: %s", report.Error()) + } + + compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(t), testMapping()) + if err != nil { + t.Fatalf("failed to compile proto: %v", err) + } + + // Create the datasource + ds, err := NewDataSource(conn, DataSourceConfig{ + Operation: &queryDoc, + Definition: &schemaDoc, + SubgraphName: "Products", + Mapping: testMapping(), + Compiler: compiler, + FederationConfigs: tc.federationConfigs, + }) + require.NoError(t, err) + + // Execute the query through our datasource + input := fmt.Sprintf(`{"query":%q,"body":%s}`, tc.query, tc.vars) + data, err := ds.Load(context.Background(), nil, []byte(input)) + require.NoError(t, err) + + // Parse the response + var resp graphqlResponse + + err = json.Unmarshal(data, &resp) + require.NoError(t, err, "Failed to unmarshal response") + + tc.validate(t, resp.Data) + tc.validateError(t, resp.Errors) + }) + } +} diff --git a/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_test.go b/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_test.go index d9a3e0bce3..cb5e0025cc 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_test.go +++ b/v2/pkg/engine/datasource/grpc_datasource/grpc_datasource_test.go @@ -79,21 +79,20 @@ func Benchmark_DataSource_Load_WithFieldArguments(b *testing.B) { compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(b), testMapping()) require.NoError(b, err) - b.ReportAllocs() - b.ResetTimer() const subgraphName = "Products" - mapping := testMapping() - for b.Loop() { - ds, err := NewDataSource(conn, DataSourceConfig{ - Operation: &queryDoc, - Definition: &schemaDoc, - SubgraphName: subgraphName, - Compiler: compiler, - Mapping: mapping, - }) - require.NoError(b, err) + ds, err := NewDataSource(conn, DataSourceConfig{ + Operation: &queryDoc, + Definition: &schemaDoc, + SubgraphName: subgraphName, + Compiler: compiler, + Mapping: testMapping(), + }) + require.NoError(b, err) + b.ReportAllocs() + b.ResetTimer() + for b.Loop() { _, err = ds.Load(context.Background(), nil, []byte(`{"query":"`+query+`","body":`+variables+`}`)) require.NoError(b, err) } @@ -3544,498 +3543,6 @@ func Test_DataSource_Load_WithNestedLists(t *testing.T) { } } -func Test_DataSource_Load_WithEntity_Calls(t *testing.T) { - conn, cleanup := setupTestGRPCServer(t) - t.Cleanup(cleanup) - - type graphqlError struct { - Message string `json:"message"` - } - type graphqlResponse struct { - Data map[string]interface{} `json:"data"` - Errors []graphqlError `json:"errors,omitempty"` - } - - testCases := []struct { - name string - query string - vars string - federationConfigs plan.FederationFieldConfigurations - validate func(t *testing.T, data map[string]interface{}) - validateError func(t *testing.T, errData []graphqlError) - }{ - { - name: "Query nullable fields type with all fields", - query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Product { id name } ...on Storage { id name } } }`, - vars: `{"variables":{"representations":[ - {"__typename":"Product","id":"1"}, - {"__typename":"Storage","id":"3"}, - {"__typename":"Product","id":"2"}, - {"__typename":"Storage","id":"4"} - ]}}`, - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - { - TypeName: "Storage", - SelectionSet: "id", - }, - }, - validate: func(t *testing.T, data map[string]interface{}) { - entities, ok := data["_entities"].([]interface{}) - require.True(t, ok, "_entities should be an array") - require.NotEmpty(t, entities, "_entities should not be empty") - - // Check required fields are present - require.Contains(t, entities[0], "id") - require.Contains(t, entities[0], "name") - require.Contains(t, entities[1], "id") - require.Contains(t, entities[1], "name") - - require.Len(t, entities, 4, "Should return 4 entities") - - product, ok := entities[0].(map[string]interface{}) - require.True(t, ok, "product should be an object") - require.Equal(t, "1", product["id"]) - require.Equal(t, "Product 1", product["name"]) - - storage, ok := entities[1].(map[string]interface{}) - require.True(t, ok, "storage should be an object") - require.Equal(t, "3", storage["id"]) - require.Equal(t, "Storage 3", storage["name"]) - - product2, ok := entities[2].(map[string]interface{}) - require.True(t, ok, "product2 should be an object") - require.Equal(t, "2", product2["id"]) - require.Equal(t, "Product 2", product2["name"]) - - storage2, ok := entities[3].(map[string]interface{}) - require.True(t, ok, "storage2 should be an object") - require.Equal(t, "4", storage2["id"]) - require.Equal(t, "Storage 4", storage2["name"]) - }, - validateError: func(t *testing.T, errorData []graphqlError) { - require.Empty(t, errorData) - }, - }, - { - name: "Query warehouse and expect an error", - query: `query($representations: [_Any!]!) { _entities(representations: $representations) { ...on Warehouse { id name } } }`, - vars: `{"variables":{"representations":[ - {"__typename":"Warehouse","id":"1"}, - {"__typename":"Warehouse","id":"2"}, - {"__typename":"Warehouse","id":"3"}, - {"__typename":"Warehouse","id":"4"} - ]}}`, - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Warehouse", - SelectionSet: "id", - }, - }, - validate: func(t *testing.T, data map[string]interface{}) { - require.Empty(t, data) - }, - validateError: func(t *testing.T, errorData []graphqlError) { - require.NotEmpty(t, errorData) - require.Equal(t, "entity type Warehouse received 3 entities in the subgraph response, but 4 are expected", errorData[0].Message) - }, - }, - { - name: "Query Product with field resolvers", - query: `query($representations: [_Any!]!, $input: ShippingEstimateInput!) { _entities(representations: $representations) { ...on Product { id name price shippingEstimate(input: $input) } } }`, - vars: ` - { - "variables": - { - "representations":[ - {"__typename":"Product","id":"1"}, - {"__typename":"Product","id":"2"}, - {"__typename":"Product","id":"3"} - ], - "input":{ - "destination":"INTERNATIONAL", - "weight":10.0, - "expedited":true - } - }`, - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - validate: func(t *testing.T, data map[string]interface{}) { - require.NotEmpty(t, data) - - entities, ok := data["_entities"].([]interface{}) - require.True(t, ok, "_entities should be an array") - require.NotEmpty(t, entities, "_entities should not be empty") - require.Len(t, entities, 3, "Should return 3 entities") - for index, entity := range entities { - entity, ok := entity.(map[string]interface{}) - require.True(t, ok, "entity should be an object") - productID := index + 1 - - require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) - require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) - require.InDelta(t, float64(99.99), entity["price"], 0.01) - require.InDelta(t, float64(77.49), entity["shippingEstimate"], 0.01) - } - - }, - validateError: func(t *testing.T, errorData []graphqlError) { - require.Empty(t, errorData) - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - // Parse the GraphQL schema - schemaDoc := grpctest.MustGraphQLSchema(t) - - // Parse the GraphQL query - queryDoc, report := astparser.ParseGraphqlDocumentString(tc.query) - if report.HasErrors() { - t.Fatalf("failed to parse query: %s", report.Error()) - } - - compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(t), testMapping()) - if err != nil { - t.Fatalf("failed to compile proto: %v", err) - } - - // Create the datasource - ds, err := NewDataSource(conn, DataSourceConfig{ - Operation: &queryDoc, - Definition: &schemaDoc, - SubgraphName: "Products", - Mapping: testMapping(), - Compiler: compiler, - FederationConfigs: tc.federationConfigs, - }) - require.NoError(t, err) - - // Execute the query through our datasource - input := fmt.Sprintf(`{"query":%q,"body":%s}`, tc.query, tc.vars) - output, err := ds.Load(context.Background(), nil, []byte(input)) - require.NoError(t, err) - - // Parse the response - var resp graphqlResponse - - err = json.Unmarshal(output, &resp) - require.NoError(t, err, "Failed to unmarshal response") - - tc.validate(t, resp.Data) - tc.validateError(t, resp.Errors) - }) - } -} - -func Test_DataSource_Load_WithEntity_Calls_WithCompositeTypes(t *testing.T) { - conn, cleanup := setupTestGRPCServer(t) - t.Cleanup(cleanup) - - type graphqlError struct { - Message string `json:"message"` - } - type graphqlResponse struct { - Data map[string]interface{} `json:"data"` - Errors []graphqlError `json:"errors,omitempty"` - } - - testCases := []struct { - name string - query string - vars string - federationConfigs plan.FederationFieldConfigurations - validate func(t *testing.T, data map[string]interface{}) - validateError func(t *testing.T, errData []graphqlError) - }{ - { - name: "Query Product with field resolver returning interface type", - query: `query($representations: [_Any!]!, $includeDetails: Boolean!) { _entities(representations: $representations) { ...on Product { __typename id name mascotRecommendation(includeDetails: $includeDetails) { ... on Cat { __typename name meowVolume } ... on Dog { __typename name barkVolume } } } } }`, - vars: `{ - "variables": { - "representations": [ - {"__typename":"Product","id":"1"}, - {"__typename":"Product","id":"2"}, - {"__typename":"Product","id":"3"} - ], - "includeDetails": true - } - }`, - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - validate: func(t *testing.T, data map[string]interface{}) { - require.NotEmpty(t, data) - - entities, ok := data["_entities"].([]interface{}) - require.True(t, ok, "_entities should be an array") - require.NotEmpty(t, entities, "_entities should not be empty") - require.Len(t, entities, 3, "Should return 3 entities") - - for index, entity := range entities { - entity, ok := entity.(map[string]interface{}) - require.True(t, ok, "entity should be an object") - productID := index + 1 - - require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) - require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) - - mascot, ok := entity["mascotRecommendation"].(map[string]interface{}) - require.True(t, ok, "mascotRecommendation should be an object") - - // Alternates between Cat and Dog based on index - if index%2 == 0 { - // Should be Cat - typename, ok := mascot["__typename"].(string) - require.True(t, ok, "__typename should be present") - require.Equal(t, "Cat", typename) - - require.Contains(t, mascot, "name") - require.Contains(t, mascot["name"], "MascotCat") - - // Validate meowVolume field - require.Contains(t, mascot, "meowVolume") - meowVolume, ok := mascot["meowVolume"].(float64) - require.True(t, ok, "meowVolume should be a number") - require.Greater(t, meowVolume, float64(0), "meowVolume should be greater than 0") - } else { - // Should be Dog - typename, ok := mascot["__typename"].(string) - require.True(t, ok, "__typename should be present") - require.Equal(t, "Dog", typename) - - require.Contains(t, mascot, "name") - require.Contains(t, mascot["name"], "MascotDog") - - // Validate barkVolume field - require.Contains(t, mascot, "barkVolume") - barkVolume, ok := mascot["barkVolume"].(float64) - require.True(t, ok, "barkVolume should be a number") - require.Greater(t, barkVolume, float64(0), "barkVolume should be greater than 0") - } - } - }, - validateError: func(t *testing.T, errorData []graphqlError) { - require.Empty(t, errorData) - }, - }, - { - name: "Query Product with field resolver returning union type", - query: `query($representations: [_Any!]!, $checkAvailability: Boolean!) { _entities(representations: $representations) { ...on Product { __typename id name stockStatus(checkAvailability: $checkAvailability) { ... on ActionSuccess { __typename message timestamp } ... on ActionError { __typename message code } } } } }`, - vars: `{ - "variables": { - "representations": [ - {"__typename":"Product","id":"1"}, - {"__typename":"Product","id":"2"}, - {"__typename":"Product","id":"3"} - ], - "checkAvailability": false - } - }`, - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - validate: func(t *testing.T, data map[string]interface{}) { - require.NotEmpty(t, data) - - entities, ok := data["_entities"].([]interface{}) - require.True(t, ok, "_entities should be an array") - require.NotEmpty(t, entities, "_entities should not be empty") - require.Len(t, entities, 3, "Should return 3 entities") - - for index, entity := range entities { - entity, ok := entity.(map[string]interface{}) - require.True(t, ok, "entity should be an object") - productID := index + 1 - - require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) - require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) - - stockStatus, ok := entity["stockStatus"].(map[string]interface{}) - require.True(t, ok, "stockStatus should be an object") - - // With checkAvailability: false, all should be success - typename, ok := stockStatus["__typename"].(string) - require.True(t, ok, "__typename should be present") - require.Equal(t, "ActionSuccess", typename) - - require.Contains(t, stockStatus, "message") - require.Contains(t, stockStatus, "timestamp") - - message, ok := stockStatus["message"].(string) - require.True(t, ok, "message should be a string") - require.Contains(t, message, "in stock and available") - - timestamp, ok := stockStatus["timestamp"].(string) - require.True(t, ok, "timestamp should be a string") - require.NotEmpty(t, timestamp) - } - }, - validateError: func(t *testing.T, errorData []graphqlError) { - require.Empty(t, errorData) - }, - }, - { - name: "Query Product with field resolver returning nested composite types", - query: `query($representations: [_Any!]!, $includeExtended: Boolean!) { _entities(representations: $representations) { ...on Product { __typename id name price productDetails(includeExtended: $includeExtended) { id description recommendedPet { __typename ... on Cat { name meowVolume } ... on Dog { name barkVolume } } reviewSummary { __typename ... on ActionSuccess { message timestamp } ... on ActionError { message code } } } } } }`, - vars: `{ - "variables": { - "representations": [ - {"__typename":"Product","id":"1"}, - {"__typename":"Product","id":"2"} - ], - "includeExtended": false - } - }`, - federationConfigs: plan.FederationFieldConfigurations{ - { - TypeName: "Product", - SelectionSet: "id", - }, - }, - validate: func(t *testing.T, data map[string]interface{}) { - require.NotEmpty(t, data) - - entities, ok := data["_entities"].([]interface{}) - require.True(t, ok, "_entities should be an array") - require.NotEmpty(t, entities, "_entities should not be empty") - require.Len(t, entities, 2, "Should return 2 entities") - - for index, entity := range entities { - entity, ok := entity.(map[string]interface{}) - require.True(t, ok, "entity should be an object") - productID := index + 1 - - require.Equal(t, fmt.Sprintf("%d", productID), entity["id"]) - require.Equal(t, fmt.Sprintf("Product %d", productID), entity["name"]) - - details, ok := entity["productDetails"].(map[string]interface{}) - require.True(t, ok, "productDetails should be an object") - - require.Contains(t, details, "id") - require.Contains(t, details, "description") - require.Contains(t, details["description"], "Standard details") - - // Check recommendedPet (interface) - pet, ok := details["recommendedPet"].(map[string]interface{}) - require.True(t, ok, "recommendedPet should be an object") - - // Alternates between Cat and Dog - if index%2 == 0 { - // Should be Cat - petTypename, ok := pet["__typename"].(string) - require.True(t, ok, "pet __typename should be present") - require.Equal(t, "Cat", petTypename) - - require.Contains(t, pet, "name") - require.Contains(t, pet["name"], "RecommendedCat") - - // Validate meowVolume field - require.Contains(t, pet, "meowVolume") - meowVolume, ok := pet["meowVolume"].(float64) - require.True(t, ok, "meowVolume should be a number") - require.Greater(t, meowVolume, float64(0), "meowVolume should be greater than 0") - } else { - // Should be Dog - petTypename, ok := pet["__typename"].(string) - require.True(t, ok, "pet __typename should be present") - require.Equal(t, "Dog", petTypename) - - require.Contains(t, pet, "name") - require.Contains(t, pet["name"], "RecommendedDog") - - // Validate barkVolume field - require.Contains(t, pet, "barkVolume") - barkVolume, ok := pet["barkVolume"].(float64) - require.True(t, ok, "barkVolume should be a number") - require.Greater(t, barkVolume, float64(0), "barkVolume should be greater than 0") - } - - // Check reviewSummary (union) - reviewSummary, ok := details["reviewSummary"].(map[string]interface{}) - require.True(t, ok, "reviewSummary should be an object") - - // With includeExtended: false and low prices, should be success - reviewTypename, ok := reviewSummary["__typename"].(string) - require.True(t, ok, "reviewSummary __typename should be present") - require.Equal(t, "ActionSuccess", reviewTypename) - - require.Contains(t, reviewSummary, "message") - require.Contains(t, reviewSummary, "timestamp") - - message, ok := reviewSummary["message"].(string) - require.True(t, ok, "message should be a string") - require.Contains(t, message, "positive reviews") - - timestamp, ok := reviewSummary["timestamp"].(string) - require.True(t, ok, "timestamp should be a string") - require.NotEmpty(t, timestamp) - } - }, - validateError: func(t *testing.T, errorData []graphqlError) { - require.Empty(t, errorData) - }, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - // Parse the GraphQL schema - schemaDoc := grpctest.MustGraphQLSchema(t) - - // Parse the GraphQL query - queryDoc, report := astparser.ParseGraphqlDocumentString(tc.query) - if report.HasErrors() { - t.Fatalf("failed to parse query: %s", report.Error()) - } - - compiler, err := NewProtoCompiler(grpctest.MustProtoSchema(t), testMapping()) - if err != nil { - t.Fatalf("failed to compile proto: %v", err) - } - - // Create the datasource - ds, err := NewDataSource(conn, DataSourceConfig{ - Operation: &queryDoc, - Definition: &schemaDoc, - SubgraphName: "Products", - Mapping: testMapping(), - Compiler: compiler, - FederationConfigs: tc.federationConfigs, - }) - require.NoError(t, err) - - // Execute the query through our datasource - input := fmt.Sprintf(`{"query":%q,"body":%s}`, tc.query, tc.vars) - data, err := ds.Load(context.Background(), nil, []byte(input)) - require.NoError(t, err) - - // Parse the response - var resp graphqlResponse - - err = json.Unmarshal(data, &resp) - require.NoError(t, err, "Failed to unmarshal response") - - tc.validate(t, resp.Data) - tc.validateError(t, resp.Errors) - }) - } -} - func Test_Datasource_Load_WithFieldResolvers(t *testing.T) { conn, cleanup := setupTestGRPCServer(t) t.Cleanup(cleanup) diff --git a/v2/pkg/engine/datasource/grpc_datasource/mapping_test_helper.go b/v2/pkg/engine/datasource/grpc_datasource/mapping_test_helper.go index 0ff2e69a41..8b201f874d 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/mapping_test_helper.go +++ b/v2/pkg/engine/datasource/grpc_datasource/mapping_test_helper.go @@ -394,6 +394,41 @@ func testMapping() *GRPCMapping { Response: "ResolveProductProductDetailsResponse", }, }, + "Storage": { + "storageStatus": { + FieldMappingData: FieldMapData{ + TargetName: "storage_status", + ArgumentMappings: FieldArgumentMap{ + "checkHealth": "check_health", + }, + }, + RPC: "ResolveStorageStorageStatus", + Request: "ResolveStorageStorageStatusRequest", + Response: "ResolveStorageStorageStatusResponse", + }, + "linkedStorages": { + FieldMappingData: FieldMapData{ + TargetName: "linked_storages", + ArgumentMappings: FieldArgumentMap{ + "depth": "depth", + }, + }, + RPC: "ResolveStorageLinkedStorages", + Request: "ResolveStorageLinkedStoragesRequest", + Response: "ResolveStorageLinkedStoragesResponse", + }, + "nearbyStorages": { + FieldMappingData: FieldMapData{ + TargetName: "nearby_storages", + ArgumentMappings: FieldArgumentMap{ + "radius": "radius", + }, + }, + RPC: "ResolveStorageNearbyStorages", + Request: "ResolveStorageNearbyStoragesRequest", + Response: "ResolveStorageNearbyStoragesResponse", + }, + }, "Subcategory": { "itemCount": { FieldMappingData: FieldMapData{ @@ -451,6 +486,80 @@ func testMapping() *GRPCMapping { Request: "LookupStorageByIdRequest", Response: "LookupStorageByIdResponse", }, + RequiredFields: RequiredFieldsRPCMapping{ + "stockHealthScore": { + TargetName: "stock_health_score", + RPCConfig: RPCConfig{ + RPC: "RequireStorageStockHealthScoreById", + Request: "RequireStorageStockHealthScoreByIdRequest", + Response: "RequireStorageStockHealthScoreByIdResponse", + }, + }, + "tagSummary": { + TargetName: "tag_summary", + RPCConfig: RPCConfig{ + RPC: "RequireStorageTagSummaryById", + Request: "RequireStorageTagSummaryByIdRequest", + Response: "RequireStorageTagSummaryByIdResponse", + }, + }, + "optionalTagSummary": { + TargetName: "optional_tag_summary", + RPCConfig: RPCConfig{ + RPC: "RequireStorageOptionalTagSummaryById", + Request: "RequireStorageOptionalTagSummaryByIdRequest", + Response: "RequireStorageOptionalTagSummaryByIdResponse", + }, + }, + "metadataScore": { + TargetName: "metadata_score", + RPCConfig: RPCConfig{ + RPC: "RequireStorageMetadataScoreById", + Request: "RequireStorageMetadataScoreByIdRequest", + Response: "RequireStorageMetadataScoreByIdResponse", + }, + }, + "processedMetadata": { + TargetName: "processed_metadata", + RPCConfig: RPCConfig{ + RPC: "RequireStorageProcessedMetadataById", + Request: "RequireStorageProcessedMetadataByIdRequest", + Response: "RequireStorageProcessedMetadataByIdResponse", + }, + }, + "optionalProcessedMetadata": { + TargetName: "optional_processed_metadata", + RPCConfig: RPCConfig{ + RPC: "RequireStorageOptionalProcessedMetadataById", + Request: "RequireStorageOptionalProcessedMetadataByIdRequest", + Response: "RequireStorageOptionalProcessedMetadataByIdResponse", + }, + }, + "processedTags": { + TargetName: "processed_tags", + RPCConfig: RPCConfig{ + RPC: "RequireStorageProcessedTagsById", + Request: "RequireStorageProcessedTagsByIdRequest", + Response: "RequireStorageProcessedTagsByIdResponse", + }, + }, + "optionalProcessedTags": { + TargetName: "optional_processed_tags", + RPCConfig: RPCConfig{ + RPC: "RequireStorageOptionalProcessedTagsById", + Request: "RequireStorageOptionalProcessedTagsByIdRequest", + Response: "RequireStorageOptionalProcessedTagsByIdResponse", + }, + }, + "processedMetadataHistory": { + TargetName: "processed_metadata_history", + RPCConfig: RPCConfig{ + RPC: "RequireStorageProcessedMetadataHistoryById", + Request: "RequireStorageProcessedMetadataHistoryByIdRequest", + Response: "RequireStorageProcessedMetadataHistoryByIdResponse", + }, + }, + }, }, }, "Warehouse": { @@ -461,6 +570,16 @@ func testMapping() *GRPCMapping { Request: "LookupWarehouseByIdRequest", Response: "LookupWarehouseByIdResponse", }, + RequiredFields: RequiredFieldsRPCMapping{ + "stockHealthScore": { + TargetName: "stock_health_score", + RPCConfig: RPCConfig{ + RPC: "RequireWarehouseStockHealthScoreById", + Request: "RequireWarehouseStockHealthScoreByIdRequest", + Response: "RequireWarehouseStockHealthScoreByIdResponse", + }, + }, + }, }, }, }, @@ -779,6 +898,69 @@ func testMapping() *GRPCMapping { "location": { TargetName: "location", }, + "itemCount": { + TargetName: "item_count", + }, + "restockData": { + TargetName: "restock_data", + }, + "stockHealthScore": { + TargetName: "stock_health_score", + }, + "tags": { + TargetName: "tags", + }, + "optionalTags": { + TargetName: "optional_tags", + }, + "metadata": { + TargetName: "metadata", + }, + "metadataHistory": { + TargetName: "metadata_history", + }, + "tagSummary": { + TargetName: "tag_summary", + }, + "optionalTagSummary": { + TargetName: "optional_tag_summary", + }, + "metadataScore": { + TargetName: "metadata_score", + }, + "processedMetadata": { + TargetName: "processed_metadata", + }, + "optionalProcessedMetadata": { + TargetName: "optional_processed_metadata", + }, + "processedTags": { + TargetName: "processed_tags", + }, + "optionalProcessedTags": { + TargetName: "optional_processed_tags", + }, + "processedMetadataHistory": { + TargetName: "processed_metadata_history", + }, + "storageStatus": { + TargetName: "storage_status", + ArgumentMappings: FieldArgumentMap{ + "checkHealth": "check_health", + }, + }, + "linkedStorages": { + TargetName: "linked_storages", + ArgumentMappings: FieldArgumentMap{ + "depth": "depth", + }, + }, + "nearbyStorages": { + TargetName: "nearby_storages", + ArgumentMappings: FieldArgumentMap{ + "radius": "radius", + }, + }, }, "Warehouse": { "id": { @@ -790,6 +972,31 @@ func testMapping() *GRPCMapping { "location": { TargetName: "location", }, + "inventoryCount": { + TargetName: "inventory_count", + }, + "restockData": { + TargetName: "restock_data", + }, + "stockHealthScore": { + TargetName: "stock_health_score", + }, + }, + "RestockData": { + "lastRestockDate": { + TargetName: "last_restock_date", + }, + }, + "StorageMetadata": { + "capacity": { + TargetName: "capacity", + }, + "zone": { + TargetName: "zone", + }, + "priority": { + TargetName: "priority", + }, }, "User": { "id": { diff --git a/v2/pkg/engine/datasource/grpc_datasource/required_fields_visitor.go b/v2/pkg/engine/datasource/grpc_datasource/required_fields_visitor.go index 42c132ec2c..cd1a86ae6e 100644 --- a/v2/pkg/engine/datasource/grpc_datasource/required_fields_visitor.go +++ b/v2/pkg/engine/datasource/grpc_datasource/required_fields_visitor.go @@ -3,6 +3,7 @@ package grpcdatasource import ( "errors" "fmt" + "strings" "github.com/wundergraph/graphql-go-tools/v2/pkg/ast" "github.com/wundergraph/graphql-go-tools/v2/pkg/astvisitor" @@ -14,6 +15,9 @@ type requiredFieldVisitorConfig struct { includeMemberType bool // skipFieldResolvers indicates if the field resolvers should be skipped. skipFieldResolvers bool + // referenceNestedMessages instrcuts the visitor the format the messages names to reference inner protobuf messages. + // Inner messages have an fqn like "MyMessage.NestedMessage" + referenceNestedMessages bool } // requiredFieldsVisitor is a visitor that visits the required fields of a message. @@ -29,7 +33,8 @@ type requiredFieldsVisitor struct { messageAncestors []*RPCMessage - skipFieldResolvers bool + skipFieldResolvers bool + referenceNestedMessages bool } // newRequiredFieldsVisitor creates a new requiredFieldsVisitor. @@ -55,8 +60,9 @@ func newRequiredFieldsVisitor(walker *astvisitor.Walker, message *RPCMessage, pl // To achieve that we create a fragment with the required fields and walk it. func (r *requiredFieldsVisitor) visitWithDefaults(definition *ast.Document, typeName, requiredFields string) error { return r.visit(definition, typeName, requiredFields, requiredFieldVisitorConfig{ - includeMemberType: true, - skipFieldResolvers: false, + includeMemberType: true, + skipFieldResolvers: false, + referenceNestedMessages: false, }) } @@ -73,6 +79,7 @@ func (r *requiredFieldsVisitor) visit(definition *ast.Document, typeName, requir } r.skipFieldResolvers = options.skipFieldResolvers + r.referenceNestedMessages = options.referenceNestedMessages r.walker.Walk(doc, definition, report) if report.HasErrors() { @@ -111,6 +118,10 @@ func (r *requiredFieldsVisitor) EnterSelectionSet(ref int) { } r.messageAncestors = append(r.messageAncestors, r.message) + if r.referenceNestedMessages { + lastField.Message.Name = r.formatNestedMessageName(lastField.Message.Name) + } + r.message = lastField.Message if err := r.handleCompositeType(r.walker.EnclosingTypeDefinition); err != nil { @@ -151,7 +162,7 @@ func (r *requiredFieldsVisitor) EnterField(ref int) { return } - field, err := r.planCtx.buildField(r.walker.EnclosingTypeDefinition, fd, fieldName, "") + field, err := r.planCtx.buildField(r.walker.EnclosingTypeDefinition.NameString(r.definition), fd, fieldName, "") if err != nil { r.walker.StopWithInternalErr(err) return @@ -196,3 +207,18 @@ func (r *requiredFieldsVisitor) handleCompositeType(node ast.Node) error { return nil } + +// formatNestedMessageName formats the name of a nested message. +// It returns the full qualified name of the nested message. +func (r *requiredFieldsVisitor) formatNestedMessageName(name string) string { + if len(r.messageAncestors) == 0 { + return name + } + + builder := strings.Builder{} + builder.WriteString(r.messageAncestors[len(r.messageAncestors)-1].Name) + builder.WriteString(".") + builder.WriteString(name) + + return builder.String() +} diff --git a/v2/pkg/grpctest/Makefile b/v2/pkg/grpctest/Makefile index b4ed22c2b8..14e008ef17 100644 --- a/v2/pkg/grpctest/Makefile +++ b/v2/pkg/grpctest/Makefile @@ -17,7 +17,7 @@ build-plugin: .PHONY: regenerate-proto regenerate-proto: - pnpx wgc@latest grpc-service generate -i testdata/products.graphqls -o testdata/ -p productv1 -g "cosmo/pkg/proto/productv1;productv1" Product + pnpx wgc@latest grpc-service generate -i testdata/products.graphqls -o testdata/ -p productv1 -g "cosmo/pkg/proto/productv1;productv1" ProductService mv $(mkfile_dir)/testdata/service.proto $(mkfile_dir)/product.proto rm -f $(mkfile_dir)/testdata/service.proto.lock.json @@ -30,7 +30,7 @@ generate-mapping-code: regenerate-proto .PHONY: regenerate-proto-local regenerate-proto-local: - pnpx tsx --env-file ../../../../cosmo/cli/.env ../../../../cosmo/cli/src/index.ts grpc-service generate -i testdata/products.graphqls -o testdata/ -p productv1 -g "cosmo/pkg/proto/productv1;productv1" Product + pnpx tsx --env-file ../../../../cosmo/cli/.env ../../../../cosmo/cli/src/index.ts grpc-service generate -i testdata/products.graphqls -o testdata/ -p productv1 -g "cosmo/pkg/proto/productv1;productv1" ProductService mv $(mkfile_dir)/testdata/service.proto $(mkfile_dir)/product.proto rm -f $(mkfile_dir)/testdata/service.proto.lock.json @@ -41,8 +41,8 @@ generate-mapping-code-local: regenerate-proto-local rm -f $(mkfile_dir)/testdata/mapping.json +.PHONY: generate-all +generate-all: generate-mapping-code generate-proto + .PHONY: generate-all-local generate-all-local: generate-mapping-code-local generate-proto - -.PHONY: generate-all -generate-all: generate-mapping-code generate-proto \ No newline at end of file diff --git a/v2/pkg/grpctest/cmd/mapping_helper/main.go b/v2/pkg/grpctest/cmd/mapping_helper/main.go index 390c27584b..b33cde4aa8 100644 --- a/v2/pkg/grpctest/cmd/mapping_helper/main.go +++ b/v2/pkg/grpctest/cmd/mapping_helper/main.go @@ -36,12 +36,20 @@ type OperationMapping struct { } type EntityMapping struct { - TypeName string `json:"typeName"` - Kind string `json:"kind"` - Key string `json:"key"` - RPC string `json:"rpc"` - Request string `json:"request"` - Response string `json:"response"` + TypeName string `json:"typeName"` + Kind string `json:"kind"` + Key string `json:"key"` + RPC string `json:"rpc"` + Request string `json:"request"` + Response string `json:"response"` + RequiredFieldMappings []RequiredFieldMapping `json:"requiredFieldMappings,omitempty"` +} + +type RequiredFieldMapping struct { + FieldMapping FieldMapping `json:"fieldMapping"` + RPC string `json:"rpc"` + Request string `json:"request"` + Response string `json:"response"` } type ResolveRPC struct { diff --git a/v2/pkg/grpctest/cmd/mapping_helper/templates/grpctest_mapping.tmpl b/v2/pkg/grpctest/cmd/mapping_helper/templates/grpctest_mapping.tmpl index ec8f37cce0..5cfd8e3b75 100644 --- a/v2/pkg/grpctest/cmd/mapping_helper/templates/grpctest_mapping.tmpl +++ b/v2/pkg/grpctest/cmd/mapping_helper/templates/grpctest_mapping.tmpl @@ -74,6 +74,20 @@ func DefaultGRPCMapping() *grpcdatasource.GRPCMapping { Request: "{{$entity.Request}}", Response: "{{$entity.Response}}", }, + {{- if $entity.RequiredFieldMappings}} + RequiredFields: grpcdatasource.RequiredFieldsRPCMapping{ + {{- range $idx, $required := $entity.RequiredFieldMappings}} + "{{$required.FieldMapping.Original}}": { + TargetName: "{{$required.FieldMapping.Mapped}}", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "{{$required.RPC}}", + Request: "{{$required.Request}}", + Response: "{{$required.Response}}", + }, + }, + {{- end}} + }, + {{- end}} }, }, {{- end }} diff --git a/v2/pkg/grpctest/mapping/mapping.go b/v2/pkg/grpctest/mapping/mapping.go index c636ed69d8..5fb699ec62 100644 --- a/v2/pkg/grpctest/mapping/mapping.go +++ b/v2/pkg/grpctest/mapping/mapping.go @@ -401,6 +401,41 @@ func DefaultGRPCMapping() *grpcdatasource.GRPCMapping { Response: "ResolveProductProductDetailsResponse", }, }, + "Storage": { + "storageStatus": { + FieldMappingData: grpcdatasource.FieldMapData{ + TargetName: "storage_status", + ArgumentMappings: grpcdatasource.FieldArgumentMap{ + "checkHealth": "check_health", + }, + }, + RPC: "ResolveStorageStorageStatus", + Request: "ResolveStorageStorageStatusRequest", + Response: "ResolveStorageStorageStatusResponse", + }, + "linkedStorages": { + FieldMappingData: grpcdatasource.FieldMapData{ + TargetName: "linked_storages", + ArgumentMappings: grpcdatasource.FieldArgumentMap{ + "depth": "depth", + }, + }, + RPC: "ResolveStorageLinkedStorages", + Request: "ResolveStorageLinkedStoragesRequest", + Response: "ResolveStorageLinkedStoragesResponse", + }, + "nearbyStorages": { + FieldMappingData: grpcdatasource.FieldMapData{ + TargetName: "nearby_storages", + ArgumentMappings: grpcdatasource.FieldArgumentMap{ + "radius": "radius", + }, + }, + RPC: "ResolveStorageNearbyStorages", + Request: "ResolveStorageNearbyStoragesRequest", + Response: "ResolveStorageNearbyStoragesResponse", + }, + }, "Subcategory": { "itemCount": { FieldMappingData: grpcdatasource.FieldMapData{ @@ -458,6 +493,80 @@ func DefaultGRPCMapping() *grpcdatasource.GRPCMapping { Request: "LookupStorageByIdRequest", Response: "LookupStorageByIdResponse", }, + RequiredFields: grpcdatasource.RequiredFieldsRPCMapping{ + "stockHealthScore": { + TargetName: "stock_health_score", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageStockHealthScoreById", + Request: "RequireStorageStockHealthScoreByIdRequest", + Response: "RequireStorageStockHealthScoreByIdResponse", + }, + }, + "tagSummary": { + TargetName: "tag_summary", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageTagSummaryById", + Request: "RequireStorageTagSummaryByIdRequest", + Response: "RequireStorageTagSummaryByIdResponse", + }, + }, + "optionalTagSummary": { + TargetName: "optional_tag_summary", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageOptionalTagSummaryById", + Request: "RequireStorageOptionalTagSummaryByIdRequest", + Response: "RequireStorageOptionalTagSummaryByIdResponse", + }, + }, + "metadataScore": { + TargetName: "metadata_score", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageMetadataScoreById", + Request: "RequireStorageMetadataScoreByIdRequest", + Response: "RequireStorageMetadataScoreByIdResponse", + }, + }, + "processedMetadata": { + TargetName: "processed_metadata", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageProcessedMetadataById", + Request: "RequireStorageProcessedMetadataByIdRequest", + Response: "RequireStorageProcessedMetadataByIdResponse", + }, + }, + "optionalProcessedMetadata": { + TargetName: "optional_processed_metadata", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageOptionalProcessedMetadataById", + Request: "RequireStorageOptionalProcessedMetadataByIdRequest", + Response: "RequireStorageOptionalProcessedMetadataByIdResponse", + }, + }, + "processedTags": { + TargetName: "processed_tags", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageProcessedTagsById", + Request: "RequireStorageProcessedTagsByIdRequest", + Response: "RequireStorageProcessedTagsByIdResponse", + }, + }, + "optionalProcessedTags": { + TargetName: "optional_processed_tags", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageOptionalProcessedTagsById", + Request: "RequireStorageOptionalProcessedTagsByIdRequest", + Response: "RequireStorageOptionalProcessedTagsByIdResponse", + }, + }, + "processedMetadataHistory": { + TargetName: "processed_metadata_history", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireStorageProcessedMetadataHistoryById", + Request: "RequireStorageProcessedMetadataHistoryByIdRequest", + Response: "RequireStorageProcessedMetadataHistoryByIdResponse", + }, + }, + }, }, }, "Warehouse": { @@ -468,6 +577,16 @@ func DefaultGRPCMapping() *grpcdatasource.GRPCMapping { Request: "LookupWarehouseByIdRequest", Response: "LookupWarehouseByIdResponse", }, + RequiredFields: grpcdatasource.RequiredFieldsRPCMapping{ + "stockHealthScore": { + TargetName: "stock_health_score", + RPCConfig: grpcdatasource.RPCConfig{ + RPC: "RequireWarehouseStockHealthScoreById", + Request: "RequireWarehouseStockHealthScoreByIdRequest", + Response: "RequireWarehouseStockHealthScoreByIdResponse", + }, + }, + }, }, }, }, @@ -786,6 +905,69 @@ func DefaultGRPCMapping() *grpcdatasource.GRPCMapping { "location": { TargetName: "location", }, + "itemCount": { + TargetName: "item_count", + }, + "restockData": { + TargetName: "restock_data", + }, + "stockHealthScore": { + TargetName: "stock_health_score", + }, + "tags": { + TargetName: "tags", + }, + "optionalTags": { + TargetName: "optional_tags", + }, + "metadata": { + TargetName: "metadata", + }, + "metadataHistory": { + TargetName: "metadata_history", + }, + "tagSummary": { + TargetName: "tag_summary", + }, + "optionalTagSummary": { + TargetName: "optional_tag_summary", + }, + "metadataScore": { + TargetName: "metadata_score", + }, + "processedMetadata": { + TargetName: "processed_metadata", + }, + "optionalProcessedMetadata": { + TargetName: "optional_processed_metadata", + }, + "processedTags": { + TargetName: "processed_tags", + }, + "optionalProcessedTags": { + TargetName: "optional_processed_tags", + }, + "processedMetadataHistory": { + TargetName: "processed_metadata_history", + }, + "storageStatus": { + TargetName: "storage_status", + ArgumentMappings: grpcdatasource.FieldArgumentMap{ + "checkHealth": "check_health", + }, + }, + "linkedStorages": { + TargetName: "linked_storages", + ArgumentMappings: grpcdatasource.FieldArgumentMap{ + "depth": "depth", + }, + }, + "nearbyStorages": { + TargetName: "nearby_storages", + ArgumentMappings: grpcdatasource.FieldArgumentMap{ + "radius": "radius", + }, + }, }, "Warehouse": { "id": { @@ -797,6 +979,31 @@ func DefaultGRPCMapping() *grpcdatasource.GRPCMapping { "location": { TargetName: "location", }, + "inventoryCount": { + TargetName: "inventory_count", + }, + "restockData": { + TargetName: "restock_data", + }, + "stockHealthScore": { + TargetName: "stock_health_score", + }, + }, + "RestockData": { + "lastRestockDate": { + TargetName: "last_restock_date", + }, + }, + "StorageMetadata": { + "capacity": { + TargetName: "capacity", + }, + "zone": { + TargetName: "zone", + }, + "priority": { + TargetName: "priority", + }, }, "User": { "id": { diff --git a/v2/pkg/grpctest/mockservice_requires.go b/v2/pkg/grpctest/mockservice_requires.go new file mode 100644 index 0000000000..f9208eb5c3 --- /dev/null +++ b/v2/pkg/grpctest/mockservice_requires.go @@ -0,0 +1,263 @@ +package grpctest + +import ( + "context" + "strings" + + "google.golang.org/protobuf/types/known/wrapperspb" + + "github.com/wundergraph/graphql-go-tools/v2/pkg/grpctest/productv1" +) + +// RequireStorageStockHealthScoreById implements [productv1.ProductServiceServer]. +func (s *MockService) RequireStorageStockHealthScoreById(_ context.Context, req *productv1.RequireStorageStockHealthScoreByIdRequest) (*productv1.RequireStorageStockHealthScoreByIdResponse, error) { + results := make([]*productv1.RequireStorageStockHealthScoreByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + // Score = itemCount * 0.1, +10 if restockData provided + score := float64(fields.GetItemCount()) * 0.1 + if fields.GetRestockData().GetLastRestockDate() != "" { + score += 10.0 + } + + results = append(results, &productv1.RequireStorageStockHealthScoreByIdResult{ + StockHealthScore: score, + }) + } + + return &productv1.RequireStorageStockHealthScoreByIdResponse{Result: results}, nil +} + +// RequireWarehouseStockHealthScoreById implements [productv1.ProductServiceServer]. +func (s *MockService) RequireWarehouseStockHealthScoreById(_ context.Context, req *productv1.RequireWarehouseStockHealthScoreByIdRequest) (*productv1.RequireWarehouseStockHealthScoreByIdResponse, error) { + results := make([]*productv1.RequireWarehouseStockHealthScoreByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + // Score = inventoryCount * 0.1, +10 if restockData provided + score := float64(fields.GetInventoryCount()) * 0.1 + if fields.GetRestockData().GetLastRestockDate() != "" { + score += 10.0 + } + + results = append(results, &productv1.RequireWarehouseStockHealthScoreByIdResult{ + StockHealthScore: score, + }) + } + + return &productv1.RequireWarehouseStockHealthScoreByIdResponse{Result: results}, nil +} + +// RequireStorageTagSummaryById implements [productv1.ProductServiceServer]. +func (s *MockService) RequireStorageTagSummaryById(_ context.Context, req *productv1.RequireStorageTagSummaryByIdRequest) (*productv1.RequireStorageTagSummaryByIdResponse, error) { + results := make([]*productv1.RequireStorageTagSummaryByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + // Concatenate all tags into a summary string + tags := fields.GetTags() + tagSummary := strings.Join(tags, ", ") + + results = append(results, &productv1.RequireStorageTagSummaryByIdResult{ + TagSummary: tagSummary, + }) + } + + return &productv1.RequireStorageTagSummaryByIdResponse{Result: results}, nil +} + +// RequireStorageOptionalTagSummaryById implements [productv1.ProductServiceServer]. +func (s *MockService) RequireStorageOptionalTagSummaryById(_ context.Context, req *productv1.RequireStorageOptionalTagSummaryByIdRequest) (*productv1.RequireStorageOptionalTagSummaryByIdResponse, error) { + results := make([]*productv1.RequireStorageOptionalTagSummaryByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + optionalTags := fields.GetOptionalTags() + + var optionalTagSummary *wrapperspb.StringValue + // If optionalTags is provided and has items, create summary + if optionalTags != nil && optionalTags.GetList() != nil && len(optionalTags.GetList().GetItems()) > 0 { + summary := strings.Join(optionalTags.GetList().GetItems(), ", ") + optionalTagSummary = &wrapperspb.StringValue{Value: summary} + } + // Otherwise, optionalTagSummary remains nil + + results = append(results, &productv1.RequireStorageOptionalTagSummaryByIdResult{ + OptionalTagSummary: optionalTagSummary, + }) + } + + return &productv1.RequireStorageOptionalTagSummaryByIdResponse{Result: results}, nil +} + +// RequireStorageMetadataScoreById implements [productv1.ProductServiceServer]. +func (s *MockService) RequireStorageMetadataScoreById(_ context.Context, req *productv1.RequireStorageMetadataScoreByIdRequest) (*productv1.RequireStorageMetadataScoreByIdResponse, error) { + results := make([]*productv1.RequireStorageMetadataScoreByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + metadata := fields.GetMetadata() + + // Calculate score based on metadata: capacity * zone_weight + // Zone weights: "A" = 1.0, "B" = 0.8, "C" = 0.6, default = 0.5 + capacity := float64(metadata.GetCapacity()) + zone := metadata.GetZone() + + var zoneWeight float64 + switch zone { + case "A": + zoneWeight = 1.0 + case "B": + zoneWeight = 0.8 + case "C": + zoneWeight = 0.6 + default: + zoneWeight = 0.5 + } + + score := capacity * zoneWeight + + results = append(results, &productv1.RequireStorageMetadataScoreByIdResult{ + MetadataScore: score, + }) + } + + return &productv1.RequireStorageMetadataScoreByIdResponse{Result: results}, nil +} + +// RequireStorageProcessedMetadataById implements [productv1.ProductServiceServer]. +// Returns a complex type (StorageMetadata) with processed values. +func (s *MockService) RequireStorageProcessedMetadataById(_ context.Context, req *productv1.RequireStorageProcessedMetadataByIdRequest) (*productv1.RequireStorageProcessedMetadataByIdResponse, error) { + results := make([]*productv1.RequireStorageProcessedMetadataByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + metadata := fields.GetMetadata() + + // Process metadata: double capacity, uppercase zone, adjust priority + processedMetadata := &productv1.StorageMetadata{ + Capacity: metadata.GetCapacity() * 2, + Zone: strings.ToUpper(metadata.GetZone()), + Priority: metadata.GetPriority() + 10, + } + + results = append(results, &productv1.RequireStorageProcessedMetadataByIdResult{ + ProcessedMetadata: processedMetadata, + }) + } + + return &productv1.RequireStorageProcessedMetadataByIdResponse{Result: results}, nil +} + +// RequireStorageOptionalProcessedMetadataById implements [productv1.ProductServiceServer]. +// Returns a nullable complex type (StorageMetadata). +func (s *MockService) RequireStorageOptionalProcessedMetadataById(_ context.Context, req *productv1.RequireStorageOptionalProcessedMetadataByIdRequest) (*productv1.RequireStorageOptionalProcessedMetadataByIdResponse, error) { + results := make([]*productv1.RequireStorageOptionalProcessedMetadataByIdResult, 0, len(req.GetContext())) + + for i, ctx := range req.GetContext() { + fields := ctx.GetFields() + metadata := fields.GetMetadata() + + var processedMetadata *productv1.StorageMetadata + // Return nil for every other item to test nullable behavior + if i%2 == 0 && metadata != nil { + processedMetadata = &productv1.StorageMetadata{ + Capacity: metadata.GetCapacity() * 3, + Zone: strings.ToLower(metadata.GetZone()), + Priority: 1, // Default priority for optional + } + } + // For odd indices, processedMetadata remains nil + + results = append(results, &productv1.RequireStorageOptionalProcessedMetadataByIdResult{ + OptionalProcessedMetadata: processedMetadata, + }) + } + + return &productv1.RequireStorageOptionalProcessedMetadataByIdResponse{Result: results}, nil +} + +// RequireStorageProcessedTagsById implements [productv1.ProductServiceServer]. +// Returns a list of strings with processed tags. +func (s *MockService) RequireStorageProcessedTagsById(_ context.Context, req *productv1.RequireStorageProcessedTagsByIdRequest) (*productv1.RequireStorageProcessedTagsByIdResponse, error) { + results := make([]*productv1.RequireStorageProcessedTagsByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + tags := fields.GetTags() + + // Process tags: uppercase and add prefix + processedTags := make([]string, 0, len(tags)) + for _, tag := range tags { + processedTags = append(processedTags, "PROCESSED_"+strings.ToUpper(tag)) + } + + results = append(results, &productv1.RequireStorageProcessedTagsByIdResult{ + ProcessedTags: processedTags, + }) + } + + return &productv1.RequireStorageProcessedTagsByIdResponse{Result: results}, nil +} + +// RequireStorageOptionalProcessedTagsById implements [productv1.ProductServiceServer]. +// Returns a nullable list of strings. +func (s *MockService) RequireStorageOptionalProcessedTagsById(_ context.Context, req *productv1.RequireStorageOptionalProcessedTagsByIdRequest) (*productv1.RequireStorageOptionalProcessedTagsByIdResponse, error) { + results := make([]*productv1.RequireStorageOptionalProcessedTagsByIdResult, 0, len(req.GetContext())) + + for i, ctx := range req.GetContext() { + fields := ctx.GetFields() + optionalTags := fields.GetOptionalTags() + + var processedTags *productv1.ListOfString + // Return nil for every other item to test nullable behavior + // Also return nil if optionalTags is empty (matching RequireStorageOptionalTagSummaryById behavior) + if i%2 == 0 && optionalTags != nil && optionalTags.GetList() != nil && len(optionalTags.GetList().GetItems()) > 0 { + items := optionalTags.GetList().GetItems() + processed := make([]string, 0, len(items)) + for _, tag := range items { + processed = append(processed, "OPT_"+strings.ToLower(tag)) + } + processedTags = &productv1.ListOfString{ + List: &productv1.ListOfString_List{ + Items: processed, + }, + } + } + // For odd indices, processedTags remains nil + + results = append(results, &productv1.RequireStorageOptionalProcessedTagsByIdResult{ + OptionalProcessedTags: processedTags, + }) + } + + return &productv1.RequireStorageOptionalProcessedTagsByIdResponse{Result: results}, nil +} + +// RequireStorageProcessedMetadataHistoryById implements [productv1.ProductServiceServer]. +// Returns a list of complex types (StorageMetadata). +func (s *MockService) RequireStorageProcessedMetadataHistoryById(_ context.Context, req *productv1.RequireStorageProcessedMetadataHistoryByIdRequest) (*productv1.RequireStorageProcessedMetadataHistoryByIdResponse, error) { + results := make([]*productv1.RequireStorageProcessedMetadataHistoryByIdResult, 0, len(req.GetContext())) + + for _, ctx := range req.GetContext() { + fields := ctx.GetFields() + metadataHistory := fields.GetMetadataHistory() + + // Process each metadata in history: multiply capacity by index+1, prefix zone + processedHistory := make([]*productv1.StorageMetadata, 0, len(metadataHistory)) + for j, metadata := range metadataHistory { + processedHistory = append(processedHistory, &productv1.StorageMetadata{ + Capacity: metadata.GetCapacity() * int32(j+1), + Zone: "HIST_" + metadata.GetZone(), + Priority: int32(j + 1), + }) + } + + results = append(results, &productv1.RequireStorageProcessedMetadataHistoryByIdResult{ + ProcessedMetadataHistory: processedHistory, + }) + } + + return &productv1.RequireStorageProcessedMetadataHistoryByIdResponse{Result: results}, nil +} diff --git a/v2/pkg/grpctest/mockservice_resolve.go b/v2/pkg/grpctest/mockservice_resolve.go index cda977d106..8cc6a0ea76 100644 --- a/v2/pkg/grpctest/mockservice_resolve.go +++ b/v2/pkg/grpctest/mockservice_resolve.go @@ -886,3 +886,125 @@ func (s *MockService) ResolveCategoryProductCount(ctx context.Context, req *prod return resp, nil } + +// ResolveStorageStorageStatus implements productv1.ProductServiceServer. +func (s *MockService) ResolveStorageStorageStatus(_ context.Context, req *productv1.ResolveStorageStorageStatusRequest) (*productv1.ResolveStorageStorageStatusResponse, error) { + results := make([]*productv1.ResolveStorageStorageStatusResult, 0, len(req.GetContext())) + + checkHealth := false + if req.GetFieldArgs() != nil { + checkHealth = req.GetFieldArgs().GetCheckHealth() + } + + for i, ctx := range req.GetContext() { + var actionResult *productv1.ActionResult + + if checkHealth && i%3 == 0 { + // Return error status for health check failures + actionResult = &productv1.ActionResult{ + Value: &productv1.ActionResult_ActionError{ + ActionError: &productv1.ActionError{ + Message: fmt.Sprintf("Health check failed for storage %s", ctx.GetName()), + Code: "STORAGE_HEALTH_CHECK_FAILED", + }, + }, + } + } else { + // Return success status + actionResult = &productv1.ActionResult{ + Value: &productv1.ActionResult_ActionSuccess{ + ActionSuccess: &productv1.ActionSuccess{ + Message: fmt.Sprintf("Storage %s is healthy", ctx.GetName()), + Timestamp: "2024-01-01T00:00:00Z", + }, + }, + } + } + + results = append(results, &productv1.ResolveStorageStorageStatusResult{ + StorageStatus: actionResult, + }) + } + + return &productv1.ResolveStorageStorageStatusResponse{ + Result: results, + }, nil +} + +// ResolveStorageLinkedStorages implements productv1.ProductServiceServer. +func (s *MockService) ResolveStorageLinkedStorages(_ context.Context, req *productv1.ResolveStorageLinkedStoragesRequest) (*productv1.ResolveStorageLinkedStoragesResponse, error) { + results := make([]*productv1.ResolveStorageLinkedStoragesResult, len(req.GetContext())) + + depth := int32(1) + if req.GetFieldArgs() != nil { + depth = req.GetFieldArgs().GetDepth() + } + + for i, ctx := range req.GetContext() { + // Generate linked storages based on depth + linkedStorages := make([]*productv1.Storage, 0, depth) + for j := int32(0); j < depth; j++ { + linkedStorages = append(linkedStorages, &productv1.Storage{ + Id: fmt.Sprintf("linked-storage-%s-%d", ctx.GetId(), j), + Name: fmt.Sprintf("Linked Storage %s %d", ctx.GetName(), j), + Location: fmt.Sprintf("%s-linked-%d", ctx.GetLocation(), j), + }) + } + + results[i] = &productv1.ResolveStorageLinkedStoragesResult{ + LinkedStorages: linkedStorages, + } + } + + return &productv1.ResolveStorageLinkedStoragesResponse{ + Result: results, + }, nil +} + +// ResolveStorageNearbyStorages implements productv1.ProductServiceServer. +func (s *MockService) ResolveStorageNearbyStorages(_ context.Context, req *productv1.ResolveStorageNearbyStoragesRequest) (*productv1.ResolveStorageNearbyStoragesResponse, error) { + results := make([]*productv1.ResolveStorageNearbyStoragesResult, 0, len(req.GetContext())) + + // Check if radius arg is set - if nil or 0, return nil for nearbyStorages + radius := int32(0) + if req.GetFieldArgs() != nil && req.GetFieldArgs().GetRadius() != nil { + radius = req.GetFieldArgs().GetRadius().GetValue() + } + + for i, ctx := range req.GetContext() { + var nearbyStorages *productv1.ListOfStorage + + if radius > 0 { + // Generate nearby storages based on radius + storages := make([]*productv1.Storage, 0, radius) + for j := int32(0); j < radius && j < 5; j++ { // Cap at 5 storages + storages = append(storages, &productv1.Storage{ + Id: fmt.Sprintf("nearby-storage-%s-%d", ctx.GetId(), j), + Name: fmt.Sprintf("Nearby Storage %d", j), + Location: fmt.Sprintf("%s-nearby-%d", ctx.GetLocation(), j), + }) + } + nearbyStorages = &productv1.ListOfStorage{ + List: &productv1.ListOfStorage_List{ + Items: storages, + }, + } + } else if i%2 == 0 { + // For even indices with no radius, return empty list + nearbyStorages = &productv1.ListOfStorage{ + List: &productv1.ListOfStorage_List{ + Items: []*productv1.Storage{}, + }, + } + } + // For odd indices with no radius, nearbyStorages remains nil + + results = append(results, &productv1.ResolveStorageNearbyStoragesResult{ + NearbyStorages: nearbyStorages, + }) + } + + return &productv1.ResolveStorageNearbyStoragesResponse{ + Result: results, + }, nil +} diff --git a/v2/pkg/grpctest/product.proto b/v2/pkg/grpctest/product.proto index 70dca6f25e..8e6af988e8 100644 --- a/v2/pkg/grpctest/product.proto +++ b/v2/pkg/grpctest/product.proto @@ -58,6 +58,16 @@ service ProductService { rpc QueryTypeWithMultipleFilterFields(QueryTypeWithMultipleFilterFieldsRequest) returns (QueryTypeWithMultipleFilterFieldsResponse) {} rpc QueryUser(QueryUserRequest) returns (QueryUserResponse) {} rpc QueryUsers(QueryUsersRequest) returns (QueryUsersResponse) {} + rpc RequireStorageMetadataScoreById(RequireStorageMetadataScoreByIdRequest) returns (RequireStorageMetadataScoreByIdResponse) {} + rpc RequireStorageOptionalProcessedMetadataById(RequireStorageOptionalProcessedMetadataByIdRequest) returns (RequireStorageOptionalProcessedMetadataByIdResponse) {} + rpc RequireStorageOptionalProcessedTagsById(RequireStorageOptionalProcessedTagsByIdRequest) returns (RequireStorageOptionalProcessedTagsByIdResponse) {} + rpc RequireStorageOptionalTagSummaryById(RequireStorageOptionalTagSummaryByIdRequest) returns (RequireStorageOptionalTagSummaryByIdResponse) {} + rpc RequireStorageProcessedMetadataById(RequireStorageProcessedMetadataByIdRequest) returns (RequireStorageProcessedMetadataByIdResponse) {} + rpc RequireStorageProcessedMetadataHistoryById(RequireStorageProcessedMetadataHistoryByIdRequest) returns (RequireStorageProcessedMetadataHistoryByIdResponse) {} + rpc RequireStorageProcessedTagsById(RequireStorageProcessedTagsByIdRequest) returns (RequireStorageProcessedTagsByIdResponse) {} + rpc RequireStorageStockHealthScoreById(RequireStorageStockHealthScoreByIdRequest) returns (RequireStorageStockHealthScoreByIdResponse) {} + rpc RequireStorageTagSummaryById(RequireStorageTagSummaryByIdRequest) returns (RequireStorageTagSummaryByIdResponse) {} + rpc RequireWarehouseStockHealthScoreById(RequireWarehouseStockHealthScoreByIdRequest) returns (RequireWarehouseStockHealthScoreByIdResponse) {} rpc ResolveCategoryCategoryMetrics(ResolveCategoryCategoryMetricsRequest) returns (ResolveCategoryCategoryMetricsResponse) {} rpc ResolveCategoryCategoryStatus(ResolveCategoryCategoryStatusRequest) returns (ResolveCategoryCategoryStatusResponse) {} rpc ResolveCategoryChildCategories(ResolveCategoryChildCategoriesRequest) returns (ResolveCategoryChildCategoriesResponse) {} @@ -72,6 +82,9 @@ service ProductService { rpc ResolveProductRecommendedCategory(ResolveProductRecommendedCategoryRequest) returns (ResolveProductRecommendedCategoryResponse) {} rpc ResolveProductShippingEstimate(ResolveProductShippingEstimateRequest) returns (ResolveProductShippingEstimateResponse) {} rpc ResolveProductStockStatus(ResolveProductStockStatusRequest) returns (ResolveProductStockStatusResponse) {} + rpc ResolveStorageLinkedStorages(ResolveStorageLinkedStoragesRequest) returns (ResolveStorageLinkedStoragesResponse) {} + rpc ResolveStorageNearbyStorages(ResolveStorageNearbyStoragesRequest) returns (ResolveStorageNearbyStoragesResponse) {} + rpc ResolveStorageStorageStatus(ResolveStorageStorageStatusRequest) returns (ResolveStorageStorageStatusResponse) {} rpc ResolveSubcategoryFeaturedCategory(ResolveSubcategoryFeaturedCategoryRequest) returns (ResolveSubcategoryFeaturedCategoryResponse) {} rpc ResolveSubcategoryItemCount(ResolveSubcategoryItemCountRequest) returns (ResolveSubcategoryItemCountResponse) {} rpc ResolveTestContainerDetails(ResolveTestContainerDetailsRequest) returns (ResolveTestContainerDetailsResponse) {} @@ -189,6 +202,13 @@ message ListOfProduct { } List list = 1; } +// Wrapper message for a list of Storage. +message ListOfStorage { + message List { + repeated Storage items = 1; + } + List list = 1; +} // Wrapper message for a list of String. message ListOfString { message List { @@ -792,6 +812,79 @@ message ResolveProductProductDetailsResponse { repeated ResolveProductProductDetailsResult result = 1; } +message ResolveStorageStorageStatusArgs { + bool check_health = 1; +} + +message ResolveStorageStorageStatusContext { + string id = 1; + string name = 2; +} + +message ResolveStorageStorageStatusRequest { + // context provides the resolver context for the field storageStatus of type Storage. + repeated ResolveStorageStorageStatusContext context = 1; + // field_args provides the arguments for the resolver field storageStatus of type Storage. + ResolveStorageStorageStatusArgs field_args = 2; +} + +message ResolveStorageStorageStatusResult { + ActionResult storage_status = 1; +} + +message ResolveStorageStorageStatusResponse { + repeated ResolveStorageStorageStatusResult result = 1; +} + +message ResolveStorageLinkedStoragesArgs { + int32 depth = 1; +} + +message ResolveStorageLinkedStoragesContext { + string id = 1; + string name = 2; + string location = 3; +} + +message ResolveStorageLinkedStoragesRequest { + // context provides the resolver context for the field linkedStorages of type Storage. + repeated ResolveStorageLinkedStoragesContext context = 1; + // field_args provides the arguments for the resolver field linkedStorages of type Storage. + ResolveStorageLinkedStoragesArgs field_args = 2; +} + +message ResolveStorageLinkedStoragesResult { + repeated Storage linked_storages = 1; +} + +message ResolveStorageLinkedStoragesResponse { + repeated ResolveStorageLinkedStoragesResult result = 1; +} + +message ResolveStorageNearbyStoragesArgs { + google.protobuf.Int32Value radius = 1; +} + +message ResolveStorageNearbyStoragesContext { + string id = 1; + string location = 2; +} + +message ResolveStorageNearbyStoragesRequest { + // context provides the resolver context for the field nearbyStorages of type Storage. + repeated ResolveStorageNearbyStoragesContext context = 1; + // field_args provides the arguments for the resolver field nearbyStorages of type Storage. + ResolveStorageNearbyStoragesArgs field_args = 2; +} + +message ResolveStorageNearbyStoragesResult { + ListOfStorage nearby_storages = 1; +} + +message ResolveStorageNearbyStoragesResponse { + repeated ResolveStorageNearbyStoragesResult result = 1; +} + message ResolveCategoryProductCountArgs { ProductCountFilter filters = 1; } @@ -1077,6 +1170,267 @@ message ResolveTestContainerDetailsResponse { repeated ResolveTestContainerDetailsResult result = 1; } +message RequireStorageStockHealthScoreByIdRequest { + // RequireStorageStockHealthScoreByIdContext provides the context for the required fields method RequireStorageStockHealthScoreById. + repeated RequireStorageStockHealthScoreByIdContext context = 1; +} + +message RequireStorageStockHealthScoreByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageStockHealthScoreByIdFields fields = 2; +} + +message RequireStorageStockHealthScoreByIdResponse { + // RequireStorageStockHealthScoreByIdResult provides the result for the required fields method RequireStorageStockHealthScoreById. + repeated RequireStorageStockHealthScoreByIdResult result = 1; +} + +message RequireStorageStockHealthScoreByIdResult { + double stock_health_score = 1; +} + +message RequireStorageStockHealthScoreByIdFields { + message RestockData { + string last_restock_date = 1; + } + + int32 item_count = 1; + RestockData restock_data = 2; +} + +message RequireStorageTagSummaryByIdRequest { + // RequireStorageTagSummaryByIdContext provides the context for the required fields method RequireStorageTagSummaryById. + repeated RequireStorageTagSummaryByIdContext context = 1; +} + +message RequireStorageTagSummaryByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageTagSummaryByIdFields fields = 2; +} + +message RequireStorageTagSummaryByIdResponse { + // RequireStorageTagSummaryByIdResult provides the result for the required fields method RequireStorageTagSummaryById. + repeated RequireStorageTagSummaryByIdResult result = 1; +} + +message RequireStorageTagSummaryByIdResult { + string tag_summary = 1; +} + +message RequireStorageTagSummaryByIdFields { + repeated string tags = 1; +} + +message RequireStorageOptionalTagSummaryByIdRequest { + // RequireStorageOptionalTagSummaryByIdContext provides the context for the required fields method RequireStorageOptionalTagSummaryById. + repeated RequireStorageOptionalTagSummaryByIdContext context = 1; +} + +message RequireStorageOptionalTagSummaryByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageOptionalTagSummaryByIdFields fields = 2; +} + +message RequireStorageOptionalTagSummaryByIdResponse { + // RequireStorageOptionalTagSummaryByIdResult provides the result for the required fields method RequireStorageOptionalTagSummaryById. + repeated RequireStorageOptionalTagSummaryByIdResult result = 1; +} + +message RequireStorageOptionalTagSummaryByIdResult { + google.protobuf.StringValue optional_tag_summary = 1; +} + +message RequireStorageOptionalTagSummaryByIdFields { + ListOfString optional_tags = 1; +} + +message RequireStorageMetadataScoreByIdRequest { + // RequireStorageMetadataScoreByIdContext provides the context for the required fields method RequireStorageMetadataScoreById. + repeated RequireStorageMetadataScoreByIdContext context = 1; +} + +message RequireStorageMetadataScoreByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageMetadataScoreByIdFields fields = 2; +} + +message RequireStorageMetadataScoreByIdResponse { + // RequireStorageMetadataScoreByIdResult provides the result for the required fields method RequireStorageMetadataScoreById. + repeated RequireStorageMetadataScoreByIdResult result = 1; +} + +message RequireStorageMetadataScoreByIdResult { + double metadata_score = 1; +} + +message RequireStorageMetadataScoreByIdFields { + message StorageMetadata { + int32 capacity = 1; + string zone = 2; + } + + StorageMetadata metadata = 1; +} + +message RequireStorageProcessedMetadataByIdRequest { + // RequireStorageProcessedMetadataByIdContext provides the context for the required fields method RequireStorageProcessedMetadataById. + repeated RequireStorageProcessedMetadataByIdContext context = 1; +} + +message RequireStorageProcessedMetadataByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageProcessedMetadataByIdFields fields = 2; +} + +message RequireStorageProcessedMetadataByIdResponse { + // RequireStorageProcessedMetadataByIdResult provides the result for the required fields method RequireStorageProcessedMetadataById. + repeated RequireStorageProcessedMetadataByIdResult result = 1; +} + +message RequireStorageProcessedMetadataByIdResult { + StorageMetadata processed_metadata = 1; +} + +message RequireStorageProcessedMetadataByIdFields { + message StorageMetadata { + int32 capacity = 1; + string zone = 2; + int32 priority = 3; + } + + StorageMetadata metadata = 1; +} + +message RequireStorageOptionalProcessedMetadataByIdRequest { + // RequireStorageOptionalProcessedMetadataByIdContext provides the context for the required fields method RequireStorageOptionalProcessedMetadataById. + repeated RequireStorageOptionalProcessedMetadataByIdContext context = 1; +} + +message RequireStorageOptionalProcessedMetadataByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageOptionalProcessedMetadataByIdFields fields = 2; +} + +message RequireStorageOptionalProcessedMetadataByIdResponse { + // RequireStorageOptionalProcessedMetadataByIdResult provides the result for the required fields method RequireStorageOptionalProcessedMetadataById. + repeated RequireStorageOptionalProcessedMetadataByIdResult result = 1; +} + +message RequireStorageOptionalProcessedMetadataByIdResult { + StorageMetadata optional_processed_metadata = 1; +} + +message RequireStorageOptionalProcessedMetadataByIdFields { + message StorageMetadata { + int32 capacity = 1; + string zone = 2; + } + + StorageMetadata metadata = 1; +} + +message RequireStorageProcessedTagsByIdRequest { + // RequireStorageProcessedTagsByIdContext provides the context for the required fields method RequireStorageProcessedTagsById. + repeated RequireStorageProcessedTagsByIdContext context = 1; +} + +message RequireStorageProcessedTagsByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageProcessedTagsByIdFields fields = 2; +} + +message RequireStorageProcessedTagsByIdResponse { + // RequireStorageProcessedTagsByIdResult provides the result for the required fields method RequireStorageProcessedTagsById. + repeated RequireStorageProcessedTagsByIdResult result = 1; +} + +message RequireStorageProcessedTagsByIdResult { + repeated string processed_tags = 1; +} + +message RequireStorageProcessedTagsByIdFields { + repeated string tags = 1; +} + +message RequireStorageOptionalProcessedTagsByIdRequest { + // RequireStorageOptionalProcessedTagsByIdContext provides the context for the required fields method RequireStorageOptionalProcessedTagsById. + repeated RequireStorageOptionalProcessedTagsByIdContext context = 1; +} + +message RequireStorageOptionalProcessedTagsByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageOptionalProcessedTagsByIdFields fields = 2; +} + +message RequireStorageOptionalProcessedTagsByIdResponse { + // RequireStorageOptionalProcessedTagsByIdResult provides the result for the required fields method RequireStorageOptionalProcessedTagsById. + repeated RequireStorageOptionalProcessedTagsByIdResult result = 1; +} + +message RequireStorageOptionalProcessedTagsByIdResult { + ListOfString optional_processed_tags = 1; +} + +message RequireStorageOptionalProcessedTagsByIdFields { + ListOfString optional_tags = 1; +} + +message RequireStorageProcessedMetadataHistoryByIdRequest { + // RequireStorageProcessedMetadataHistoryByIdContext provides the context for the required fields method RequireStorageProcessedMetadataHistoryById. + repeated RequireStorageProcessedMetadataHistoryByIdContext context = 1; +} + +message RequireStorageProcessedMetadataHistoryByIdContext { + LookupStorageByIdRequestKey key = 1; + RequireStorageProcessedMetadataHistoryByIdFields fields = 2; +} + +message RequireStorageProcessedMetadataHistoryByIdResponse { + // RequireStorageProcessedMetadataHistoryByIdResult provides the result for the required fields method RequireStorageProcessedMetadataHistoryById. + repeated RequireStorageProcessedMetadataHistoryByIdResult result = 1; +} + +message RequireStorageProcessedMetadataHistoryByIdResult { + repeated StorageMetadata processed_metadata_history = 1; +} + +message RequireStorageProcessedMetadataHistoryByIdFields { + message StorageMetadata { + int32 capacity = 1; + string zone = 2; + } + + repeated StorageMetadata metadata_history = 1; +} + +message RequireWarehouseStockHealthScoreByIdRequest { + // RequireWarehouseStockHealthScoreByIdContext provides the context for the required fields method RequireWarehouseStockHealthScoreById. + repeated RequireWarehouseStockHealthScoreByIdContext context = 1; +} + +message RequireWarehouseStockHealthScoreByIdContext { + LookupWarehouseByIdRequestKey key = 1; + RequireWarehouseStockHealthScoreByIdFields fields = 2; +} + +message RequireWarehouseStockHealthScoreByIdResponse { + // RequireWarehouseStockHealthScoreByIdResult provides the result for the required fields method RequireWarehouseStockHealthScoreById. + repeated RequireWarehouseStockHealthScoreByIdResult result = 1; +} + +message RequireWarehouseStockHealthScoreByIdResult { + double stock_health_score = 1; +} + +message RequireWarehouseStockHealthScoreByIdFields { + message RestockData { + string last_restock_date = 1; + } + + int32 inventory_count = 1; + RestockData restock_data = 2; +} + message Product { string id = 1; string name = 2; @@ -1320,6 +1674,16 @@ message ProductDetails { Animal recommended_pet = 4; } +message RestockData { + string last_restock_date = 1; +} + +message StorageMetadata { + int32 capacity = 1; + string zone = 2; + int32 priority = 3; +} + message NestedTypeB { string id = 1; string name = 2; diff --git a/v2/pkg/grpctest/productv1/product.pb.go b/v2/pkg/grpctest/productv1/product.pb.go index 928ff3aa88..f105020268 100644 --- a/v2/pkg/grpctest/productv1/product.pb.go +++ b/v2/pkg/grpctest/productv1/product.pb.go @@ -849,6 +849,51 @@ func (x *ListOfProduct) GetList() *ListOfProduct_List { return nil } +// Wrapper message for a list of Storage. +type ListOfStorage struct { + state protoimpl.MessageState `protogen:"open.v1"` + List *ListOfStorage_List `protobuf:"bytes,1,opt,name=list,proto3" json:"list,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListOfStorage) Reset() { + *x = ListOfStorage{} + mi := &file_product_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListOfStorage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListOfStorage) ProtoMessage() {} + +func (x *ListOfStorage) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListOfStorage.ProtoReflect.Descriptor instead. +func (*ListOfStorage) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{16} +} + +func (x *ListOfStorage) GetList() *ListOfStorage_List { + if x != nil { + return x.List + } + return nil +} + // Wrapper message for a list of String. type ListOfString struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -859,7 +904,7 @@ type ListOfString struct { func (x *ListOfString) Reset() { *x = ListOfString{} - mi := &file_product_proto_msgTypes[16] + mi := &file_product_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -871,7 +916,7 @@ func (x *ListOfString) String() string { func (*ListOfString) ProtoMessage() {} func (x *ListOfString) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[16] + mi := &file_product_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -884,7 +929,7 @@ func (x *ListOfString) ProtoReflect() protoreflect.Message { // Deprecated: Use ListOfString.ProtoReflect.Descriptor instead. func (*ListOfString) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{16} + return file_product_proto_rawDescGZIP(), []int{17} } func (x *ListOfString) GetList() *ListOfString_List { @@ -904,7 +949,7 @@ type ListOfSubcategory struct { func (x *ListOfSubcategory) Reset() { *x = ListOfSubcategory{} - mi := &file_product_proto_msgTypes[17] + mi := &file_product_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -916,7 +961,7 @@ func (x *ListOfSubcategory) String() string { func (*ListOfSubcategory) ProtoMessage() {} func (x *ListOfSubcategory) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[17] + mi := &file_product_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -929,7 +974,7 @@ func (x *ListOfSubcategory) ProtoReflect() protoreflect.Message { // Deprecated: Use ListOfSubcategory.ProtoReflect.Descriptor instead. func (*ListOfSubcategory) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{17} + return file_product_proto_rawDescGZIP(), []int{18} } func (x *ListOfSubcategory) GetList() *ListOfSubcategory_List { @@ -949,7 +994,7 @@ type ListOfUser struct { func (x *ListOfUser) Reset() { *x = ListOfUser{} - mi := &file_product_proto_msgTypes[18] + mi := &file_product_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -961,7 +1006,7 @@ func (x *ListOfUser) String() string { func (*ListOfUser) ProtoMessage() {} func (x *ListOfUser) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[18] + mi := &file_product_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -974,7 +1019,7 @@ func (x *ListOfUser) ProtoReflect() protoreflect.Message { // Deprecated: Use ListOfUser.ProtoReflect.Descriptor instead. func (*ListOfUser) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{18} + return file_product_proto_rawDescGZIP(), []int{19} } func (x *ListOfUser) GetList() *ListOfUser_List { @@ -994,7 +1039,7 @@ type ListOfUserInput struct { func (x *ListOfUserInput) Reset() { *x = ListOfUserInput{} - mi := &file_product_proto_msgTypes[19] + mi := &file_product_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1006,7 +1051,7 @@ func (x *ListOfUserInput) String() string { func (*ListOfUserInput) ProtoMessage() {} func (x *ListOfUserInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[19] + mi := &file_product_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1019,7 +1064,7 @@ func (x *ListOfUserInput) ProtoReflect() protoreflect.Message { // Deprecated: Use ListOfUserInput.ProtoReflect.Descriptor instead. func (*ListOfUserInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{19} + return file_product_proto_rawDescGZIP(), []int{20} } func (x *ListOfUserInput) GetList() *ListOfUserInput_List { @@ -1040,7 +1085,7 @@ type LookupProductByIdRequestKey struct { func (x *LookupProductByIdRequestKey) Reset() { *x = LookupProductByIdRequestKey{} - mi := &file_product_proto_msgTypes[20] + mi := &file_product_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1052,7 +1097,7 @@ func (x *LookupProductByIdRequestKey) String() string { func (*LookupProductByIdRequestKey) ProtoMessage() {} func (x *LookupProductByIdRequestKey) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[20] + mi := &file_product_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1065,7 +1110,7 @@ func (x *LookupProductByIdRequestKey) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupProductByIdRequestKey.ProtoReflect.Descriptor instead. func (*LookupProductByIdRequestKey) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{20} + return file_product_proto_rawDescGZIP(), []int{21} } func (x *LookupProductByIdRequestKey) GetId() string { @@ -1087,7 +1132,7 @@ type LookupProductByIdRequest struct { func (x *LookupProductByIdRequest) Reset() { *x = LookupProductByIdRequest{} - mi := &file_product_proto_msgTypes[21] + mi := &file_product_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1099,7 +1144,7 @@ func (x *LookupProductByIdRequest) String() string { func (*LookupProductByIdRequest) ProtoMessage() {} func (x *LookupProductByIdRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[21] + mi := &file_product_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1112,7 +1157,7 @@ func (x *LookupProductByIdRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupProductByIdRequest.ProtoReflect.Descriptor instead. func (*LookupProductByIdRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{21} + return file_product_proto_rawDescGZIP(), []int{22} } func (x *LookupProductByIdRequest) GetKeys() []*LookupProductByIdRequestKey { @@ -1145,7 +1190,7 @@ type LookupProductByIdResponse struct { func (x *LookupProductByIdResponse) Reset() { *x = LookupProductByIdResponse{} - mi := &file_product_proto_msgTypes[22] + mi := &file_product_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1157,7 +1202,7 @@ func (x *LookupProductByIdResponse) String() string { func (*LookupProductByIdResponse) ProtoMessage() {} func (x *LookupProductByIdResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[22] + mi := &file_product_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1170,7 +1215,7 @@ func (x *LookupProductByIdResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupProductByIdResponse.ProtoReflect.Descriptor instead. func (*LookupProductByIdResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{22} + return file_product_proto_rawDescGZIP(), []int{23} } func (x *LookupProductByIdResponse) GetResult() []*Product { @@ -1191,7 +1236,7 @@ type LookupStorageByIdRequestKey struct { func (x *LookupStorageByIdRequestKey) Reset() { *x = LookupStorageByIdRequestKey{} - mi := &file_product_proto_msgTypes[23] + mi := &file_product_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1203,7 +1248,7 @@ func (x *LookupStorageByIdRequestKey) String() string { func (*LookupStorageByIdRequestKey) ProtoMessage() {} func (x *LookupStorageByIdRequestKey) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[23] + mi := &file_product_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1216,7 +1261,7 @@ func (x *LookupStorageByIdRequestKey) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupStorageByIdRequestKey.ProtoReflect.Descriptor instead. func (*LookupStorageByIdRequestKey) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{23} + return file_product_proto_rawDescGZIP(), []int{24} } func (x *LookupStorageByIdRequestKey) GetId() string { @@ -1238,7 +1283,7 @@ type LookupStorageByIdRequest struct { func (x *LookupStorageByIdRequest) Reset() { *x = LookupStorageByIdRequest{} - mi := &file_product_proto_msgTypes[24] + mi := &file_product_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1250,7 +1295,7 @@ func (x *LookupStorageByIdRequest) String() string { func (*LookupStorageByIdRequest) ProtoMessage() {} func (x *LookupStorageByIdRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[24] + mi := &file_product_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1263,7 +1308,7 @@ func (x *LookupStorageByIdRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupStorageByIdRequest.ProtoReflect.Descriptor instead. func (*LookupStorageByIdRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{24} + return file_product_proto_rawDescGZIP(), []int{25} } func (x *LookupStorageByIdRequest) GetKeys() []*LookupStorageByIdRequestKey { @@ -1296,7 +1341,7 @@ type LookupStorageByIdResponse struct { func (x *LookupStorageByIdResponse) Reset() { *x = LookupStorageByIdResponse{} - mi := &file_product_proto_msgTypes[25] + mi := &file_product_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1308,7 +1353,7 @@ func (x *LookupStorageByIdResponse) String() string { func (*LookupStorageByIdResponse) ProtoMessage() {} func (x *LookupStorageByIdResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[25] + mi := &file_product_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1321,7 +1366,7 @@ func (x *LookupStorageByIdResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupStorageByIdResponse.ProtoReflect.Descriptor instead. func (*LookupStorageByIdResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{25} + return file_product_proto_rawDescGZIP(), []int{26} } func (x *LookupStorageByIdResponse) GetResult() []*Storage { @@ -1342,7 +1387,7 @@ type LookupWarehouseByIdRequestKey struct { func (x *LookupWarehouseByIdRequestKey) Reset() { *x = LookupWarehouseByIdRequestKey{} - mi := &file_product_proto_msgTypes[26] + mi := &file_product_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1354,7 +1399,7 @@ func (x *LookupWarehouseByIdRequestKey) String() string { func (*LookupWarehouseByIdRequestKey) ProtoMessage() {} func (x *LookupWarehouseByIdRequestKey) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[26] + mi := &file_product_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1367,7 +1412,7 @@ func (x *LookupWarehouseByIdRequestKey) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupWarehouseByIdRequestKey.ProtoReflect.Descriptor instead. func (*LookupWarehouseByIdRequestKey) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{26} + return file_product_proto_rawDescGZIP(), []int{27} } func (x *LookupWarehouseByIdRequestKey) GetId() string { @@ -1389,7 +1434,7 @@ type LookupWarehouseByIdRequest struct { func (x *LookupWarehouseByIdRequest) Reset() { *x = LookupWarehouseByIdRequest{} - mi := &file_product_proto_msgTypes[27] + mi := &file_product_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1401,7 +1446,7 @@ func (x *LookupWarehouseByIdRequest) String() string { func (*LookupWarehouseByIdRequest) ProtoMessage() {} func (x *LookupWarehouseByIdRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[27] + mi := &file_product_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1414,7 +1459,7 @@ func (x *LookupWarehouseByIdRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupWarehouseByIdRequest.ProtoReflect.Descriptor instead. func (*LookupWarehouseByIdRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{27} + return file_product_proto_rawDescGZIP(), []int{28} } func (x *LookupWarehouseByIdRequest) GetKeys() []*LookupWarehouseByIdRequestKey { @@ -1447,7 +1492,7 @@ type LookupWarehouseByIdResponse struct { func (x *LookupWarehouseByIdResponse) Reset() { *x = LookupWarehouseByIdResponse{} - mi := &file_product_proto_msgTypes[28] + mi := &file_product_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1459,7 +1504,7 @@ func (x *LookupWarehouseByIdResponse) String() string { func (*LookupWarehouseByIdResponse) ProtoMessage() {} func (x *LookupWarehouseByIdResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[28] + mi := &file_product_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1472,7 +1517,7 @@ func (x *LookupWarehouseByIdResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LookupWarehouseByIdResponse.ProtoReflect.Descriptor instead. func (*LookupWarehouseByIdResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{28} + return file_product_proto_rawDescGZIP(), []int{29} } func (x *LookupWarehouseByIdResponse) GetResult() []*Warehouse { @@ -1491,7 +1536,7 @@ type QueryUsersRequest struct { func (x *QueryUsersRequest) Reset() { *x = QueryUsersRequest{} - mi := &file_product_proto_msgTypes[29] + mi := &file_product_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1503,7 +1548,7 @@ func (x *QueryUsersRequest) String() string { func (*QueryUsersRequest) ProtoMessage() {} func (x *QueryUsersRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[29] + mi := &file_product_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1516,7 +1561,7 @@ func (x *QueryUsersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryUsersRequest.ProtoReflect.Descriptor instead. func (*QueryUsersRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{29} + return file_product_proto_rawDescGZIP(), []int{30} } // Response message for users operation. @@ -1529,7 +1574,7 @@ type QueryUsersResponse struct { func (x *QueryUsersResponse) Reset() { *x = QueryUsersResponse{} - mi := &file_product_proto_msgTypes[30] + mi := &file_product_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1541,7 +1586,7 @@ func (x *QueryUsersResponse) String() string { func (*QueryUsersResponse) ProtoMessage() {} func (x *QueryUsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[30] + mi := &file_product_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1554,7 +1599,7 @@ func (x *QueryUsersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryUsersResponse.ProtoReflect.Descriptor instead. func (*QueryUsersResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{30} + return file_product_proto_rawDescGZIP(), []int{31} } func (x *QueryUsersResponse) GetUsers() []*User { @@ -1574,7 +1619,7 @@ type QueryUserRequest struct { func (x *QueryUserRequest) Reset() { *x = QueryUserRequest{} - mi := &file_product_proto_msgTypes[31] + mi := &file_product_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1586,7 +1631,7 @@ func (x *QueryUserRequest) String() string { func (*QueryUserRequest) ProtoMessage() {} func (x *QueryUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[31] + mi := &file_product_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1599,7 +1644,7 @@ func (x *QueryUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryUserRequest.ProtoReflect.Descriptor instead. func (*QueryUserRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{31} + return file_product_proto_rawDescGZIP(), []int{32} } func (x *QueryUserRequest) GetId() string { @@ -1619,7 +1664,7 @@ type QueryUserResponse struct { func (x *QueryUserResponse) Reset() { *x = QueryUserResponse{} - mi := &file_product_proto_msgTypes[32] + mi := &file_product_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1631,7 +1676,7 @@ func (x *QueryUserResponse) String() string { func (*QueryUserResponse) ProtoMessage() {} func (x *QueryUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[32] + mi := &file_product_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1644,7 +1689,7 @@ func (x *QueryUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryUserResponse.ProtoReflect.Descriptor instead. func (*QueryUserResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{32} + return file_product_proto_rawDescGZIP(), []int{33} } func (x *QueryUserResponse) GetUser() *User { @@ -1663,7 +1708,7 @@ type QueryNestedTypeRequest struct { func (x *QueryNestedTypeRequest) Reset() { *x = QueryNestedTypeRequest{} - mi := &file_product_proto_msgTypes[33] + mi := &file_product_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1675,7 +1720,7 @@ func (x *QueryNestedTypeRequest) String() string { func (*QueryNestedTypeRequest) ProtoMessage() {} func (x *QueryNestedTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[33] + mi := &file_product_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1688,7 +1733,7 @@ func (x *QueryNestedTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryNestedTypeRequest.ProtoReflect.Descriptor instead. func (*QueryNestedTypeRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{33} + return file_product_proto_rawDescGZIP(), []int{34} } // Response message for nestedType operation. @@ -1701,7 +1746,7 @@ type QueryNestedTypeResponse struct { func (x *QueryNestedTypeResponse) Reset() { *x = QueryNestedTypeResponse{} - mi := &file_product_proto_msgTypes[34] + mi := &file_product_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1713,7 +1758,7 @@ func (x *QueryNestedTypeResponse) String() string { func (*QueryNestedTypeResponse) ProtoMessage() {} func (x *QueryNestedTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[34] + mi := &file_product_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1726,7 +1771,7 @@ func (x *QueryNestedTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryNestedTypeResponse.ProtoReflect.Descriptor instead. func (*QueryNestedTypeResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{34} + return file_product_proto_rawDescGZIP(), []int{35} } func (x *QueryNestedTypeResponse) GetNestedType() []*NestedTypeA { @@ -1745,7 +1790,7 @@ type QueryRecursiveTypeRequest struct { func (x *QueryRecursiveTypeRequest) Reset() { *x = QueryRecursiveTypeRequest{} - mi := &file_product_proto_msgTypes[35] + mi := &file_product_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1757,7 +1802,7 @@ func (x *QueryRecursiveTypeRequest) String() string { func (*QueryRecursiveTypeRequest) ProtoMessage() {} func (x *QueryRecursiveTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[35] + mi := &file_product_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1770,7 +1815,7 @@ func (x *QueryRecursiveTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRecursiveTypeRequest.ProtoReflect.Descriptor instead. func (*QueryRecursiveTypeRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{35} + return file_product_proto_rawDescGZIP(), []int{36} } // Response message for recursiveType operation. @@ -1783,7 +1828,7 @@ type QueryRecursiveTypeResponse struct { func (x *QueryRecursiveTypeResponse) Reset() { *x = QueryRecursiveTypeResponse{} - mi := &file_product_proto_msgTypes[36] + mi := &file_product_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1795,7 +1840,7 @@ func (x *QueryRecursiveTypeResponse) String() string { func (*QueryRecursiveTypeResponse) ProtoMessage() {} func (x *QueryRecursiveTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[36] + mi := &file_product_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1808,7 +1853,7 @@ func (x *QueryRecursiveTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRecursiveTypeResponse.ProtoReflect.Descriptor instead. func (*QueryRecursiveTypeResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{36} + return file_product_proto_rawDescGZIP(), []int{37} } func (x *QueryRecursiveTypeResponse) GetRecursiveType() *RecursiveType { @@ -1829,7 +1874,7 @@ type QueryTypeFilterWithArgumentsRequest struct { func (x *QueryTypeFilterWithArgumentsRequest) Reset() { *x = QueryTypeFilterWithArgumentsRequest{} - mi := &file_product_proto_msgTypes[37] + mi := &file_product_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1841,7 +1886,7 @@ func (x *QueryTypeFilterWithArgumentsRequest) String() string { func (*QueryTypeFilterWithArgumentsRequest) ProtoMessage() {} func (x *QueryTypeFilterWithArgumentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[37] + mi := &file_product_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1854,7 +1899,7 @@ func (x *QueryTypeFilterWithArgumentsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use QueryTypeFilterWithArgumentsRequest.ProtoReflect.Descriptor instead. func (*QueryTypeFilterWithArgumentsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{37} + return file_product_proto_rawDescGZIP(), []int{38} } func (x *QueryTypeFilterWithArgumentsRequest) GetFilterField_1() string { @@ -1881,7 +1926,7 @@ type QueryTypeFilterWithArgumentsResponse struct { func (x *QueryTypeFilterWithArgumentsResponse) Reset() { *x = QueryTypeFilterWithArgumentsResponse{} - mi := &file_product_proto_msgTypes[38] + mi := &file_product_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1893,7 +1938,7 @@ func (x *QueryTypeFilterWithArgumentsResponse) String() string { func (*QueryTypeFilterWithArgumentsResponse) ProtoMessage() {} func (x *QueryTypeFilterWithArgumentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[38] + mi := &file_product_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1906,7 +1951,7 @@ func (x *QueryTypeFilterWithArgumentsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use QueryTypeFilterWithArgumentsResponse.ProtoReflect.Descriptor instead. func (*QueryTypeFilterWithArgumentsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{38} + return file_product_proto_rawDescGZIP(), []int{39} } func (x *QueryTypeFilterWithArgumentsResponse) GetTypeFilterWithArguments() []*TypeWithMultipleFilterFields { @@ -1926,7 +1971,7 @@ type QueryTypeWithMultipleFilterFieldsRequest struct { func (x *QueryTypeWithMultipleFilterFieldsRequest) Reset() { *x = QueryTypeWithMultipleFilterFieldsRequest{} - mi := &file_product_proto_msgTypes[39] + mi := &file_product_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1938,7 +1983,7 @@ func (x *QueryTypeWithMultipleFilterFieldsRequest) String() string { func (*QueryTypeWithMultipleFilterFieldsRequest) ProtoMessage() {} func (x *QueryTypeWithMultipleFilterFieldsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[39] + mi := &file_product_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1951,7 +1996,7 @@ func (x *QueryTypeWithMultipleFilterFieldsRequest) ProtoReflect() protoreflect.M // Deprecated: Use QueryTypeWithMultipleFilterFieldsRequest.ProtoReflect.Descriptor instead. func (*QueryTypeWithMultipleFilterFieldsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{39} + return file_product_proto_rawDescGZIP(), []int{40} } func (x *QueryTypeWithMultipleFilterFieldsRequest) GetFilter() *FilterTypeInput { @@ -1971,7 +2016,7 @@ type QueryTypeWithMultipleFilterFieldsResponse struct { func (x *QueryTypeWithMultipleFilterFieldsResponse) Reset() { *x = QueryTypeWithMultipleFilterFieldsResponse{} - mi := &file_product_proto_msgTypes[40] + mi := &file_product_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1983,7 +2028,7 @@ func (x *QueryTypeWithMultipleFilterFieldsResponse) String() string { func (*QueryTypeWithMultipleFilterFieldsResponse) ProtoMessage() {} func (x *QueryTypeWithMultipleFilterFieldsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[40] + mi := &file_product_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1996,7 +2041,7 @@ func (x *QueryTypeWithMultipleFilterFieldsResponse) ProtoReflect() protoreflect. // Deprecated: Use QueryTypeWithMultipleFilterFieldsResponse.ProtoReflect.Descriptor instead. func (*QueryTypeWithMultipleFilterFieldsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{40} + return file_product_proto_rawDescGZIP(), []int{41} } func (x *QueryTypeWithMultipleFilterFieldsResponse) GetTypeWithMultipleFilterFields() []*TypeWithMultipleFilterFields { @@ -2016,7 +2061,7 @@ type QueryComplexFilterTypeRequest struct { func (x *QueryComplexFilterTypeRequest) Reset() { *x = QueryComplexFilterTypeRequest{} - mi := &file_product_proto_msgTypes[41] + mi := &file_product_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2028,7 +2073,7 @@ func (x *QueryComplexFilterTypeRequest) String() string { func (*QueryComplexFilterTypeRequest) ProtoMessage() {} func (x *QueryComplexFilterTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[41] + mi := &file_product_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2041,7 +2086,7 @@ func (x *QueryComplexFilterTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryComplexFilterTypeRequest.ProtoReflect.Descriptor instead. func (*QueryComplexFilterTypeRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{41} + return file_product_proto_rawDescGZIP(), []int{42} } func (x *QueryComplexFilterTypeRequest) GetFilter() *ComplexFilterTypeInput { @@ -2061,7 +2106,7 @@ type QueryComplexFilterTypeResponse struct { func (x *QueryComplexFilterTypeResponse) Reset() { *x = QueryComplexFilterTypeResponse{} - mi := &file_product_proto_msgTypes[42] + mi := &file_product_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2073,7 +2118,7 @@ func (x *QueryComplexFilterTypeResponse) String() string { func (*QueryComplexFilterTypeResponse) ProtoMessage() {} func (x *QueryComplexFilterTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[42] + mi := &file_product_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2086,7 +2131,7 @@ func (x *QueryComplexFilterTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryComplexFilterTypeResponse.ProtoReflect.Descriptor instead. func (*QueryComplexFilterTypeResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{42} + return file_product_proto_rawDescGZIP(), []int{43} } func (x *QueryComplexFilterTypeResponse) GetComplexFilterType() []*TypeWithComplexFilterInput { @@ -2106,7 +2151,7 @@ type QueryCalculateTotalsRequest struct { func (x *QueryCalculateTotalsRequest) Reset() { *x = QueryCalculateTotalsRequest{} - mi := &file_product_proto_msgTypes[43] + mi := &file_product_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2118,7 +2163,7 @@ func (x *QueryCalculateTotalsRequest) String() string { func (*QueryCalculateTotalsRequest) ProtoMessage() {} func (x *QueryCalculateTotalsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[43] + mi := &file_product_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2131,7 +2176,7 @@ func (x *QueryCalculateTotalsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCalculateTotalsRequest.ProtoReflect.Descriptor instead. func (*QueryCalculateTotalsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{43} + return file_product_proto_rawDescGZIP(), []int{44} } func (x *QueryCalculateTotalsRequest) GetOrders() []*OrderInput { @@ -2151,7 +2196,7 @@ type QueryCalculateTotalsResponse struct { func (x *QueryCalculateTotalsResponse) Reset() { *x = QueryCalculateTotalsResponse{} - mi := &file_product_proto_msgTypes[44] + mi := &file_product_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2163,7 +2208,7 @@ func (x *QueryCalculateTotalsResponse) String() string { func (*QueryCalculateTotalsResponse) ProtoMessage() {} func (x *QueryCalculateTotalsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[44] + mi := &file_product_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2176,7 +2221,7 @@ func (x *QueryCalculateTotalsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCalculateTotalsResponse.ProtoReflect.Descriptor instead. func (*QueryCalculateTotalsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{44} + return file_product_proto_rawDescGZIP(), []int{45} } func (x *QueryCalculateTotalsResponse) GetCalculateTotals() []*Order { @@ -2195,7 +2240,7 @@ type QueryCategoriesRequest struct { func (x *QueryCategoriesRequest) Reset() { *x = QueryCategoriesRequest{} - mi := &file_product_proto_msgTypes[45] + mi := &file_product_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2207,7 +2252,7 @@ func (x *QueryCategoriesRequest) String() string { func (*QueryCategoriesRequest) ProtoMessage() {} func (x *QueryCategoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[45] + mi := &file_product_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2220,7 +2265,7 @@ func (x *QueryCategoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoriesRequest.ProtoReflect.Descriptor instead. func (*QueryCategoriesRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{45} + return file_product_proto_rawDescGZIP(), []int{46} } // Response message for categories operation. @@ -2233,7 +2278,7 @@ type QueryCategoriesResponse struct { func (x *QueryCategoriesResponse) Reset() { *x = QueryCategoriesResponse{} - mi := &file_product_proto_msgTypes[46] + mi := &file_product_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2245,7 +2290,7 @@ func (x *QueryCategoriesResponse) String() string { func (*QueryCategoriesResponse) ProtoMessage() {} func (x *QueryCategoriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[46] + mi := &file_product_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2258,7 +2303,7 @@ func (x *QueryCategoriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoriesResponse.ProtoReflect.Descriptor instead. func (*QueryCategoriesResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{46} + return file_product_proto_rawDescGZIP(), []int{47} } func (x *QueryCategoriesResponse) GetCategories() []*Category { @@ -2278,7 +2323,7 @@ type QueryCategoryRequest struct { func (x *QueryCategoryRequest) Reset() { *x = QueryCategoryRequest{} - mi := &file_product_proto_msgTypes[47] + mi := &file_product_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2290,7 +2335,7 @@ func (x *QueryCategoryRequest) String() string { func (*QueryCategoryRequest) ProtoMessage() {} func (x *QueryCategoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[47] + mi := &file_product_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2303,7 +2348,7 @@ func (x *QueryCategoryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoryRequest.ProtoReflect.Descriptor instead. func (*QueryCategoryRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{47} + return file_product_proto_rawDescGZIP(), []int{48} } func (x *QueryCategoryRequest) GetId() string { @@ -2323,7 +2368,7 @@ type QueryCategoryResponse struct { func (x *QueryCategoryResponse) Reset() { *x = QueryCategoryResponse{} - mi := &file_product_proto_msgTypes[48] + mi := &file_product_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2335,7 +2380,7 @@ func (x *QueryCategoryResponse) String() string { func (*QueryCategoryResponse) ProtoMessage() {} func (x *QueryCategoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[48] + mi := &file_product_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2348,7 +2393,7 @@ func (x *QueryCategoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoryResponse.ProtoReflect.Descriptor instead. func (*QueryCategoryResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{48} + return file_product_proto_rawDescGZIP(), []int{49} } func (x *QueryCategoryResponse) GetCategory() *Category { @@ -2368,7 +2413,7 @@ type QueryCategoriesByKindRequest struct { func (x *QueryCategoriesByKindRequest) Reset() { *x = QueryCategoriesByKindRequest{} - mi := &file_product_proto_msgTypes[49] + mi := &file_product_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2380,7 +2425,7 @@ func (x *QueryCategoriesByKindRequest) String() string { func (*QueryCategoriesByKindRequest) ProtoMessage() {} func (x *QueryCategoriesByKindRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[49] + mi := &file_product_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2393,7 +2438,7 @@ func (x *QueryCategoriesByKindRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoriesByKindRequest.ProtoReflect.Descriptor instead. func (*QueryCategoriesByKindRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{49} + return file_product_proto_rawDescGZIP(), []int{50} } func (x *QueryCategoriesByKindRequest) GetKind() CategoryKind { @@ -2413,7 +2458,7 @@ type QueryCategoriesByKindResponse struct { func (x *QueryCategoriesByKindResponse) Reset() { *x = QueryCategoriesByKindResponse{} - mi := &file_product_proto_msgTypes[50] + mi := &file_product_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2425,7 +2470,7 @@ func (x *QueryCategoriesByKindResponse) String() string { func (*QueryCategoriesByKindResponse) ProtoMessage() {} func (x *QueryCategoriesByKindResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[50] + mi := &file_product_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2438,7 +2483,7 @@ func (x *QueryCategoriesByKindResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoriesByKindResponse.ProtoReflect.Descriptor instead. func (*QueryCategoriesByKindResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{50} + return file_product_proto_rawDescGZIP(), []int{51} } func (x *QueryCategoriesByKindResponse) GetCategoriesByKind() []*Category { @@ -2458,7 +2503,7 @@ type QueryCategoriesByKindsRequest struct { func (x *QueryCategoriesByKindsRequest) Reset() { *x = QueryCategoriesByKindsRequest{} - mi := &file_product_proto_msgTypes[51] + mi := &file_product_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2470,7 +2515,7 @@ func (x *QueryCategoriesByKindsRequest) String() string { func (*QueryCategoriesByKindsRequest) ProtoMessage() {} func (x *QueryCategoriesByKindsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[51] + mi := &file_product_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2483,7 +2528,7 @@ func (x *QueryCategoriesByKindsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoriesByKindsRequest.ProtoReflect.Descriptor instead. func (*QueryCategoriesByKindsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{51} + return file_product_proto_rawDescGZIP(), []int{52} } func (x *QueryCategoriesByKindsRequest) GetKinds() []CategoryKind { @@ -2503,7 +2548,7 @@ type QueryCategoriesByKindsResponse struct { func (x *QueryCategoriesByKindsResponse) Reset() { *x = QueryCategoriesByKindsResponse{} - mi := &file_product_proto_msgTypes[52] + mi := &file_product_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2515,7 +2560,7 @@ func (x *QueryCategoriesByKindsResponse) String() string { func (*QueryCategoriesByKindsResponse) ProtoMessage() {} func (x *QueryCategoriesByKindsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[52] + mi := &file_product_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2528,7 +2573,7 @@ func (x *QueryCategoriesByKindsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryCategoriesByKindsResponse.ProtoReflect.Descriptor instead. func (*QueryCategoriesByKindsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{52} + return file_product_proto_rawDescGZIP(), []int{53} } func (x *QueryCategoriesByKindsResponse) GetCategoriesByKinds() []*Category { @@ -2548,7 +2593,7 @@ type QueryFilterCategoriesRequest struct { func (x *QueryFilterCategoriesRequest) Reset() { *x = QueryFilterCategoriesRequest{} - mi := &file_product_proto_msgTypes[53] + mi := &file_product_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2560,7 +2605,7 @@ func (x *QueryFilterCategoriesRequest) String() string { func (*QueryFilterCategoriesRequest) ProtoMessage() {} func (x *QueryFilterCategoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[53] + mi := &file_product_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2573,7 +2618,7 @@ func (x *QueryFilterCategoriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryFilterCategoriesRequest.ProtoReflect.Descriptor instead. func (*QueryFilterCategoriesRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{53} + return file_product_proto_rawDescGZIP(), []int{54} } func (x *QueryFilterCategoriesRequest) GetFilter() *CategoryFilter { @@ -2593,7 +2638,7 @@ type QueryFilterCategoriesResponse struct { func (x *QueryFilterCategoriesResponse) Reset() { *x = QueryFilterCategoriesResponse{} - mi := &file_product_proto_msgTypes[54] + mi := &file_product_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2605,7 +2650,7 @@ func (x *QueryFilterCategoriesResponse) String() string { func (*QueryFilterCategoriesResponse) ProtoMessage() {} func (x *QueryFilterCategoriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[54] + mi := &file_product_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2618,7 +2663,7 @@ func (x *QueryFilterCategoriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryFilterCategoriesResponse.ProtoReflect.Descriptor instead. func (*QueryFilterCategoriesResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{54} + return file_product_proto_rawDescGZIP(), []int{55} } func (x *QueryFilterCategoriesResponse) GetFilterCategories() []*Category { @@ -2637,7 +2682,7 @@ type QueryRandomPetRequest struct { func (x *QueryRandomPetRequest) Reset() { *x = QueryRandomPetRequest{} - mi := &file_product_proto_msgTypes[55] + mi := &file_product_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2649,7 +2694,7 @@ func (x *QueryRandomPetRequest) String() string { func (*QueryRandomPetRequest) ProtoMessage() {} func (x *QueryRandomPetRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[55] + mi := &file_product_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2662,7 +2707,7 @@ func (x *QueryRandomPetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRandomPetRequest.ProtoReflect.Descriptor instead. func (*QueryRandomPetRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{55} + return file_product_proto_rawDescGZIP(), []int{56} } // Response message for randomPet operation. @@ -2675,7 +2720,7 @@ type QueryRandomPetResponse struct { func (x *QueryRandomPetResponse) Reset() { *x = QueryRandomPetResponse{} - mi := &file_product_proto_msgTypes[56] + mi := &file_product_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2687,7 +2732,7 @@ func (x *QueryRandomPetResponse) String() string { func (*QueryRandomPetResponse) ProtoMessage() {} func (x *QueryRandomPetResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[56] + mi := &file_product_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2700,7 +2745,7 @@ func (x *QueryRandomPetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRandomPetResponse.ProtoReflect.Descriptor instead. func (*QueryRandomPetResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{56} + return file_product_proto_rawDescGZIP(), []int{57} } func (x *QueryRandomPetResponse) GetRandomPet() *Animal { @@ -2719,7 +2764,7 @@ type QueryAllPetsRequest struct { func (x *QueryAllPetsRequest) Reset() { *x = QueryAllPetsRequest{} - mi := &file_product_proto_msgTypes[57] + mi := &file_product_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2731,7 +2776,7 @@ func (x *QueryAllPetsRequest) String() string { func (*QueryAllPetsRequest) ProtoMessage() {} func (x *QueryAllPetsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[57] + mi := &file_product_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2744,7 +2789,7 @@ func (x *QueryAllPetsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAllPetsRequest.ProtoReflect.Descriptor instead. func (*QueryAllPetsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{57} + return file_product_proto_rawDescGZIP(), []int{58} } // Response message for allPets operation. @@ -2757,7 +2802,7 @@ type QueryAllPetsResponse struct { func (x *QueryAllPetsResponse) Reset() { *x = QueryAllPetsResponse{} - mi := &file_product_proto_msgTypes[58] + mi := &file_product_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2769,7 +2814,7 @@ func (x *QueryAllPetsResponse) String() string { func (*QueryAllPetsResponse) ProtoMessage() {} func (x *QueryAllPetsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[58] + mi := &file_product_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2782,7 +2827,7 @@ func (x *QueryAllPetsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAllPetsResponse.ProtoReflect.Descriptor instead. func (*QueryAllPetsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{58} + return file_product_proto_rawDescGZIP(), []int{59} } func (x *QueryAllPetsResponse) GetAllPets() []*Animal { @@ -2802,7 +2847,7 @@ type QuerySearchRequest struct { func (x *QuerySearchRequest) Reset() { *x = QuerySearchRequest{} - mi := &file_product_proto_msgTypes[59] + mi := &file_product_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2814,7 +2859,7 @@ func (x *QuerySearchRequest) String() string { func (*QuerySearchRequest) ProtoMessage() {} func (x *QuerySearchRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[59] + mi := &file_product_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2827,7 +2872,7 @@ func (x *QuerySearchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QuerySearchRequest.ProtoReflect.Descriptor instead. func (*QuerySearchRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{59} + return file_product_proto_rawDescGZIP(), []int{60} } func (x *QuerySearchRequest) GetInput() *SearchInput { @@ -2847,7 +2892,7 @@ type QuerySearchResponse struct { func (x *QuerySearchResponse) Reset() { *x = QuerySearchResponse{} - mi := &file_product_proto_msgTypes[60] + mi := &file_product_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2859,7 +2904,7 @@ func (x *QuerySearchResponse) String() string { func (*QuerySearchResponse) ProtoMessage() {} func (x *QuerySearchResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[60] + mi := &file_product_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2872,7 +2917,7 @@ func (x *QuerySearchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QuerySearchResponse.ProtoReflect.Descriptor instead. func (*QuerySearchResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{60} + return file_product_proto_rawDescGZIP(), []int{61} } func (x *QuerySearchResponse) GetSearch() []*SearchResult { @@ -2891,7 +2936,7 @@ type QueryRandomSearchResultRequest struct { func (x *QueryRandomSearchResultRequest) Reset() { *x = QueryRandomSearchResultRequest{} - mi := &file_product_proto_msgTypes[61] + mi := &file_product_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2903,7 +2948,7 @@ func (x *QueryRandomSearchResultRequest) String() string { func (*QueryRandomSearchResultRequest) ProtoMessage() {} func (x *QueryRandomSearchResultRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[61] + mi := &file_product_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2916,7 +2961,7 @@ func (x *QueryRandomSearchResultRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRandomSearchResultRequest.ProtoReflect.Descriptor instead. func (*QueryRandomSearchResultRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{61} + return file_product_proto_rawDescGZIP(), []int{62} } // Response message for randomSearchResult operation. @@ -2929,7 +2974,7 @@ type QueryRandomSearchResultResponse struct { func (x *QueryRandomSearchResultResponse) Reset() { *x = QueryRandomSearchResultResponse{} - mi := &file_product_proto_msgTypes[62] + mi := &file_product_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2941,7 +2986,7 @@ func (x *QueryRandomSearchResultResponse) String() string { func (*QueryRandomSearchResultResponse) ProtoMessage() {} func (x *QueryRandomSearchResultResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[62] + mi := &file_product_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2954,7 +2999,7 @@ func (x *QueryRandomSearchResultResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryRandomSearchResultResponse.ProtoReflect.Descriptor instead. func (*QueryRandomSearchResultResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{62} + return file_product_proto_rawDescGZIP(), []int{63} } func (x *QueryRandomSearchResultResponse) GetRandomSearchResult() *SearchResult { @@ -2973,7 +3018,7 @@ type QueryNullableFieldsTypeRequest struct { func (x *QueryNullableFieldsTypeRequest) Reset() { *x = QueryNullableFieldsTypeRequest{} - mi := &file_product_proto_msgTypes[63] + mi := &file_product_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2985,7 +3030,7 @@ func (x *QueryNullableFieldsTypeRequest) String() string { func (*QueryNullableFieldsTypeRequest) ProtoMessage() {} func (x *QueryNullableFieldsTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[63] + mi := &file_product_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2998,7 +3043,7 @@ func (x *QueryNullableFieldsTypeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryNullableFieldsTypeRequest.ProtoReflect.Descriptor instead. func (*QueryNullableFieldsTypeRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{63} + return file_product_proto_rawDescGZIP(), []int{64} } // Response message for nullableFieldsType operation. @@ -3011,7 +3056,7 @@ type QueryNullableFieldsTypeResponse struct { func (x *QueryNullableFieldsTypeResponse) Reset() { *x = QueryNullableFieldsTypeResponse{} - mi := &file_product_proto_msgTypes[64] + mi := &file_product_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3023,7 +3068,7 @@ func (x *QueryNullableFieldsTypeResponse) String() string { func (*QueryNullableFieldsTypeResponse) ProtoMessage() {} func (x *QueryNullableFieldsTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[64] + mi := &file_product_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3036,7 +3081,7 @@ func (x *QueryNullableFieldsTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryNullableFieldsTypeResponse.ProtoReflect.Descriptor instead. func (*QueryNullableFieldsTypeResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{64} + return file_product_proto_rawDescGZIP(), []int{65} } func (x *QueryNullableFieldsTypeResponse) GetNullableFieldsType() *NullableFieldsType { @@ -3056,7 +3101,7 @@ type QueryNullableFieldsTypeByIdRequest struct { func (x *QueryNullableFieldsTypeByIdRequest) Reset() { *x = QueryNullableFieldsTypeByIdRequest{} - mi := &file_product_proto_msgTypes[65] + mi := &file_product_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3068,7 +3113,7 @@ func (x *QueryNullableFieldsTypeByIdRequest) String() string { func (*QueryNullableFieldsTypeByIdRequest) ProtoMessage() {} func (x *QueryNullableFieldsTypeByIdRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[65] + mi := &file_product_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3081,7 +3126,7 @@ func (x *QueryNullableFieldsTypeByIdRequest) ProtoReflect() protoreflect.Message // Deprecated: Use QueryNullableFieldsTypeByIdRequest.ProtoReflect.Descriptor instead. func (*QueryNullableFieldsTypeByIdRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{65} + return file_product_proto_rawDescGZIP(), []int{66} } func (x *QueryNullableFieldsTypeByIdRequest) GetId() string { @@ -3101,7 +3146,7 @@ type QueryNullableFieldsTypeByIdResponse struct { func (x *QueryNullableFieldsTypeByIdResponse) Reset() { *x = QueryNullableFieldsTypeByIdResponse{} - mi := &file_product_proto_msgTypes[66] + mi := &file_product_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3113,7 +3158,7 @@ func (x *QueryNullableFieldsTypeByIdResponse) String() string { func (*QueryNullableFieldsTypeByIdResponse) ProtoMessage() {} func (x *QueryNullableFieldsTypeByIdResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[66] + mi := &file_product_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3126,7 +3171,7 @@ func (x *QueryNullableFieldsTypeByIdResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use QueryNullableFieldsTypeByIdResponse.ProtoReflect.Descriptor instead. func (*QueryNullableFieldsTypeByIdResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{66} + return file_product_proto_rawDescGZIP(), []int{67} } func (x *QueryNullableFieldsTypeByIdResponse) GetNullableFieldsTypeById() *NullableFieldsType { @@ -3146,7 +3191,7 @@ type QueryNullableFieldsTypeWithFilterRequest struct { func (x *QueryNullableFieldsTypeWithFilterRequest) Reset() { *x = QueryNullableFieldsTypeWithFilterRequest{} - mi := &file_product_proto_msgTypes[67] + mi := &file_product_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3158,7 +3203,7 @@ func (x *QueryNullableFieldsTypeWithFilterRequest) String() string { func (*QueryNullableFieldsTypeWithFilterRequest) ProtoMessage() {} func (x *QueryNullableFieldsTypeWithFilterRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[67] + mi := &file_product_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3171,7 +3216,7 @@ func (x *QueryNullableFieldsTypeWithFilterRequest) ProtoReflect() protoreflect.M // Deprecated: Use QueryNullableFieldsTypeWithFilterRequest.ProtoReflect.Descriptor instead. func (*QueryNullableFieldsTypeWithFilterRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{67} + return file_product_proto_rawDescGZIP(), []int{68} } func (x *QueryNullableFieldsTypeWithFilterRequest) GetFilter() *NullableFieldsFilter { @@ -3191,7 +3236,7 @@ type QueryNullableFieldsTypeWithFilterResponse struct { func (x *QueryNullableFieldsTypeWithFilterResponse) Reset() { *x = QueryNullableFieldsTypeWithFilterResponse{} - mi := &file_product_proto_msgTypes[68] + mi := &file_product_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3203,7 +3248,7 @@ func (x *QueryNullableFieldsTypeWithFilterResponse) String() string { func (*QueryNullableFieldsTypeWithFilterResponse) ProtoMessage() {} func (x *QueryNullableFieldsTypeWithFilterResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[68] + mi := &file_product_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3216,7 +3261,7 @@ func (x *QueryNullableFieldsTypeWithFilterResponse) ProtoReflect() protoreflect. // Deprecated: Use QueryNullableFieldsTypeWithFilterResponse.ProtoReflect.Descriptor instead. func (*QueryNullableFieldsTypeWithFilterResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{68} + return file_product_proto_rawDescGZIP(), []int{69} } func (x *QueryNullableFieldsTypeWithFilterResponse) GetNullableFieldsTypeWithFilter() []*NullableFieldsType { @@ -3235,7 +3280,7 @@ type QueryAllNullableFieldsTypesRequest struct { func (x *QueryAllNullableFieldsTypesRequest) Reset() { *x = QueryAllNullableFieldsTypesRequest{} - mi := &file_product_proto_msgTypes[69] + mi := &file_product_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3247,7 +3292,7 @@ func (x *QueryAllNullableFieldsTypesRequest) String() string { func (*QueryAllNullableFieldsTypesRequest) ProtoMessage() {} func (x *QueryAllNullableFieldsTypesRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[69] + mi := &file_product_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3260,7 +3305,7 @@ func (x *QueryAllNullableFieldsTypesRequest) ProtoReflect() protoreflect.Message // Deprecated: Use QueryAllNullableFieldsTypesRequest.ProtoReflect.Descriptor instead. func (*QueryAllNullableFieldsTypesRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{69} + return file_product_proto_rawDescGZIP(), []int{70} } // Response message for allNullableFieldsTypes operation. @@ -3273,7 +3318,7 @@ type QueryAllNullableFieldsTypesResponse struct { func (x *QueryAllNullableFieldsTypesResponse) Reset() { *x = QueryAllNullableFieldsTypesResponse{} - mi := &file_product_proto_msgTypes[70] + mi := &file_product_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3285,7 +3330,7 @@ func (x *QueryAllNullableFieldsTypesResponse) String() string { func (*QueryAllNullableFieldsTypesResponse) ProtoMessage() {} func (x *QueryAllNullableFieldsTypesResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[70] + mi := &file_product_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3298,7 +3343,7 @@ func (x *QueryAllNullableFieldsTypesResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use QueryAllNullableFieldsTypesResponse.ProtoReflect.Descriptor instead. func (*QueryAllNullableFieldsTypesResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{70} + return file_product_proto_rawDescGZIP(), []int{71} } func (x *QueryAllNullableFieldsTypesResponse) GetAllNullableFieldsTypes() []*NullableFieldsType { @@ -3317,7 +3362,7 @@ type QueryBlogPostRequest struct { func (x *QueryBlogPostRequest) Reset() { *x = QueryBlogPostRequest{} - mi := &file_product_proto_msgTypes[71] + mi := &file_product_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3329,7 +3374,7 @@ func (x *QueryBlogPostRequest) String() string { func (*QueryBlogPostRequest) ProtoMessage() {} func (x *QueryBlogPostRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[71] + mi := &file_product_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3342,7 +3387,7 @@ func (x *QueryBlogPostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBlogPostRequest.ProtoReflect.Descriptor instead. func (*QueryBlogPostRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{71} + return file_product_proto_rawDescGZIP(), []int{72} } // Response message for blogPost operation. @@ -3355,7 +3400,7 @@ type QueryBlogPostResponse struct { func (x *QueryBlogPostResponse) Reset() { *x = QueryBlogPostResponse{} - mi := &file_product_proto_msgTypes[72] + mi := &file_product_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3367,7 +3412,7 @@ func (x *QueryBlogPostResponse) String() string { func (*QueryBlogPostResponse) ProtoMessage() {} func (x *QueryBlogPostResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[72] + mi := &file_product_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3380,7 +3425,7 @@ func (x *QueryBlogPostResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBlogPostResponse.ProtoReflect.Descriptor instead. func (*QueryBlogPostResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{72} + return file_product_proto_rawDescGZIP(), []int{73} } func (x *QueryBlogPostResponse) GetBlogPost() *BlogPost { @@ -3400,7 +3445,7 @@ type QueryBlogPostByIdRequest struct { func (x *QueryBlogPostByIdRequest) Reset() { *x = QueryBlogPostByIdRequest{} - mi := &file_product_proto_msgTypes[73] + mi := &file_product_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3412,7 +3457,7 @@ func (x *QueryBlogPostByIdRequest) String() string { func (*QueryBlogPostByIdRequest) ProtoMessage() {} func (x *QueryBlogPostByIdRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[73] + mi := &file_product_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3425,7 +3470,7 @@ func (x *QueryBlogPostByIdRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBlogPostByIdRequest.ProtoReflect.Descriptor instead. func (*QueryBlogPostByIdRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{73} + return file_product_proto_rawDescGZIP(), []int{74} } func (x *QueryBlogPostByIdRequest) GetId() string { @@ -3445,7 +3490,7 @@ type QueryBlogPostByIdResponse struct { func (x *QueryBlogPostByIdResponse) Reset() { *x = QueryBlogPostByIdResponse{} - mi := &file_product_proto_msgTypes[74] + mi := &file_product_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3457,7 +3502,7 @@ func (x *QueryBlogPostByIdResponse) String() string { func (*QueryBlogPostByIdResponse) ProtoMessage() {} func (x *QueryBlogPostByIdResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[74] + mi := &file_product_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3470,7 +3515,7 @@ func (x *QueryBlogPostByIdResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBlogPostByIdResponse.ProtoReflect.Descriptor instead. func (*QueryBlogPostByIdResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{74} + return file_product_proto_rawDescGZIP(), []int{75} } func (x *QueryBlogPostByIdResponse) GetBlogPostById() *BlogPost { @@ -3490,7 +3535,7 @@ type QueryBlogPostsWithFilterRequest struct { func (x *QueryBlogPostsWithFilterRequest) Reset() { *x = QueryBlogPostsWithFilterRequest{} - mi := &file_product_proto_msgTypes[75] + mi := &file_product_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3502,7 +3547,7 @@ func (x *QueryBlogPostsWithFilterRequest) String() string { func (*QueryBlogPostsWithFilterRequest) ProtoMessage() {} func (x *QueryBlogPostsWithFilterRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[75] + mi := &file_product_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3515,7 +3560,7 @@ func (x *QueryBlogPostsWithFilterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBlogPostsWithFilterRequest.ProtoReflect.Descriptor instead. func (*QueryBlogPostsWithFilterRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{75} + return file_product_proto_rawDescGZIP(), []int{76} } func (x *QueryBlogPostsWithFilterRequest) GetFilter() *BlogPostFilter { @@ -3535,7 +3580,7 @@ type QueryBlogPostsWithFilterResponse struct { func (x *QueryBlogPostsWithFilterResponse) Reset() { *x = QueryBlogPostsWithFilterResponse{} - mi := &file_product_proto_msgTypes[76] + mi := &file_product_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3547,7 +3592,7 @@ func (x *QueryBlogPostsWithFilterResponse) String() string { func (*QueryBlogPostsWithFilterResponse) ProtoMessage() {} func (x *QueryBlogPostsWithFilterResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[76] + mi := &file_product_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3560,7 +3605,7 @@ func (x *QueryBlogPostsWithFilterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBlogPostsWithFilterResponse.ProtoReflect.Descriptor instead. func (*QueryBlogPostsWithFilterResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{76} + return file_product_proto_rawDescGZIP(), []int{77} } func (x *QueryBlogPostsWithFilterResponse) GetBlogPostsWithFilter() []*BlogPost { @@ -3579,7 +3624,7 @@ type QueryAllBlogPostsRequest struct { func (x *QueryAllBlogPostsRequest) Reset() { *x = QueryAllBlogPostsRequest{} - mi := &file_product_proto_msgTypes[77] + mi := &file_product_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3591,7 +3636,7 @@ func (x *QueryAllBlogPostsRequest) String() string { func (*QueryAllBlogPostsRequest) ProtoMessage() {} func (x *QueryAllBlogPostsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[77] + mi := &file_product_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3604,7 +3649,7 @@ func (x *QueryAllBlogPostsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAllBlogPostsRequest.ProtoReflect.Descriptor instead. func (*QueryAllBlogPostsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{77} + return file_product_proto_rawDescGZIP(), []int{78} } // Response message for allBlogPosts operation. @@ -3617,7 +3662,7 @@ type QueryAllBlogPostsResponse struct { func (x *QueryAllBlogPostsResponse) Reset() { *x = QueryAllBlogPostsResponse{} - mi := &file_product_proto_msgTypes[78] + mi := &file_product_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3629,7 +3674,7 @@ func (x *QueryAllBlogPostsResponse) String() string { func (*QueryAllBlogPostsResponse) ProtoMessage() {} func (x *QueryAllBlogPostsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[78] + mi := &file_product_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3642,7 +3687,7 @@ func (x *QueryAllBlogPostsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAllBlogPostsResponse.ProtoReflect.Descriptor instead. func (*QueryAllBlogPostsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{78} + return file_product_proto_rawDescGZIP(), []int{79} } func (x *QueryAllBlogPostsResponse) GetAllBlogPosts() []*BlogPost { @@ -3661,7 +3706,7 @@ type QueryAuthorRequest struct { func (x *QueryAuthorRequest) Reset() { *x = QueryAuthorRequest{} - mi := &file_product_proto_msgTypes[79] + mi := &file_product_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3673,7 +3718,7 @@ func (x *QueryAuthorRequest) String() string { func (*QueryAuthorRequest) ProtoMessage() {} func (x *QueryAuthorRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[79] + mi := &file_product_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3686,7 +3731,7 @@ func (x *QueryAuthorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuthorRequest.ProtoReflect.Descriptor instead. func (*QueryAuthorRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{79} + return file_product_proto_rawDescGZIP(), []int{80} } // Response message for author operation. @@ -3699,7 +3744,7 @@ type QueryAuthorResponse struct { func (x *QueryAuthorResponse) Reset() { *x = QueryAuthorResponse{} - mi := &file_product_proto_msgTypes[80] + mi := &file_product_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3711,7 +3756,7 @@ func (x *QueryAuthorResponse) String() string { func (*QueryAuthorResponse) ProtoMessage() {} func (x *QueryAuthorResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[80] + mi := &file_product_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3724,7 +3769,7 @@ func (x *QueryAuthorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuthorResponse.ProtoReflect.Descriptor instead. func (*QueryAuthorResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{80} + return file_product_proto_rawDescGZIP(), []int{81} } func (x *QueryAuthorResponse) GetAuthor() *Author { @@ -3744,7 +3789,7 @@ type QueryAuthorByIdRequest struct { func (x *QueryAuthorByIdRequest) Reset() { *x = QueryAuthorByIdRequest{} - mi := &file_product_proto_msgTypes[81] + mi := &file_product_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3756,7 +3801,7 @@ func (x *QueryAuthorByIdRequest) String() string { func (*QueryAuthorByIdRequest) ProtoMessage() {} func (x *QueryAuthorByIdRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[81] + mi := &file_product_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3769,7 +3814,7 @@ func (x *QueryAuthorByIdRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuthorByIdRequest.ProtoReflect.Descriptor instead. func (*QueryAuthorByIdRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{81} + return file_product_proto_rawDescGZIP(), []int{82} } func (x *QueryAuthorByIdRequest) GetId() string { @@ -3789,7 +3834,7 @@ type QueryAuthorByIdResponse struct { func (x *QueryAuthorByIdResponse) Reset() { *x = QueryAuthorByIdResponse{} - mi := &file_product_proto_msgTypes[82] + mi := &file_product_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3801,7 +3846,7 @@ func (x *QueryAuthorByIdResponse) String() string { func (*QueryAuthorByIdResponse) ProtoMessage() {} func (x *QueryAuthorByIdResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[82] + mi := &file_product_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3814,7 +3859,7 @@ func (x *QueryAuthorByIdResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuthorByIdResponse.ProtoReflect.Descriptor instead. func (*QueryAuthorByIdResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{82} + return file_product_proto_rawDescGZIP(), []int{83} } func (x *QueryAuthorByIdResponse) GetAuthorById() *Author { @@ -3834,7 +3879,7 @@ type QueryAuthorsWithFilterRequest struct { func (x *QueryAuthorsWithFilterRequest) Reset() { *x = QueryAuthorsWithFilterRequest{} - mi := &file_product_proto_msgTypes[83] + mi := &file_product_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3846,7 +3891,7 @@ func (x *QueryAuthorsWithFilterRequest) String() string { func (*QueryAuthorsWithFilterRequest) ProtoMessage() {} func (x *QueryAuthorsWithFilterRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[83] + mi := &file_product_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3859,7 +3904,7 @@ func (x *QueryAuthorsWithFilterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuthorsWithFilterRequest.ProtoReflect.Descriptor instead. func (*QueryAuthorsWithFilterRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{83} + return file_product_proto_rawDescGZIP(), []int{84} } func (x *QueryAuthorsWithFilterRequest) GetFilter() *AuthorFilter { @@ -3879,7 +3924,7 @@ type QueryAuthorsWithFilterResponse struct { func (x *QueryAuthorsWithFilterResponse) Reset() { *x = QueryAuthorsWithFilterResponse{} - mi := &file_product_proto_msgTypes[84] + mi := &file_product_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3891,7 +3936,7 @@ func (x *QueryAuthorsWithFilterResponse) String() string { func (*QueryAuthorsWithFilterResponse) ProtoMessage() {} func (x *QueryAuthorsWithFilterResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[84] + mi := &file_product_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3904,7 +3949,7 @@ func (x *QueryAuthorsWithFilterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuthorsWithFilterResponse.ProtoReflect.Descriptor instead. func (*QueryAuthorsWithFilterResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{84} + return file_product_proto_rawDescGZIP(), []int{85} } func (x *QueryAuthorsWithFilterResponse) GetAuthorsWithFilter() []*Author { @@ -3923,7 +3968,7 @@ type QueryAllAuthorsRequest struct { func (x *QueryAllAuthorsRequest) Reset() { *x = QueryAllAuthorsRequest{} - mi := &file_product_proto_msgTypes[85] + mi := &file_product_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3935,7 +3980,7 @@ func (x *QueryAllAuthorsRequest) String() string { func (*QueryAllAuthorsRequest) ProtoMessage() {} func (x *QueryAllAuthorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[85] + mi := &file_product_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3948,7 +3993,7 @@ func (x *QueryAllAuthorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAllAuthorsRequest.ProtoReflect.Descriptor instead. func (*QueryAllAuthorsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{85} + return file_product_proto_rawDescGZIP(), []int{86} } // Response message for allAuthors operation. @@ -3961,7 +4006,7 @@ type QueryAllAuthorsResponse struct { func (x *QueryAllAuthorsResponse) Reset() { *x = QueryAllAuthorsResponse{} - mi := &file_product_proto_msgTypes[86] + mi := &file_product_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3973,7 +4018,7 @@ func (x *QueryAllAuthorsResponse) String() string { func (*QueryAllAuthorsResponse) ProtoMessage() {} func (x *QueryAllAuthorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[86] + mi := &file_product_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3986,7 +4031,7 @@ func (x *QueryAllAuthorsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAllAuthorsResponse.ProtoReflect.Descriptor instead. func (*QueryAllAuthorsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{86} + return file_product_proto_rawDescGZIP(), []int{87} } func (x *QueryAllAuthorsResponse) GetAllAuthors() []*Author { @@ -4006,7 +4051,7 @@ type QueryBulkSearchAuthorsRequest struct { func (x *QueryBulkSearchAuthorsRequest) Reset() { *x = QueryBulkSearchAuthorsRequest{} - mi := &file_product_proto_msgTypes[87] + mi := &file_product_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4018,7 +4063,7 @@ func (x *QueryBulkSearchAuthorsRequest) String() string { func (*QueryBulkSearchAuthorsRequest) ProtoMessage() {} func (x *QueryBulkSearchAuthorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[87] + mi := &file_product_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4031,7 +4076,7 @@ func (x *QueryBulkSearchAuthorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBulkSearchAuthorsRequest.ProtoReflect.Descriptor instead. func (*QueryBulkSearchAuthorsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{87} + return file_product_proto_rawDescGZIP(), []int{88} } func (x *QueryBulkSearchAuthorsRequest) GetFilters() *ListOfAuthorFilter { @@ -4051,7 +4096,7 @@ type QueryBulkSearchAuthorsResponse struct { func (x *QueryBulkSearchAuthorsResponse) Reset() { *x = QueryBulkSearchAuthorsResponse{} - mi := &file_product_proto_msgTypes[88] + mi := &file_product_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4063,7 +4108,7 @@ func (x *QueryBulkSearchAuthorsResponse) String() string { func (*QueryBulkSearchAuthorsResponse) ProtoMessage() {} func (x *QueryBulkSearchAuthorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[88] + mi := &file_product_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4076,7 +4121,7 @@ func (x *QueryBulkSearchAuthorsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBulkSearchAuthorsResponse.ProtoReflect.Descriptor instead. func (*QueryBulkSearchAuthorsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{88} + return file_product_proto_rawDescGZIP(), []int{89} } func (x *QueryBulkSearchAuthorsResponse) GetBulkSearchAuthors() []*Author { @@ -4096,7 +4141,7 @@ type QueryBulkSearchBlogPostsRequest struct { func (x *QueryBulkSearchBlogPostsRequest) Reset() { *x = QueryBulkSearchBlogPostsRequest{} - mi := &file_product_proto_msgTypes[89] + mi := &file_product_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4108,7 +4153,7 @@ func (x *QueryBulkSearchBlogPostsRequest) String() string { func (*QueryBulkSearchBlogPostsRequest) ProtoMessage() {} func (x *QueryBulkSearchBlogPostsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[89] + mi := &file_product_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4121,7 +4166,7 @@ func (x *QueryBulkSearchBlogPostsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBulkSearchBlogPostsRequest.ProtoReflect.Descriptor instead. func (*QueryBulkSearchBlogPostsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{89} + return file_product_proto_rawDescGZIP(), []int{90} } func (x *QueryBulkSearchBlogPostsRequest) GetFilters() *ListOfBlogPostFilter { @@ -4141,7 +4186,7 @@ type QueryBulkSearchBlogPostsResponse struct { func (x *QueryBulkSearchBlogPostsResponse) Reset() { *x = QueryBulkSearchBlogPostsResponse{} - mi := &file_product_proto_msgTypes[90] + mi := &file_product_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4153,7 +4198,7 @@ func (x *QueryBulkSearchBlogPostsResponse) String() string { func (*QueryBulkSearchBlogPostsResponse) ProtoMessage() {} func (x *QueryBulkSearchBlogPostsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[90] + mi := &file_product_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4166,7 +4211,7 @@ func (x *QueryBulkSearchBlogPostsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryBulkSearchBlogPostsResponse.ProtoReflect.Descriptor instead. func (*QueryBulkSearchBlogPostsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{90} + return file_product_proto_rawDescGZIP(), []int{91} } func (x *QueryBulkSearchBlogPostsResponse) GetBulkSearchBlogPosts() []*BlogPost { @@ -4186,7 +4231,7 @@ type QueryTestContainerRequest struct { func (x *QueryTestContainerRequest) Reset() { *x = QueryTestContainerRequest{} - mi := &file_product_proto_msgTypes[91] + mi := &file_product_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4198,7 +4243,7 @@ func (x *QueryTestContainerRequest) String() string { func (*QueryTestContainerRequest) ProtoMessage() {} func (x *QueryTestContainerRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[91] + mi := &file_product_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4211,7 +4256,7 @@ func (x *QueryTestContainerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryTestContainerRequest.ProtoReflect.Descriptor instead. func (*QueryTestContainerRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{91} + return file_product_proto_rawDescGZIP(), []int{92} } func (x *QueryTestContainerRequest) GetId() string { @@ -4231,7 +4276,7 @@ type QueryTestContainerResponse struct { func (x *QueryTestContainerResponse) Reset() { *x = QueryTestContainerResponse{} - mi := &file_product_proto_msgTypes[92] + mi := &file_product_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4243,7 +4288,7 @@ func (x *QueryTestContainerResponse) String() string { func (*QueryTestContainerResponse) ProtoMessage() {} func (x *QueryTestContainerResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[92] + mi := &file_product_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4256,7 +4301,7 @@ func (x *QueryTestContainerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryTestContainerResponse.ProtoReflect.Descriptor instead. func (*QueryTestContainerResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{92} + return file_product_proto_rawDescGZIP(), []int{93} } func (x *QueryTestContainerResponse) GetTestContainer() *TestContainer { @@ -4275,7 +4320,7 @@ type QueryTestContainersRequest struct { func (x *QueryTestContainersRequest) Reset() { *x = QueryTestContainersRequest{} - mi := &file_product_proto_msgTypes[93] + mi := &file_product_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4287,7 +4332,7 @@ func (x *QueryTestContainersRequest) String() string { func (*QueryTestContainersRequest) ProtoMessage() {} func (x *QueryTestContainersRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[93] + mi := &file_product_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4300,7 +4345,7 @@ func (x *QueryTestContainersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryTestContainersRequest.ProtoReflect.Descriptor instead. func (*QueryTestContainersRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{93} + return file_product_proto_rawDescGZIP(), []int{94} } // Response message for testContainers operation. @@ -4313,7 +4358,7 @@ type QueryTestContainersResponse struct { func (x *QueryTestContainersResponse) Reset() { *x = QueryTestContainersResponse{} - mi := &file_product_proto_msgTypes[94] + mi := &file_product_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4325,7 +4370,7 @@ func (x *QueryTestContainersResponse) String() string { func (*QueryTestContainersResponse) ProtoMessage() {} func (x *QueryTestContainersResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[94] + mi := &file_product_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4338,7 +4383,7 @@ func (x *QueryTestContainersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryTestContainersResponse.ProtoReflect.Descriptor instead. func (*QueryTestContainersResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{94} + return file_product_proto_rawDescGZIP(), []int{95} } func (x *QueryTestContainersResponse) GetTestContainers() []*TestContainer { @@ -4358,7 +4403,7 @@ type MutationCreateUserRequest struct { func (x *MutationCreateUserRequest) Reset() { *x = MutationCreateUserRequest{} - mi := &file_product_proto_msgTypes[95] + mi := &file_product_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4370,7 +4415,7 @@ func (x *MutationCreateUserRequest) String() string { func (*MutationCreateUserRequest) ProtoMessage() {} func (x *MutationCreateUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[95] + mi := &file_product_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4383,7 +4428,7 @@ func (x *MutationCreateUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationCreateUserRequest.ProtoReflect.Descriptor instead. func (*MutationCreateUserRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{95} + return file_product_proto_rawDescGZIP(), []int{96} } func (x *MutationCreateUserRequest) GetInput() *UserInput { @@ -4403,7 +4448,7 @@ type MutationCreateUserResponse struct { func (x *MutationCreateUserResponse) Reset() { *x = MutationCreateUserResponse{} - mi := &file_product_proto_msgTypes[96] + mi := &file_product_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4415,7 +4460,7 @@ func (x *MutationCreateUserResponse) String() string { func (*MutationCreateUserResponse) ProtoMessage() {} func (x *MutationCreateUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[96] + mi := &file_product_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4428,7 +4473,7 @@ func (x *MutationCreateUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationCreateUserResponse.ProtoReflect.Descriptor instead. func (*MutationCreateUserResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{96} + return file_product_proto_rawDescGZIP(), []int{97} } func (x *MutationCreateUserResponse) GetCreateUser() *User { @@ -4448,7 +4493,7 @@ type MutationPerformActionRequest struct { func (x *MutationPerformActionRequest) Reset() { *x = MutationPerformActionRequest{} - mi := &file_product_proto_msgTypes[97] + mi := &file_product_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4460,7 +4505,7 @@ func (x *MutationPerformActionRequest) String() string { func (*MutationPerformActionRequest) ProtoMessage() {} func (x *MutationPerformActionRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[97] + mi := &file_product_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4473,7 +4518,7 @@ func (x *MutationPerformActionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationPerformActionRequest.ProtoReflect.Descriptor instead. func (*MutationPerformActionRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{97} + return file_product_proto_rawDescGZIP(), []int{98} } func (x *MutationPerformActionRequest) GetInput() *ActionInput { @@ -4493,7 +4538,7 @@ type MutationPerformActionResponse struct { func (x *MutationPerformActionResponse) Reset() { *x = MutationPerformActionResponse{} - mi := &file_product_proto_msgTypes[98] + mi := &file_product_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4505,7 +4550,7 @@ func (x *MutationPerformActionResponse) String() string { func (*MutationPerformActionResponse) ProtoMessage() {} func (x *MutationPerformActionResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[98] + mi := &file_product_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4518,7 +4563,7 @@ func (x *MutationPerformActionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationPerformActionResponse.ProtoReflect.Descriptor instead. func (*MutationPerformActionResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{98} + return file_product_proto_rawDescGZIP(), []int{99} } func (x *MutationPerformActionResponse) GetPerformAction() *ActionResult { @@ -4538,7 +4583,7 @@ type MutationCreateNullableFieldsTypeRequest struct { func (x *MutationCreateNullableFieldsTypeRequest) Reset() { *x = MutationCreateNullableFieldsTypeRequest{} - mi := &file_product_proto_msgTypes[99] + mi := &file_product_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4550,7 +4595,7 @@ func (x *MutationCreateNullableFieldsTypeRequest) String() string { func (*MutationCreateNullableFieldsTypeRequest) ProtoMessage() {} func (x *MutationCreateNullableFieldsTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[99] + mi := &file_product_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4563,7 +4608,7 @@ func (x *MutationCreateNullableFieldsTypeRequest) ProtoReflect() protoreflect.Me // Deprecated: Use MutationCreateNullableFieldsTypeRequest.ProtoReflect.Descriptor instead. func (*MutationCreateNullableFieldsTypeRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{99} + return file_product_proto_rawDescGZIP(), []int{100} } func (x *MutationCreateNullableFieldsTypeRequest) GetInput() *NullableFieldsInput { @@ -4583,7 +4628,7 @@ type MutationCreateNullableFieldsTypeResponse struct { func (x *MutationCreateNullableFieldsTypeResponse) Reset() { *x = MutationCreateNullableFieldsTypeResponse{} - mi := &file_product_proto_msgTypes[100] + mi := &file_product_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4595,7 +4640,7 @@ func (x *MutationCreateNullableFieldsTypeResponse) String() string { func (*MutationCreateNullableFieldsTypeResponse) ProtoMessage() {} func (x *MutationCreateNullableFieldsTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[100] + mi := &file_product_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4608,7 +4653,7 @@ func (x *MutationCreateNullableFieldsTypeResponse) ProtoReflect() protoreflect.M // Deprecated: Use MutationCreateNullableFieldsTypeResponse.ProtoReflect.Descriptor instead. func (*MutationCreateNullableFieldsTypeResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{100} + return file_product_proto_rawDescGZIP(), []int{101} } func (x *MutationCreateNullableFieldsTypeResponse) GetCreateNullableFieldsType() *NullableFieldsType { @@ -4629,7 +4674,7 @@ type MutationUpdateNullableFieldsTypeRequest struct { func (x *MutationUpdateNullableFieldsTypeRequest) Reset() { *x = MutationUpdateNullableFieldsTypeRequest{} - mi := &file_product_proto_msgTypes[101] + mi := &file_product_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4641,7 +4686,7 @@ func (x *MutationUpdateNullableFieldsTypeRequest) String() string { func (*MutationUpdateNullableFieldsTypeRequest) ProtoMessage() {} func (x *MutationUpdateNullableFieldsTypeRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[101] + mi := &file_product_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4654,7 +4699,7 @@ func (x *MutationUpdateNullableFieldsTypeRequest) ProtoReflect() protoreflect.Me // Deprecated: Use MutationUpdateNullableFieldsTypeRequest.ProtoReflect.Descriptor instead. func (*MutationUpdateNullableFieldsTypeRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{101} + return file_product_proto_rawDescGZIP(), []int{102} } func (x *MutationUpdateNullableFieldsTypeRequest) GetId() string { @@ -4681,7 +4726,7 @@ type MutationUpdateNullableFieldsTypeResponse struct { func (x *MutationUpdateNullableFieldsTypeResponse) Reset() { *x = MutationUpdateNullableFieldsTypeResponse{} - mi := &file_product_proto_msgTypes[102] + mi := &file_product_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4693,7 +4738,7 @@ func (x *MutationUpdateNullableFieldsTypeResponse) String() string { func (*MutationUpdateNullableFieldsTypeResponse) ProtoMessage() {} func (x *MutationUpdateNullableFieldsTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[102] + mi := &file_product_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4706,7 +4751,7 @@ func (x *MutationUpdateNullableFieldsTypeResponse) ProtoReflect() protoreflect.M // Deprecated: Use MutationUpdateNullableFieldsTypeResponse.ProtoReflect.Descriptor instead. func (*MutationUpdateNullableFieldsTypeResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{102} + return file_product_proto_rawDescGZIP(), []int{103} } func (x *MutationUpdateNullableFieldsTypeResponse) GetUpdateNullableFieldsType() *NullableFieldsType { @@ -4726,7 +4771,7 @@ type MutationCreateBlogPostRequest struct { func (x *MutationCreateBlogPostRequest) Reset() { *x = MutationCreateBlogPostRequest{} - mi := &file_product_proto_msgTypes[103] + mi := &file_product_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4738,7 +4783,7 @@ func (x *MutationCreateBlogPostRequest) String() string { func (*MutationCreateBlogPostRequest) ProtoMessage() {} func (x *MutationCreateBlogPostRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[103] + mi := &file_product_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4751,7 +4796,7 @@ func (x *MutationCreateBlogPostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationCreateBlogPostRequest.ProtoReflect.Descriptor instead. func (*MutationCreateBlogPostRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{103} + return file_product_proto_rawDescGZIP(), []int{104} } func (x *MutationCreateBlogPostRequest) GetInput() *BlogPostInput { @@ -4771,7 +4816,7 @@ type MutationCreateBlogPostResponse struct { func (x *MutationCreateBlogPostResponse) Reset() { *x = MutationCreateBlogPostResponse{} - mi := &file_product_proto_msgTypes[104] + mi := &file_product_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4783,7 +4828,7 @@ func (x *MutationCreateBlogPostResponse) String() string { func (*MutationCreateBlogPostResponse) ProtoMessage() {} func (x *MutationCreateBlogPostResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[104] + mi := &file_product_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4796,7 +4841,7 @@ func (x *MutationCreateBlogPostResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationCreateBlogPostResponse.ProtoReflect.Descriptor instead. func (*MutationCreateBlogPostResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{104} + return file_product_proto_rawDescGZIP(), []int{105} } func (x *MutationCreateBlogPostResponse) GetCreateBlogPost() *BlogPost { @@ -4817,7 +4862,7 @@ type MutationUpdateBlogPostRequest struct { func (x *MutationUpdateBlogPostRequest) Reset() { *x = MutationUpdateBlogPostRequest{} - mi := &file_product_proto_msgTypes[105] + mi := &file_product_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4829,7 +4874,7 @@ func (x *MutationUpdateBlogPostRequest) String() string { func (*MutationUpdateBlogPostRequest) ProtoMessage() {} func (x *MutationUpdateBlogPostRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[105] + mi := &file_product_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4842,7 +4887,7 @@ func (x *MutationUpdateBlogPostRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationUpdateBlogPostRequest.ProtoReflect.Descriptor instead. func (*MutationUpdateBlogPostRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{105} + return file_product_proto_rawDescGZIP(), []int{106} } func (x *MutationUpdateBlogPostRequest) GetId() string { @@ -4869,7 +4914,7 @@ type MutationUpdateBlogPostResponse struct { func (x *MutationUpdateBlogPostResponse) Reset() { *x = MutationUpdateBlogPostResponse{} - mi := &file_product_proto_msgTypes[106] + mi := &file_product_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4881,7 +4926,7 @@ func (x *MutationUpdateBlogPostResponse) String() string { func (*MutationUpdateBlogPostResponse) ProtoMessage() {} func (x *MutationUpdateBlogPostResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[106] + mi := &file_product_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4894,7 +4939,7 @@ func (x *MutationUpdateBlogPostResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationUpdateBlogPostResponse.ProtoReflect.Descriptor instead. func (*MutationUpdateBlogPostResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{106} + return file_product_proto_rawDescGZIP(), []int{107} } func (x *MutationUpdateBlogPostResponse) GetUpdateBlogPost() *BlogPost { @@ -4914,7 +4959,7 @@ type MutationCreateAuthorRequest struct { func (x *MutationCreateAuthorRequest) Reset() { *x = MutationCreateAuthorRequest{} - mi := &file_product_proto_msgTypes[107] + mi := &file_product_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4926,7 +4971,7 @@ func (x *MutationCreateAuthorRequest) String() string { func (*MutationCreateAuthorRequest) ProtoMessage() {} func (x *MutationCreateAuthorRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[107] + mi := &file_product_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4939,7 +4984,7 @@ func (x *MutationCreateAuthorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationCreateAuthorRequest.ProtoReflect.Descriptor instead. func (*MutationCreateAuthorRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{107} + return file_product_proto_rawDescGZIP(), []int{108} } func (x *MutationCreateAuthorRequest) GetInput() *AuthorInput { @@ -4959,7 +5004,7 @@ type MutationCreateAuthorResponse struct { func (x *MutationCreateAuthorResponse) Reset() { *x = MutationCreateAuthorResponse{} - mi := &file_product_proto_msgTypes[108] + mi := &file_product_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4971,7 +5016,7 @@ func (x *MutationCreateAuthorResponse) String() string { func (*MutationCreateAuthorResponse) ProtoMessage() {} func (x *MutationCreateAuthorResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[108] + mi := &file_product_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4984,7 +5029,7 @@ func (x *MutationCreateAuthorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationCreateAuthorResponse.ProtoReflect.Descriptor instead. func (*MutationCreateAuthorResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{108} + return file_product_proto_rawDescGZIP(), []int{109} } func (x *MutationCreateAuthorResponse) GetCreateAuthor() *Author { @@ -5005,7 +5050,7 @@ type MutationUpdateAuthorRequest struct { func (x *MutationUpdateAuthorRequest) Reset() { *x = MutationUpdateAuthorRequest{} - mi := &file_product_proto_msgTypes[109] + mi := &file_product_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5017,7 +5062,7 @@ func (x *MutationUpdateAuthorRequest) String() string { func (*MutationUpdateAuthorRequest) ProtoMessage() {} func (x *MutationUpdateAuthorRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[109] + mi := &file_product_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5030,7 +5075,7 @@ func (x *MutationUpdateAuthorRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationUpdateAuthorRequest.ProtoReflect.Descriptor instead. func (*MutationUpdateAuthorRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{109} + return file_product_proto_rawDescGZIP(), []int{110} } func (x *MutationUpdateAuthorRequest) GetId() string { @@ -5057,7 +5102,7 @@ type MutationUpdateAuthorResponse struct { func (x *MutationUpdateAuthorResponse) Reset() { *x = MutationUpdateAuthorResponse{} - mi := &file_product_proto_msgTypes[110] + mi := &file_product_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5069,7 +5114,7 @@ func (x *MutationUpdateAuthorResponse) String() string { func (*MutationUpdateAuthorResponse) ProtoMessage() {} func (x *MutationUpdateAuthorResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[110] + mi := &file_product_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5082,7 +5127,7 @@ func (x *MutationUpdateAuthorResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationUpdateAuthorResponse.ProtoReflect.Descriptor instead. func (*MutationUpdateAuthorResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{110} + return file_product_proto_rawDescGZIP(), []int{111} } func (x *MutationUpdateAuthorResponse) GetUpdateAuthor() *Author { @@ -5102,7 +5147,7 @@ type MutationBulkCreateAuthorsRequest struct { func (x *MutationBulkCreateAuthorsRequest) Reset() { *x = MutationBulkCreateAuthorsRequest{} - mi := &file_product_proto_msgTypes[111] + mi := &file_product_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5114,7 +5159,7 @@ func (x *MutationBulkCreateAuthorsRequest) String() string { func (*MutationBulkCreateAuthorsRequest) ProtoMessage() {} func (x *MutationBulkCreateAuthorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[111] + mi := &file_product_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5127,7 +5172,7 @@ func (x *MutationBulkCreateAuthorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationBulkCreateAuthorsRequest.ProtoReflect.Descriptor instead. func (*MutationBulkCreateAuthorsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{111} + return file_product_proto_rawDescGZIP(), []int{112} } func (x *MutationBulkCreateAuthorsRequest) GetAuthors() *ListOfAuthorInput { @@ -5147,7 +5192,7 @@ type MutationBulkCreateAuthorsResponse struct { func (x *MutationBulkCreateAuthorsResponse) Reset() { *x = MutationBulkCreateAuthorsResponse{} - mi := &file_product_proto_msgTypes[112] + mi := &file_product_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5159,7 +5204,7 @@ func (x *MutationBulkCreateAuthorsResponse) String() string { func (*MutationBulkCreateAuthorsResponse) ProtoMessage() {} func (x *MutationBulkCreateAuthorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[112] + mi := &file_product_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5172,7 +5217,7 @@ func (x *MutationBulkCreateAuthorsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MutationBulkCreateAuthorsResponse.ProtoReflect.Descriptor instead. func (*MutationBulkCreateAuthorsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{112} + return file_product_proto_rawDescGZIP(), []int{113} } func (x *MutationBulkCreateAuthorsResponse) GetBulkCreateAuthors() []*Author { @@ -5192,7 +5237,7 @@ type MutationBulkUpdateAuthorsRequest struct { func (x *MutationBulkUpdateAuthorsRequest) Reset() { *x = MutationBulkUpdateAuthorsRequest{} - mi := &file_product_proto_msgTypes[113] + mi := &file_product_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5204,7 +5249,7 @@ func (x *MutationBulkUpdateAuthorsRequest) String() string { func (*MutationBulkUpdateAuthorsRequest) ProtoMessage() {} func (x *MutationBulkUpdateAuthorsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[113] + mi := &file_product_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5217,7 +5262,7 @@ func (x *MutationBulkUpdateAuthorsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MutationBulkUpdateAuthorsRequest.ProtoReflect.Descriptor instead. func (*MutationBulkUpdateAuthorsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{113} + return file_product_proto_rawDescGZIP(), []int{114} } func (x *MutationBulkUpdateAuthorsRequest) GetAuthors() *ListOfAuthorInput { @@ -5237,7 +5282,7 @@ type MutationBulkUpdateAuthorsResponse struct { func (x *MutationBulkUpdateAuthorsResponse) Reset() { *x = MutationBulkUpdateAuthorsResponse{} - mi := &file_product_proto_msgTypes[114] + mi := &file_product_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5249,7 +5294,7 @@ func (x *MutationBulkUpdateAuthorsResponse) String() string { func (*MutationBulkUpdateAuthorsResponse) ProtoMessage() {} func (x *MutationBulkUpdateAuthorsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[114] + mi := &file_product_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5262,7 +5307,7 @@ func (x *MutationBulkUpdateAuthorsResponse) ProtoReflect() protoreflect.Message // Deprecated: Use MutationBulkUpdateAuthorsResponse.ProtoReflect.Descriptor instead. func (*MutationBulkUpdateAuthorsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{114} + return file_product_proto_rawDescGZIP(), []int{115} } func (x *MutationBulkUpdateAuthorsResponse) GetBulkUpdateAuthors() []*Author { @@ -5282,7 +5327,7 @@ type MutationBulkCreateBlogPostsRequest struct { func (x *MutationBulkCreateBlogPostsRequest) Reset() { *x = MutationBulkCreateBlogPostsRequest{} - mi := &file_product_proto_msgTypes[115] + mi := &file_product_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5294,7 +5339,7 @@ func (x *MutationBulkCreateBlogPostsRequest) String() string { func (*MutationBulkCreateBlogPostsRequest) ProtoMessage() {} func (x *MutationBulkCreateBlogPostsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[115] + mi := &file_product_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5307,7 +5352,7 @@ func (x *MutationBulkCreateBlogPostsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use MutationBulkCreateBlogPostsRequest.ProtoReflect.Descriptor instead. func (*MutationBulkCreateBlogPostsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{115} + return file_product_proto_rawDescGZIP(), []int{116} } func (x *MutationBulkCreateBlogPostsRequest) GetBlogPosts() *ListOfBlogPostInput { @@ -5327,7 +5372,7 @@ type MutationBulkCreateBlogPostsResponse struct { func (x *MutationBulkCreateBlogPostsResponse) Reset() { *x = MutationBulkCreateBlogPostsResponse{} - mi := &file_product_proto_msgTypes[116] + mi := &file_product_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5339,7 +5384,7 @@ func (x *MutationBulkCreateBlogPostsResponse) String() string { func (*MutationBulkCreateBlogPostsResponse) ProtoMessage() {} func (x *MutationBulkCreateBlogPostsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[116] + mi := &file_product_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5352,7 +5397,7 @@ func (x *MutationBulkCreateBlogPostsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use MutationBulkCreateBlogPostsResponse.ProtoReflect.Descriptor instead. func (*MutationBulkCreateBlogPostsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{116} + return file_product_proto_rawDescGZIP(), []int{117} } func (x *MutationBulkCreateBlogPostsResponse) GetBulkCreateBlogPosts() []*BlogPost { @@ -5372,7 +5417,7 @@ type MutationBulkUpdateBlogPostsRequest struct { func (x *MutationBulkUpdateBlogPostsRequest) Reset() { *x = MutationBulkUpdateBlogPostsRequest{} - mi := &file_product_proto_msgTypes[117] + mi := &file_product_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5384,7 +5429,7 @@ func (x *MutationBulkUpdateBlogPostsRequest) String() string { func (*MutationBulkUpdateBlogPostsRequest) ProtoMessage() {} func (x *MutationBulkUpdateBlogPostsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[117] + mi := &file_product_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5397,7 +5442,7 @@ func (x *MutationBulkUpdateBlogPostsRequest) ProtoReflect() protoreflect.Message // Deprecated: Use MutationBulkUpdateBlogPostsRequest.ProtoReflect.Descriptor instead. func (*MutationBulkUpdateBlogPostsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{117} + return file_product_proto_rawDescGZIP(), []int{118} } func (x *MutationBulkUpdateBlogPostsRequest) GetBlogPosts() *ListOfBlogPostInput { @@ -5417,7 +5462,7 @@ type MutationBulkUpdateBlogPostsResponse struct { func (x *MutationBulkUpdateBlogPostsResponse) Reset() { *x = MutationBulkUpdateBlogPostsResponse{} - mi := &file_product_proto_msgTypes[118] + mi := &file_product_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5429,7 +5474,7 @@ func (x *MutationBulkUpdateBlogPostsResponse) String() string { func (*MutationBulkUpdateBlogPostsResponse) ProtoMessage() {} func (x *MutationBulkUpdateBlogPostsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[118] + mi := &file_product_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5442,7 +5487,7 @@ func (x *MutationBulkUpdateBlogPostsResponse) ProtoReflect() protoreflect.Messag // Deprecated: Use MutationBulkUpdateBlogPostsResponse.ProtoReflect.Descriptor instead. func (*MutationBulkUpdateBlogPostsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{118} + return file_product_proto_rawDescGZIP(), []int{119} } func (x *MutationBulkUpdateBlogPostsResponse) GetBulkUpdateBlogPosts() []*BlogPost { @@ -5461,7 +5506,7 @@ type ResolveProductShippingEstimateArgs struct { func (x *ResolveProductShippingEstimateArgs) Reset() { *x = ResolveProductShippingEstimateArgs{} - mi := &file_product_proto_msgTypes[119] + mi := &file_product_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5473,7 +5518,7 @@ func (x *ResolveProductShippingEstimateArgs) String() string { func (*ResolveProductShippingEstimateArgs) ProtoMessage() {} func (x *ResolveProductShippingEstimateArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[119] + mi := &file_product_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5486,7 +5531,7 @@ func (x *ResolveProductShippingEstimateArgs) ProtoReflect() protoreflect.Message // Deprecated: Use ResolveProductShippingEstimateArgs.ProtoReflect.Descriptor instead. func (*ResolveProductShippingEstimateArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{119} + return file_product_proto_rawDescGZIP(), []int{120} } func (x *ResolveProductShippingEstimateArgs) GetInput() *ShippingEstimateInput { @@ -5506,7 +5551,7 @@ type ResolveProductShippingEstimateContext struct { func (x *ResolveProductShippingEstimateContext) Reset() { *x = ResolveProductShippingEstimateContext{} - mi := &file_product_proto_msgTypes[120] + mi := &file_product_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5518,7 +5563,7 @@ func (x *ResolveProductShippingEstimateContext) String() string { func (*ResolveProductShippingEstimateContext) ProtoMessage() {} func (x *ResolveProductShippingEstimateContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[120] + mi := &file_product_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5531,7 +5576,7 @@ func (x *ResolveProductShippingEstimateContext) ProtoReflect() protoreflect.Mess // Deprecated: Use ResolveProductShippingEstimateContext.ProtoReflect.Descriptor instead. func (*ResolveProductShippingEstimateContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{120} + return file_product_proto_rawDescGZIP(), []int{121} } func (x *ResolveProductShippingEstimateContext) GetId() string { @@ -5560,7 +5605,7 @@ type ResolveProductShippingEstimateRequest struct { func (x *ResolveProductShippingEstimateRequest) Reset() { *x = ResolveProductShippingEstimateRequest{} - mi := &file_product_proto_msgTypes[121] + mi := &file_product_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5572,7 +5617,7 @@ func (x *ResolveProductShippingEstimateRequest) String() string { func (*ResolveProductShippingEstimateRequest) ProtoMessage() {} func (x *ResolveProductShippingEstimateRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[121] + mi := &file_product_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5585,7 +5630,7 @@ func (x *ResolveProductShippingEstimateRequest) ProtoReflect() protoreflect.Mess // Deprecated: Use ResolveProductShippingEstimateRequest.ProtoReflect.Descriptor instead. func (*ResolveProductShippingEstimateRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{121} + return file_product_proto_rawDescGZIP(), []int{122} } func (x *ResolveProductShippingEstimateRequest) GetContext() []*ResolveProductShippingEstimateContext { @@ -5611,7 +5656,7 @@ type ResolveProductShippingEstimateResult struct { func (x *ResolveProductShippingEstimateResult) Reset() { *x = ResolveProductShippingEstimateResult{} - mi := &file_product_proto_msgTypes[122] + mi := &file_product_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5623,7 +5668,7 @@ func (x *ResolveProductShippingEstimateResult) String() string { func (*ResolveProductShippingEstimateResult) ProtoMessage() {} func (x *ResolveProductShippingEstimateResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[122] + mi := &file_product_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5636,7 +5681,7 @@ func (x *ResolveProductShippingEstimateResult) ProtoReflect() protoreflect.Messa // Deprecated: Use ResolveProductShippingEstimateResult.ProtoReflect.Descriptor instead. func (*ResolveProductShippingEstimateResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{122} + return file_product_proto_rawDescGZIP(), []int{123} } func (x *ResolveProductShippingEstimateResult) GetShippingEstimate() float64 { @@ -5655,7 +5700,7 @@ type ResolveProductShippingEstimateResponse struct { func (x *ResolveProductShippingEstimateResponse) Reset() { *x = ResolveProductShippingEstimateResponse{} - mi := &file_product_proto_msgTypes[123] + mi := &file_product_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5667,7 +5712,7 @@ func (x *ResolveProductShippingEstimateResponse) String() string { func (*ResolveProductShippingEstimateResponse) ProtoMessage() {} func (x *ResolveProductShippingEstimateResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[123] + mi := &file_product_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5680,7 +5725,7 @@ func (x *ResolveProductShippingEstimateResponse) ProtoReflect() protoreflect.Mes // Deprecated: Use ResolveProductShippingEstimateResponse.ProtoReflect.Descriptor instead. func (*ResolveProductShippingEstimateResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{123} + return file_product_proto_rawDescGZIP(), []int{124} } func (x *ResolveProductShippingEstimateResponse) GetResult() []*ResolveProductShippingEstimateResult { @@ -5699,7 +5744,7 @@ type ResolveProductRecommendedCategoryArgs struct { func (x *ResolveProductRecommendedCategoryArgs) Reset() { *x = ResolveProductRecommendedCategoryArgs{} - mi := &file_product_proto_msgTypes[124] + mi := &file_product_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5711,7 +5756,7 @@ func (x *ResolveProductRecommendedCategoryArgs) String() string { func (*ResolveProductRecommendedCategoryArgs) ProtoMessage() {} func (x *ResolveProductRecommendedCategoryArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[124] + mi := &file_product_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5724,7 +5769,7 @@ func (x *ResolveProductRecommendedCategoryArgs) ProtoReflect() protoreflect.Mess // Deprecated: Use ResolveProductRecommendedCategoryArgs.ProtoReflect.Descriptor instead. func (*ResolveProductRecommendedCategoryArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{124} + return file_product_proto_rawDescGZIP(), []int{125} } func (x *ResolveProductRecommendedCategoryArgs) GetMaxPrice() int32 { @@ -5745,7 +5790,7 @@ type ResolveProductRecommendedCategoryContext struct { func (x *ResolveProductRecommendedCategoryContext) Reset() { *x = ResolveProductRecommendedCategoryContext{} - mi := &file_product_proto_msgTypes[125] + mi := &file_product_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5757,7 +5802,7 @@ func (x *ResolveProductRecommendedCategoryContext) String() string { func (*ResolveProductRecommendedCategoryContext) ProtoMessage() {} func (x *ResolveProductRecommendedCategoryContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[125] + mi := &file_product_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5770,7 +5815,7 @@ func (x *ResolveProductRecommendedCategoryContext) ProtoReflect() protoreflect.M // Deprecated: Use ResolveProductRecommendedCategoryContext.ProtoReflect.Descriptor instead. func (*ResolveProductRecommendedCategoryContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{125} + return file_product_proto_rawDescGZIP(), []int{126} } func (x *ResolveProductRecommendedCategoryContext) GetId() string { @@ -5806,7 +5851,7 @@ type ResolveProductRecommendedCategoryRequest struct { func (x *ResolveProductRecommendedCategoryRequest) Reset() { *x = ResolveProductRecommendedCategoryRequest{} - mi := &file_product_proto_msgTypes[126] + mi := &file_product_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5818,7 +5863,7 @@ func (x *ResolveProductRecommendedCategoryRequest) String() string { func (*ResolveProductRecommendedCategoryRequest) ProtoMessage() {} func (x *ResolveProductRecommendedCategoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[126] + mi := &file_product_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5831,7 +5876,7 @@ func (x *ResolveProductRecommendedCategoryRequest) ProtoReflect() protoreflect.M // Deprecated: Use ResolveProductRecommendedCategoryRequest.ProtoReflect.Descriptor instead. func (*ResolveProductRecommendedCategoryRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{126} + return file_product_proto_rawDescGZIP(), []int{127} } func (x *ResolveProductRecommendedCategoryRequest) GetContext() []*ResolveProductRecommendedCategoryContext { @@ -5857,7 +5902,7 @@ type ResolveProductRecommendedCategoryResult struct { func (x *ResolveProductRecommendedCategoryResult) Reset() { *x = ResolveProductRecommendedCategoryResult{} - mi := &file_product_proto_msgTypes[127] + mi := &file_product_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5869,7 +5914,7 @@ func (x *ResolveProductRecommendedCategoryResult) String() string { func (*ResolveProductRecommendedCategoryResult) ProtoMessage() {} func (x *ResolveProductRecommendedCategoryResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[127] + mi := &file_product_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5882,7 +5927,7 @@ func (x *ResolveProductRecommendedCategoryResult) ProtoReflect() protoreflect.Me // Deprecated: Use ResolveProductRecommendedCategoryResult.ProtoReflect.Descriptor instead. func (*ResolveProductRecommendedCategoryResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{127} + return file_product_proto_rawDescGZIP(), []int{128} } func (x *ResolveProductRecommendedCategoryResult) GetRecommendedCategory() *Category { @@ -5901,7 +5946,7 @@ type ResolveProductRecommendedCategoryResponse struct { func (x *ResolveProductRecommendedCategoryResponse) Reset() { *x = ResolveProductRecommendedCategoryResponse{} - mi := &file_product_proto_msgTypes[128] + mi := &file_product_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5913,7 +5958,7 @@ func (x *ResolveProductRecommendedCategoryResponse) String() string { func (*ResolveProductRecommendedCategoryResponse) ProtoMessage() {} func (x *ResolveProductRecommendedCategoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[128] + mi := &file_product_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5926,7 +5971,7 @@ func (x *ResolveProductRecommendedCategoryResponse) ProtoReflect() protoreflect. // Deprecated: Use ResolveProductRecommendedCategoryResponse.ProtoReflect.Descriptor instead. func (*ResolveProductRecommendedCategoryResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{128} + return file_product_proto_rawDescGZIP(), []int{129} } func (x *ResolveProductRecommendedCategoryResponse) GetResult() []*ResolveProductRecommendedCategoryResult { @@ -5945,7 +5990,7 @@ type ResolveProductMascotRecommendationArgs struct { func (x *ResolveProductMascotRecommendationArgs) Reset() { *x = ResolveProductMascotRecommendationArgs{} - mi := &file_product_proto_msgTypes[129] + mi := &file_product_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5957,7 +6002,7 @@ func (x *ResolveProductMascotRecommendationArgs) String() string { func (*ResolveProductMascotRecommendationArgs) ProtoMessage() {} func (x *ResolveProductMascotRecommendationArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[129] + mi := &file_product_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5970,7 +6015,7 @@ func (x *ResolveProductMascotRecommendationArgs) ProtoReflect() protoreflect.Mes // Deprecated: Use ResolveProductMascotRecommendationArgs.ProtoReflect.Descriptor instead. func (*ResolveProductMascotRecommendationArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{129} + return file_product_proto_rawDescGZIP(), []int{130} } func (x *ResolveProductMascotRecommendationArgs) GetIncludeDetails() bool { @@ -5990,7 +6035,7 @@ type ResolveProductMascotRecommendationContext struct { func (x *ResolveProductMascotRecommendationContext) Reset() { *x = ResolveProductMascotRecommendationContext{} - mi := &file_product_proto_msgTypes[130] + mi := &file_product_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6002,7 +6047,7 @@ func (x *ResolveProductMascotRecommendationContext) String() string { func (*ResolveProductMascotRecommendationContext) ProtoMessage() {} func (x *ResolveProductMascotRecommendationContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[130] + mi := &file_product_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6015,7 +6060,7 @@ func (x *ResolveProductMascotRecommendationContext) ProtoReflect() protoreflect. // Deprecated: Use ResolveProductMascotRecommendationContext.ProtoReflect.Descriptor instead. func (*ResolveProductMascotRecommendationContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{130} + return file_product_proto_rawDescGZIP(), []int{131} } func (x *ResolveProductMascotRecommendationContext) GetId() string { @@ -6044,7 +6089,7 @@ type ResolveProductMascotRecommendationRequest struct { func (x *ResolveProductMascotRecommendationRequest) Reset() { *x = ResolveProductMascotRecommendationRequest{} - mi := &file_product_proto_msgTypes[131] + mi := &file_product_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6056,7 +6101,7 @@ func (x *ResolveProductMascotRecommendationRequest) String() string { func (*ResolveProductMascotRecommendationRequest) ProtoMessage() {} func (x *ResolveProductMascotRecommendationRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[131] + mi := &file_product_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6069,7 +6114,7 @@ func (x *ResolveProductMascotRecommendationRequest) ProtoReflect() protoreflect. // Deprecated: Use ResolveProductMascotRecommendationRequest.ProtoReflect.Descriptor instead. func (*ResolveProductMascotRecommendationRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{131} + return file_product_proto_rawDescGZIP(), []int{132} } func (x *ResolveProductMascotRecommendationRequest) GetContext() []*ResolveProductMascotRecommendationContext { @@ -6095,7 +6140,7 @@ type ResolveProductMascotRecommendationResult struct { func (x *ResolveProductMascotRecommendationResult) Reset() { *x = ResolveProductMascotRecommendationResult{} - mi := &file_product_proto_msgTypes[132] + mi := &file_product_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6107,7 +6152,7 @@ func (x *ResolveProductMascotRecommendationResult) String() string { func (*ResolveProductMascotRecommendationResult) ProtoMessage() {} func (x *ResolveProductMascotRecommendationResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[132] + mi := &file_product_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6120,7 +6165,7 @@ func (x *ResolveProductMascotRecommendationResult) ProtoReflect() protoreflect.M // Deprecated: Use ResolveProductMascotRecommendationResult.ProtoReflect.Descriptor instead. func (*ResolveProductMascotRecommendationResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{132} + return file_product_proto_rawDescGZIP(), []int{133} } func (x *ResolveProductMascotRecommendationResult) GetMascotRecommendation() *Animal { @@ -6139,7 +6184,7 @@ type ResolveProductMascotRecommendationResponse struct { func (x *ResolveProductMascotRecommendationResponse) Reset() { *x = ResolveProductMascotRecommendationResponse{} - mi := &file_product_proto_msgTypes[133] + mi := &file_product_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6151,7 +6196,7 @@ func (x *ResolveProductMascotRecommendationResponse) String() string { func (*ResolveProductMascotRecommendationResponse) ProtoMessage() {} func (x *ResolveProductMascotRecommendationResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[133] + mi := &file_product_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6164,7 +6209,7 @@ func (x *ResolveProductMascotRecommendationResponse) ProtoReflect() protoreflect // Deprecated: Use ResolveProductMascotRecommendationResponse.ProtoReflect.Descriptor instead. func (*ResolveProductMascotRecommendationResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{133} + return file_product_proto_rawDescGZIP(), []int{134} } func (x *ResolveProductMascotRecommendationResponse) GetResult() []*ResolveProductMascotRecommendationResult { @@ -6183,7 +6228,7 @@ type ResolveProductStockStatusArgs struct { func (x *ResolveProductStockStatusArgs) Reset() { *x = ResolveProductStockStatusArgs{} - mi := &file_product_proto_msgTypes[134] + mi := &file_product_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6195,7 +6240,7 @@ func (x *ResolveProductStockStatusArgs) String() string { func (*ResolveProductStockStatusArgs) ProtoMessage() {} func (x *ResolveProductStockStatusArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[134] + mi := &file_product_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6208,7 +6253,7 @@ func (x *ResolveProductStockStatusArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveProductStockStatusArgs.ProtoReflect.Descriptor instead. func (*ResolveProductStockStatusArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{134} + return file_product_proto_rawDescGZIP(), []int{135} } func (x *ResolveProductStockStatusArgs) GetCheckAvailability() bool { @@ -6229,7 +6274,7 @@ type ResolveProductStockStatusContext struct { func (x *ResolveProductStockStatusContext) Reset() { *x = ResolveProductStockStatusContext{} - mi := &file_product_proto_msgTypes[135] + mi := &file_product_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6241,7 +6286,7 @@ func (x *ResolveProductStockStatusContext) String() string { func (*ResolveProductStockStatusContext) ProtoMessage() {} func (x *ResolveProductStockStatusContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[135] + mi := &file_product_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6254,7 +6299,7 @@ func (x *ResolveProductStockStatusContext) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveProductStockStatusContext.ProtoReflect.Descriptor instead. func (*ResolveProductStockStatusContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{135} + return file_product_proto_rawDescGZIP(), []int{136} } func (x *ResolveProductStockStatusContext) GetId() string { @@ -6290,7 +6335,7 @@ type ResolveProductStockStatusRequest struct { func (x *ResolveProductStockStatusRequest) Reset() { *x = ResolveProductStockStatusRequest{} - mi := &file_product_proto_msgTypes[136] + mi := &file_product_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6302,7 +6347,7 @@ func (x *ResolveProductStockStatusRequest) String() string { func (*ResolveProductStockStatusRequest) ProtoMessage() {} func (x *ResolveProductStockStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[136] + mi := &file_product_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6315,7 +6360,7 @@ func (x *ResolveProductStockStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveProductStockStatusRequest.ProtoReflect.Descriptor instead. func (*ResolveProductStockStatusRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{136} + return file_product_proto_rawDescGZIP(), []int{137} } func (x *ResolveProductStockStatusRequest) GetContext() []*ResolveProductStockStatusContext { @@ -6341,7 +6386,7 @@ type ResolveProductStockStatusResult struct { func (x *ResolveProductStockStatusResult) Reset() { *x = ResolveProductStockStatusResult{} - mi := &file_product_proto_msgTypes[137] + mi := &file_product_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6353,7 +6398,7 @@ func (x *ResolveProductStockStatusResult) String() string { func (*ResolveProductStockStatusResult) ProtoMessage() {} func (x *ResolveProductStockStatusResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[137] + mi := &file_product_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6366,7 +6411,7 @@ func (x *ResolveProductStockStatusResult) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveProductStockStatusResult.ProtoReflect.Descriptor instead. func (*ResolveProductStockStatusResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{137} + return file_product_proto_rawDescGZIP(), []int{138} } func (x *ResolveProductStockStatusResult) GetStockStatus() *ActionResult { @@ -6385,7 +6430,7 @@ type ResolveProductStockStatusResponse struct { func (x *ResolveProductStockStatusResponse) Reset() { *x = ResolveProductStockStatusResponse{} - mi := &file_product_proto_msgTypes[138] + mi := &file_product_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6397,7 +6442,7 @@ func (x *ResolveProductStockStatusResponse) String() string { func (*ResolveProductStockStatusResponse) ProtoMessage() {} func (x *ResolveProductStockStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[138] + mi := &file_product_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6410,7 +6455,7 @@ func (x *ResolveProductStockStatusResponse) ProtoReflect() protoreflect.Message // Deprecated: Use ResolveProductStockStatusResponse.ProtoReflect.Descriptor instead. func (*ResolveProductStockStatusResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{138} + return file_product_proto_rawDescGZIP(), []int{139} } func (x *ResolveProductStockStatusResponse) GetResult() []*ResolveProductStockStatusResult { @@ -6429,7 +6474,7 @@ type ResolveProductProductDetailsArgs struct { func (x *ResolveProductProductDetailsArgs) Reset() { *x = ResolveProductProductDetailsArgs{} - mi := &file_product_proto_msgTypes[139] + mi := &file_product_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6441,7 +6486,7 @@ func (x *ResolveProductProductDetailsArgs) String() string { func (*ResolveProductProductDetailsArgs) ProtoMessage() {} func (x *ResolveProductProductDetailsArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[139] + mi := &file_product_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6454,7 +6499,7 @@ func (x *ResolveProductProductDetailsArgs) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveProductProductDetailsArgs.ProtoReflect.Descriptor instead. func (*ResolveProductProductDetailsArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{139} + return file_product_proto_rawDescGZIP(), []int{140} } func (x *ResolveProductProductDetailsArgs) GetIncludeExtended() bool { @@ -6475,7 +6520,7 @@ type ResolveProductProductDetailsContext struct { func (x *ResolveProductProductDetailsContext) Reset() { *x = ResolveProductProductDetailsContext{} - mi := &file_product_proto_msgTypes[140] + mi := &file_product_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6487,7 +6532,7 @@ func (x *ResolveProductProductDetailsContext) String() string { func (*ResolveProductProductDetailsContext) ProtoMessage() {} func (x *ResolveProductProductDetailsContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[140] + mi := &file_product_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6500,7 +6545,7 @@ func (x *ResolveProductProductDetailsContext) ProtoReflect() protoreflect.Messag // Deprecated: Use ResolveProductProductDetailsContext.ProtoReflect.Descriptor instead. func (*ResolveProductProductDetailsContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{140} + return file_product_proto_rawDescGZIP(), []int{141} } func (x *ResolveProductProductDetailsContext) GetId() string { @@ -6536,7 +6581,7 @@ type ResolveProductProductDetailsRequest struct { func (x *ResolveProductProductDetailsRequest) Reset() { *x = ResolveProductProductDetailsRequest{} - mi := &file_product_proto_msgTypes[141] + mi := &file_product_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6548,7 +6593,7 @@ func (x *ResolveProductProductDetailsRequest) String() string { func (*ResolveProductProductDetailsRequest) ProtoMessage() {} func (x *ResolveProductProductDetailsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[141] + mi := &file_product_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6561,7 +6606,7 @@ func (x *ResolveProductProductDetailsRequest) ProtoReflect() protoreflect.Messag // Deprecated: Use ResolveProductProductDetailsRequest.ProtoReflect.Descriptor instead. func (*ResolveProductProductDetailsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{141} + return file_product_proto_rawDescGZIP(), []int{142} } func (x *ResolveProductProductDetailsRequest) GetContext() []*ResolveProductProductDetailsContext { @@ -6587,7 +6632,7 @@ type ResolveProductProductDetailsResult struct { func (x *ResolveProductProductDetailsResult) Reset() { *x = ResolveProductProductDetailsResult{} - mi := &file_product_proto_msgTypes[142] + mi := &file_product_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6599,7 +6644,7 @@ func (x *ResolveProductProductDetailsResult) String() string { func (*ResolveProductProductDetailsResult) ProtoMessage() {} func (x *ResolveProductProductDetailsResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[142] + mi := &file_product_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6612,7 +6657,7 @@ func (x *ResolveProductProductDetailsResult) ProtoReflect() protoreflect.Message // Deprecated: Use ResolveProductProductDetailsResult.ProtoReflect.Descriptor instead. func (*ResolveProductProductDetailsResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{142} + return file_product_proto_rawDescGZIP(), []int{143} } func (x *ResolveProductProductDetailsResult) GetProductDetails() *ProductDetails { @@ -6631,7 +6676,7 @@ type ResolveProductProductDetailsResponse struct { func (x *ResolveProductProductDetailsResponse) Reset() { *x = ResolveProductProductDetailsResponse{} - mi := &file_product_proto_msgTypes[143] + mi := &file_product_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6643,7 +6688,7 @@ func (x *ResolveProductProductDetailsResponse) String() string { func (*ResolveProductProductDetailsResponse) ProtoMessage() {} func (x *ResolveProductProductDetailsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[143] + mi := &file_product_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6656,7 +6701,7 @@ func (x *ResolveProductProductDetailsResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use ResolveProductProductDetailsResponse.ProtoReflect.Descriptor instead. func (*ResolveProductProductDetailsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{143} + return file_product_proto_rawDescGZIP(), []int{144} } func (x *ResolveProductProductDetailsResponse) GetResult() []*ResolveProductProductDetailsResult { @@ -6666,28 +6711,28 @@ func (x *ResolveProductProductDetailsResponse) GetResult() []*ResolveProductProd return nil } -type ResolveCategoryProductCountArgs struct { +type ResolveStorageStorageStatusArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Filters *ProductCountFilter `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + CheckHealth bool `protobuf:"varint,1,opt,name=check_health,json=checkHealth,proto3" json:"check_health,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryProductCountArgs) Reset() { - *x = ResolveCategoryProductCountArgs{} - mi := &file_product_proto_msgTypes[144] +func (x *ResolveStorageStorageStatusArgs) Reset() { + *x = ResolveStorageStorageStatusArgs{} + mi := &file_product_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryProductCountArgs) String() string { +func (x *ResolveStorageStorageStatusArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryProductCountArgs) ProtoMessage() {} +func (*ResolveStorageStorageStatusArgs) ProtoMessage() {} -func (x *ResolveCategoryProductCountArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[144] +func (x *ResolveStorageStorageStatusArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6698,19 +6743,19 @@ func (x *ResolveCategoryProductCountArgs) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryProductCountArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryProductCountArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{144} +// Deprecated: Use ResolveStorageStorageStatusArgs.ProtoReflect.Descriptor instead. +func (*ResolveStorageStorageStatusArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{145} } -func (x *ResolveCategoryProductCountArgs) GetFilters() *ProductCountFilter { +func (x *ResolveStorageStorageStatusArgs) GetCheckHealth() bool { if x != nil { - return x.Filters + return x.CheckHealth } - return nil + return false } -type ResolveCategoryProductCountContext struct { +type ResolveStorageStorageStatusContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` @@ -6718,21 +6763,21 @@ type ResolveCategoryProductCountContext struct { sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryProductCountContext) Reset() { - *x = ResolveCategoryProductCountContext{} - mi := &file_product_proto_msgTypes[145] +func (x *ResolveStorageStorageStatusContext) Reset() { + *x = ResolveStorageStorageStatusContext{} + mi := &file_product_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryProductCountContext) String() string { +func (x *ResolveStorageStorageStatusContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryProductCountContext) ProtoMessage() {} +func (*ResolveStorageStorageStatusContext) ProtoMessage() {} -func (x *ResolveCategoryProductCountContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[145] +func (x *ResolveStorageStorageStatusContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6743,50 +6788,50 @@ func (x *ResolveCategoryProductCountContext) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryProductCountContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryProductCountContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{145} +// Deprecated: Use ResolveStorageStorageStatusContext.ProtoReflect.Descriptor instead. +func (*ResolveStorageStorageStatusContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{146} } -func (x *ResolveCategoryProductCountContext) GetId() string { +func (x *ResolveStorageStorageStatusContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryProductCountContext) GetName() string { +func (x *ResolveStorageStorageStatusContext) GetName() string { if x != nil { return x.Name } return "" } -type ResolveCategoryProductCountRequest struct { +type ResolveStorageStorageStatusRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field productCount of type Category. - Context []*ResolveCategoryProductCountContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field productCount of type Category. - FieldArgs *ResolveCategoryProductCountArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field storageStatus of type Storage. + Context []*ResolveStorageStorageStatusContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field storageStatus of type Storage. + FieldArgs *ResolveStorageStorageStatusArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryProductCountRequest) Reset() { - *x = ResolveCategoryProductCountRequest{} - mi := &file_product_proto_msgTypes[146] +func (x *ResolveStorageStorageStatusRequest) Reset() { + *x = ResolveStorageStorageStatusRequest{} + mi := &file_product_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryProductCountRequest) String() string { +func (x *ResolveStorageStorageStatusRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryProductCountRequest) ProtoMessage() {} +func (*ResolveStorageStorageStatusRequest) ProtoMessage() {} -func (x *ResolveCategoryProductCountRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[146] +func (x *ResolveStorageStorageStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6797,47 +6842,47 @@ func (x *ResolveCategoryProductCountRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryProductCountRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryProductCountRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{146} +// Deprecated: Use ResolveStorageStorageStatusRequest.ProtoReflect.Descriptor instead. +func (*ResolveStorageStorageStatusRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{147} } -func (x *ResolveCategoryProductCountRequest) GetContext() []*ResolveCategoryProductCountContext { +func (x *ResolveStorageStorageStatusRequest) GetContext() []*ResolveStorageStorageStatusContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryProductCountRequest) GetFieldArgs() *ResolveCategoryProductCountArgs { +func (x *ResolveStorageStorageStatusRequest) GetFieldArgs() *ResolveStorageStorageStatusArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryProductCountResult struct { +type ResolveStorageStorageStatusResult struct { state protoimpl.MessageState `protogen:"open.v1"` - ProductCount int32 `protobuf:"varint,1,opt,name=product_count,json=productCount,proto3" json:"product_count,omitempty"` + StorageStatus *ActionResult `protobuf:"bytes,1,opt,name=storage_status,json=storageStatus,proto3" json:"storage_status,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryProductCountResult) Reset() { - *x = ResolveCategoryProductCountResult{} - mi := &file_product_proto_msgTypes[147] +func (x *ResolveStorageStorageStatusResult) Reset() { + *x = ResolveStorageStorageStatusResult{} + mi := &file_product_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryProductCountResult) String() string { +func (x *ResolveStorageStorageStatusResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryProductCountResult) ProtoMessage() {} +func (*ResolveStorageStorageStatusResult) ProtoMessage() {} -func (x *ResolveCategoryProductCountResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[147] +func (x *ResolveStorageStorageStatusResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6848,40 +6893,40 @@ func (x *ResolveCategoryProductCountResult) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryProductCountResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryProductCountResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{147} +// Deprecated: Use ResolveStorageStorageStatusResult.ProtoReflect.Descriptor instead. +func (*ResolveStorageStorageStatusResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{148} } -func (x *ResolveCategoryProductCountResult) GetProductCount() int32 { +func (x *ResolveStorageStorageStatusResult) GetStorageStatus() *ActionResult { if x != nil { - return x.ProductCount + return x.StorageStatus } - return 0 + return nil } -type ResolveCategoryProductCountResponse struct { +type ResolveStorageStorageStatusResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryProductCountResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + Result []*ResolveStorageStorageStatusResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryProductCountResponse) Reset() { - *x = ResolveCategoryProductCountResponse{} - mi := &file_product_proto_msgTypes[148] +func (x *ResolveStorageStorageStatusResponse) Reset() { + *x = ResolveStorageStorageStatusResponse{} + mi := &file_product_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryProductCountResponse) String() string { +func (x *ResolveStorageStorageStatusResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryProductCountResponse) ProtoMessage() {} +func (*ResolveStorageStorageStatusResponse) ProtoMessage() {} -func (x *ResolveCategoryProductCountResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[148] +func (x *ResolveStorageStorageStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6892,40 +6937,40 @@ func (x *ResolveCategoryProductCountResponse) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryProductCountResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryProductCountResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{148} +// Deprecated: Use ResolveStorageStorageStatusResponse.ProtoReflect.Descriptor instead. +func (*ResolveStorageStorageStatusResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{149} } -func (x *ResolveCategoryProductCountResponse) GetResult() []*ResolveCategoryProductCountResult { +func (x *ResolveStorageStorageStatusResponse) GetResult() []*ResolveStorageStorageStatusResult { if x != nil { return x.Result } return nil } -type ResolveCategoryPopularityScoreArgs struct { +type ResolveStorageLinkedStoragesArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Threshold *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=threshold,proto3" json:"threshold,omitempty"` + Depth int32 `protobuf:"varint,1,opt,name=depth,proto3" json:"depth,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryPopularityScoreArgs) Reset() { - *x = ResolveCategoryPopularityScoreArgs{} - mi := &file_product_proto_msgTypes[149] +func (x *ResolveStorageLinkedStoragesArgs) Reset() { + *x = ResolveStorageLinkedStoragesArgs{} + mi := &file_product_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryPopularityScoreArgs) String() string { +func (x *ResolveStorageLinkedStoragesArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryPopularityScoreArgs) ProtoMessage() {} +func (*ResolveStorageLinkedStoragesArgs) ProtoMessage() {} -func (x *ResolveCategoryPopularityScoreArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[149] +func (x *ResolveStorageLinkedStoragesArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6936,40 +6981,42 @@ func (x *ResolveCategoryPopularityScoreArgs) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryPopularityScoreArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryPopularityScoreArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{149} +// Deprecated: Use ResolveStorageLinkedStoragesArgs.ProtoReflect.Descriptor instead. +func (*ResolveStorageLinkedStoragesArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{150} } -func (x *ResolveCategoryPopularityScoreArgs) GetThreshold() *wrapperspb.Int32Value { +func (x *ResolveStorageLinkedStoragesArgs) GetDepth() int32 { if x != nil { - return x.Threshold + return x.Depth } - return nil + return 0 } -type ResolveCategoryPopularityScoreContext struct { +type ResolveStorageLinkedStoragesContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryPopularityScoreContext) Reset() { - *x = ResolveCategoryPopularityScoreContext{} - mi := &file_product_proto_msgTypes[150] +func (x *ResolveStorageLinkedStoragesContext) Reset() { + *x = ResolveStorageLinkedStoragesContext{} + mi := &file_product_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryPopularityScoreContext) String() string { +func (x *ResolveStorageLinkedStoragesContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryPopularityScoreContext) ProtoMessage() {} +func (*ResolveStorageLinkedStoragesContext) ProtoMessage() {} -func (x *ResolveCategoryPopularityScoreContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[150] +func (x *ResolveStorageLinkedStoragesContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6980,43 +7027,57 @@ func (x *ResolveCategoryPopularityScoreContext) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryPopularityScoreContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryPopularityScoreContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{150} +// Deprecated: Use ResolveStorageLinkedStoragesContext.ProtoReflect.Descriptor instead. +func (*ResolveStorageLinkedStoragesContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{151} } -func (x *ResolveCategoryPopularityScoreContext) GetId() string { +func (x *ResolveStorageLinkedStoragesContext) GetId() string { if x != nil { return x.Id } return "" } -type ResolveCategoryPopularityScoreRequest struct { +func (x *ResolveStorageLinkedStoragesContext) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ResolveStorageLinkedStoragesContext) GetLocation() string { + if x != nil { + return x.Location + } + return "" +} + +type ResolveStorageLinkedStoragesRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field popularityScore of type Category. - Context []*ResolveCategoryPopularityScoreContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field popularityScore of type Category. - FieldArgs *ResolveCategoryPopularityScoreArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field linkedStorages of type Storage. + Context []*ResolveStorageLinkedStoragesContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field linkedStorages of type Storage. + FieldArgs *ResolveStorageLinkedStoragesArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryPopularityScoreRequest) Reset() { - *x = ResolveCategoryPopularityScoreRequest{} - mi := &file_product_proto_msgTypes[151] +func (x *ResolveStorageLinkedStoragesRequest) Reset() { + *x = ResolveStorageLinkedStoragesRequest{} + mi := &file_product_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryPopularityScoreRequest) String() string { +func (x *ResolveStorageLinkedStoragesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryPopularityScoreRequest) ProtoMessage() {} +func (*ResolveStorageLinkedStoragesRequest) ProtoMessage() {} -func (x *ResolveCategoryPopularityScoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[151] +func (x *ResolveStorageLinkedStoragesRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7027,47 +7088,47 @@ func (x *ResolveCategoryPopularityScoreRequest) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryPopularityScoreRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryPopularityScoreRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{151} +// Deprecated: Use ResolveStorageLinkedStoragesRequest.ProtoReflect.Descriptor instead. +func (*ResolveStorageLinkedStoragesRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{152} } -func (x *ResolveCategoryPopularityScoreRequest) GetContext() []*ResolveCategoryPopularityScoreContext { +func (x *ResolveStorageLinkedStoragesRequest) GetContext() []*ResolveStorageLinkedStoragesContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryPopularityScoreRequest) GetFieldArgs() *ResolveCategoryPopularityScoreArgs { +func (x *ResolveStorageLinkedStoragesRequest) GetFieldArgs() *ResolveStorageLinkedStoragesArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryPopularityScoreResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - PopularityScore *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=popularity_score,json=popularityScore,proto3" json:"popularity_score,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveStorageLinkedStoragesResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + LinkedStorages []*Storage `protobuf:"bytes,1,rep,name=linked_storages,json=linkedStorages,proto3" json:"linked_storages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryPopularityScoreResult) Reset() { - *x = ResolveCategoryPopularityScoreResult{} - mi := &file_product_proto_msgTypes[152] +func (x *ResolveStorageLinkedStoragesResult) Reset() { + *x = ResolveStorageLinkedStoragesResult{} + mi := &file_product_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryPopularityScoreResult) String() string { +func (x *ResolveStorageLinkedStoragesResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryPopularityScoreResult) ProtoMessage() {} +func (*ResolveStorageLinkedStoragesResult) ProtoMessage() {} -func (x *ResolveCategoryPopularityScoreResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[152] +func (x *ResolveStorageLinkedStoragesResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7078,40 +7139,40 @@ func (x *ResolveCategoryPopularityScoreResult) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryPopularityScoreResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryPopularityScoreResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{152} +// Deprecated: Use ResolveStorageLinkedStoragesResult.ProtoReflect.Descriptor instead. +func (*ResolveStorageLinkedStoragesResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{153} } -func (x *ResolveCategoryPopularityScoreResult) GetPopularityScore() *wrapperspb.Int32Value { +func (x *ResolveStorageLinkedStoragesResult) GetLinkedStorages() []*Storage { if x != nil { - return x.PopularityScore + return x.LinkedStorages } return nil } -type ResolveCategoryPopularityScoreResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryPopularityScoreResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveStorageLinkedStoragesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveStorageLinkedStoragesResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryPopularityScoreResponse) Reset() { - *x = ResolveCategoryPopularityScoreResponse{} - mi := &file_product_proto_msgTypes[153] +func (x *ResolveStorageLinkedStoragesResponse) Reset() { + *x = ResolveStorageLinkedStoragesResponse{} + mi := &file_product_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryPopularityScoreResponse) String() string { +func (x *ResolveStorageLinkedStoragesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryPopularityScoreResponse) ProtoMessage() {} +func (*ResolveStorageLinkedStoragesResponse) ProtoMessage() {} -func (x *ResolveCategoryPopularityScoreResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[153] +func (x *ResolveStorageLinkedStoragesResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7122,40 +7183,40 @@ func (x *ResolveCategoryPopularityScoreResponse) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryPopularityScoreResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryPopularityScoreResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{153} +// Deprecated: Use ResolveStorageLinkedStoragesResponse.ProtoReflect.Descriptor instead. +func (*ResolveStorageLinkedStoragesResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{154} } -func (x *ResolveCategoryPopularityScoreResponse) GetResult() []*ResolveCategoryPopularityScoreResult { +func (x *ResolveStorageLinkedStoragesResponse) GetResult() []*ResolveStorageLinkedStoragesResult { if x != nil { return x.Result } return nil } -type ResolveCategoryCategoryMetricsArgs struct { +type ResolveStorageNearbyStoragesArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - MetricType string `protobuf:"bytes,1,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Radius *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=radius,proto3" json:"radius,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryMetricsArgs) Reset() { - *x = ResolveCategoryCategoryMetricsArgs{} - mi := &file_product_proto_msgTypes[154] +func (x *ResolveStorageNearbyStoragesArgs) Reset() { + *x = ResolveStorageNearbyStoragesArgs{} + mi := &file_product_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryMetricsArgs) String() string { +func (x *ResolveStorageNearbyStoragesArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryMetricsArgs) ProtoMessage() {} +func (*ResolveStorageNearbyStoragesArgs) ProtoMessage() {} -func (x *ResolveCategoryCategoryMetricsArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[154] +func (x *ResolveStorageNearbyStoragesArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7166,41 +7227,41 @@ func (x *ResolveCategoryCategoryMetricsArgs) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryMetricsArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryMetricsArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{154} +// Deprecated: Use ResolveStorageNearbyStoragesArgs.ProtoReflect.Descriptor instead. +func (*ResolveStorageNearbyStoragesArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{155} } -func (x *ResolveCategoryCategoryMetricsArgs) GetMetricType() string { +func (x *ResolveStorageNearbyStoragesArgs) GetRadius() *wrapperspb.Int32Value { if x != nil { - return x.MetricType + return x.Radius } - return "" + return nil } -type ResolveCategoryCategoryMetricsContext struct { +type ResolveStorageNearbyStoragesContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Location string `protobuf:"bytes,2,opt,name=location,proto3" json:"location,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryMetricsContext) Reset() { - *x = ResolveCategoryCategoryMetricsContext{} - mi := &file_product_proto_msgTypes[155] +func (x *ResolveStorageNearbyStoragesContext) Reset() { + *x = ResolveStorageNearbyStoragesContext{} + mi := &file_product_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryMetricsContext) String() string { +func (x *ResolveStorageNearbyStoragesContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryMetricsContext) ProtoMessage() {} +func (*ResolveStorageNearbyStoragesContext) ProtoMessage() {} -func (x *ResolveCategoryCategoryMetricsContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[155] +func (x *ResolveStorageNearbyStoragesContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7211,50 +7272,50 @@ func (x *ResolveCategoryCategoryMetricsContext) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryMetricsContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryMetricsContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{155} +// Deprecated: Use ResolveStorageNearbyStoragesContext.ProtoReflect.Descriptor instead. +func (*ResolveStorageNearbyStoragesContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{156} } -func (x *ResolveCategoryCategoryMetricsContext) GetId() string { +func (x *ResolveStorageNearbyStoragesContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryCategoryMetricsContext) GetName() string { +func (x *ResolveStorageNearbyStoragesContext) GetLocation() string { if x != nil { - return x.Name + return x.Location } return "" } -type ResolveCategoryCategoryMetricsRequest struct { +type ResolveStorageNearbyStoragesRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field categoryMetrics of type Category. - Context []*ResolveCategoryCategoryMetricsContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field categoryMetrics of type Category. - FieldArgs *ResolveCategoryCategoryMetricsArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field nearbyStorages of type Storage. + Context []*ResolveStorageNearbyStoragesContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field nearbyStorages of type Storage. + FieldArgs *ResolveStorageNearbyStoragesArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryMetricsRequest) Reset() { - *x = ResolveCategoryCategoryMetricsRequest{} - mi := &file_product_proto_msgTypes[156] +func (x *ResolveStorageNearbyStoragesRequest) Reset() { + *x = ResolveStorageNearbyStoragesRequest{} + mi := &file_product_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryMetricsRequest) String() string { +func (x *ResolveStorageNearbyStoragesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryMetricsRequest) ProtoMessage() {} +func (*ResolveStorageNearbyStoragesRequest) ProtoMessage() {} -func (x *ResolveCategoryCategoryMetricsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[156] +func (x *ResolveStorageNearbyStoragesRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7265,47 +7326,47 @@ func (x *ResolveCategoryCategoryMetricsRequest) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryMetricsRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryMetricsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{156} +// Deprecated: Use ResolveStorageNearbyStoragesRequest.ProtoReflect.Descriptor instead. +func (*ResolveStorageNearbyStoragesRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{157} } -func (x *ResolveCategoryCategoryMetricsRequest) GetContext() []*ResolveCategoryCategoryMetricsContext { +func (x *ResolveStorageNearbyStoragesRequest) GetContext() []*ResolveStorageNearbyStoragesContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryCategoryMetricsRequest) GetFieldArgs() *ResolveCategoryCategoryMetricsArgs { +func (x *ResolveStorageNearbyStoragesRequest) GetFieldArgs() *ResolveStorageNearbyStoragesArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryCategoryMetricsResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - CategoryMetrics *CategoryMetrics `protobuf:"bytes,1,opt,name=category_metrics,json=categoryMetrics,proto3" json:"category_metrics,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveStorageNearbyStoragesResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + NearbyStorages *ListOfStorage `protobuf:"bytes,1,opt,name=nearby_storages,json=nearbyStorages,proto3" json:"nearby_storages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryMetricsResult) Reset() { - *x = ResolveCategoryCategoryMetricsResult{} - mi := &file_product_proto_msgTypes[157] +func (x *ResolveStorageNearbyStoragesResult) Reset() { + *x = ResolveStorageNearbyStoragesResult{} + mi := &file_product_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryMetricsResult) String() string { +func (x *ResolveStorageNearbyStoragesResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryMetricsResult) ProtoMessage() {} +func (*ResolveStorageNearbyStoragesResult) ProtoMessage() {} -func (x *ResolveCategoryCategoryMetricsResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[157] +func (x *ResolveStorageNearbyStoragesResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7316,40 +7377,40 @@ func (x *ResolveCategoryCategoryMetricsResult) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryMetricsResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryMetricsResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{157} +// Deprecated: Use ResolveStorageNearbyStoragesResult.ProtoReflect.Descriptor instead. +func (*ResolveStorageNearbyStoragesResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{158} } -func (x *ResolveCategoryCategoryMetricsResult) GetCategoryMetrics() *CategoryMetrics { +func (x *ResolveStorageNearbyStoragesResult) GetNearbyStorages() *ListOfStorage { if x != nil { - return x.CategoryMetrics + return x.NearbyStorages } return nil } -type ResolveCategoryCategoryMetricsResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryCategoryMetricsResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveStorageNearbyStoragesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveStorageNearbyStoragesResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryMetricsResponse) Reset() { - *x = ResolveCategoryCategoryMetricsResponse{} - mi := &file_product_proto_msgTypes[158] +func (x *ResolveStorageNearbyStoragesResponse) Reset() { + *x = ResolveStorageNearbyStoragesResponse{} + mi := &file_product_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryMetricsResponse) String() string { +func (x *ResolveStorageNearbyStoragesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryMetricsResponse) ProtoMessage() {} +func (*ResolveStorageNearbyStoragesResponse) ProtoMessage() {} -func (x *ResolveCategoryCategoryMetricsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[158] +func (x *ResolveStorageNearbyStoragesResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7360,40 +7421,40 @@ func (x *ResolveCategoryCategoryMetricsResponse) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryMetricsResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryMetricsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{158} +// Deprecated: Use ResolveStorageNearbyStoragesResponse.ProtoReflect.Descriptor instead. +func (*ResolveStorageNearbyStoragesResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{159} } -func (x *ResolveCategoryCategoryMetricsResponse) GetResult() []*ResolveCategoryCategoryMetricsResult { +func (x *ResolveStorageNearbyStoragesResponse) GetResult() []*ResolveStorageNearbyStoragesResult { if x != nil { return x.Result } return nil } -type ResolveCategoryMascotArgs struct { +type ResolveCategoryProductCountArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - IncludeVolume bool `protobuf:"varint,1,opt,name=include_volume,json=includeVolume,proto3" json:"include_volume,omitempty"` + Filters *ProductCountFilter `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMascotArgs) Reset() { - *x = ResolveCategoryMascotArgs{} - mi := &file_product_proto_msgTypes[159] +func (x *ResolveCategoryProductCountArgs) Reset() { + *x = ResolveCategoryProductCountArgs{} + mi := &file_product_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMascotArgs) String() string { +func (x *ResolveCategoryProductCountArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMascotArgs) ProtoMessage() {} +func (*ResolveCategoryProductCountArgs) ProtoMessage() {} -func (x *ResolveCategoryMascotArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[159] +func (x *ResolveCategoryProductCountArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7404,41 +7465,41 @@ func (x *ResolveCategoryMascotArgs) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMascotArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMascotArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{159} +// Deprecated: Use ResolveCategoryProductCountArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryProductCountArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{160} } -func (x *ResolveCategoryMascotArgs) GetIncludeVolume() bool { +func (x *ResolveCategoryProductCountArgs) GetFilters() *ProductCountFilter { if x != nil { - return x.IncludeVolume + return x.Filters } - return false + return nil } -type ResolveCategoryMascotContext struct { +type ResolveCategoryProductCountContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Kind CategoryKind `protobuf:"varint,2,opt,name=kind,proto3,enum=productv1.CategoryKind" json:"kind,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMascotContext) Reset() { - *x = ResolveCategoryMascotContext{} - mi := &file_product_proto_msgTypes[160] +func (x *ResolveCategoryProductCountContext) Reset() { + *x = ResolveCategoryProductCountContext{} + mi := &file_product_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMascotContext) String() string { +func (x *ResolveCategoryProductCountContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMascotContext) ProtoMessage() {} +func (*ResolveCategoryProductCountContext) ProtoMessage() {} -func (x *ResolveCategoryMascotContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[160] +func (x *ResolveCategoryProductCountContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7449,50 +7510,50 @@ func (x *ResolveCategoryMascotContext) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMascotContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMascotContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{160} +// Deprecated: Use ResolveCategoryProductCountContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryProductCountContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{161} } -func (x *ResolveCategoryMascotContext) GetId() string { +func (x *ResolveCategoryProductCountContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryMascotContext) GetKind() CategoryKind { +func (x *ResolveCategoryProductCountContext) GetName() string { if x != nil { - return x.Kind + return x.Name } - return CategoryKind_CATEGORY_KIND_UNSPECIFIED + return "" } -type ResolveCategoryMascotRequest struct { +type ResolveCategoryProductCountRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field mascot of type Category. - Context []*ResolveCategoryMascotContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field mascot of type Category. - FieldArgs *ResolveCategoryMascotArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field productCount of type Category. + Context []*ResolveCategoryProductCountContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field productCount of type Category. + FieldArgs *ResolveCategoryProductCountArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMascotRequest) Reset() { - *x = ResolveCategoryMascotRequest{} - mi := &file_product_proto_msgTypes[161] +func (x *ResolveCategoryProductCountRequest) Reset() { + *x = ResolveCategoryProductCountRequest{} + mi := &file_product_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMascotRequest) String() string { +func (x *ResolveCategoryProductCountRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMascotRequest) ProtoMessage() {} +func (*ResolveCategoryProductCountRequest) ProtoMessage() {} -func (x *ResolveCategoryMascotRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[161] +func (x *ResolveCategoryProductCountRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7503,47 +7564,47 @@ func (x *ResolveCategoryMascotRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMascotRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMascotRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{161} +// Deprecated: Use ResolveCategoryProductCountRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryProductCountRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{162} } -func (x *ResolveCategoryMascotRequest) GetContext() []*ResolveCategoryMascotContext { +func (x *ResolveCategoryProductCountRequest) GetContext() []*ResolveCategoryProductCountContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryMascotRequest) GetFieldArgs() *ResolveCategoryMascotArgs { +func (x *ResolveCategoryProductCountRequest) GetFieldArgs() *ResolveCategoryProductCountArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryMascotResult struct { +type ResolveCategoryProductCountResult struct { state protoimpl.MessageState `protogen:"open.v1"` - Mascot *Animal `protobuf:"bytes,1,opt,name=mascot,proto3" json:"mascot,omitempty"` + ProductCount int32 `protobuf:"varint,1,opt,name=product_count,json=productCount,proto3" json:"product_count,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMascotResult) Reset() { - *x = ResolveCategoryMascotResult{} - mi := &file_product_proto_msgTypes[162] +func (x *ResolveCategoryProductCountResult) Reset() { + *x = ResolveCategoryProductCountResult{} + mi := &file_product_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMascotResult) String() string { +func (x *ResolveCategoryProductCountResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMascotResult) ProtoMessage() {} +func (*ResolveCategoryProductCountResult) ProtoMessage() {} -func (x *ResolveCategoryMascotResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[162] +func (x *ResolveCategoryProductCountResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7554,40 +7615,40 @@ func (x *ResolveCategoryMascotResult) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMascotResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMascotResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{162} +// Deprecated: Use ResolveCategoryProductCountResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryProductCountResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{163} } -func (x *ResolveCategoryMascotResult) GetMascot() *Animal { +func (x *ResolveCategoryProductCountResult) GetProductCount() int32 { if x != nil { - return x.Mascot + return x.ProductCount } - return nil + return 0 } -type ResolveCategoryMascotResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryMascotResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveCategoryProductCountResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryProductCountResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMascotResponse) Reset() { - *x = ResolveCategoryMascotResponse{} - mi := &file_product_proto_msgTypes[163] +func (x *ResolveCategoryProductCountResponse) Reset() { + *x = ResolveCategoryProductCountResponse{} + mi := &file_product_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMascotResponse) String() string { +func (x *ResolveCategoryProductCountResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMascotResponse) ProtoMessage() {} +func (*ResolveCategoryProductCountResponse) ProtoMessage() {} -func (x *ResolveCategoryMascotResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[163] +func (x *ResolveCategoryProductCountResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7598,40 +7659,40 @@ func (x *ResolveCategoryMascotResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMascotResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMascotResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{163} +// Deprecated: Use ResolveCategoryProductCountResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryProductCountResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{164} } -func (x *ResolveCategoryMascotResponse) GetResult() []*ResolveCategoryMascotResult { +func (x *ResolveCategoryProductCountResponse) GetResult() []*ResolveCategoryProductCountResult { if x != nil { return x.Result } return nil } -type ResolveCategoryCategoryStatusArgs struct { +type ResolveCategoryPopularityScoreArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - CheckHealth bool `protobuf:"varint,1,opt,name=check_health,json=checkHealth,proto3" json:"check_health,omitempty"` + Threshold *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=threshold,proto3" json:"threshold,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryStatusArgs) Reset() { - *x = ResolveCategoryCategoryStatusArgs{} - mi := &file_product_proto_msgTypes[164] +func (x *ResolveCategoryPopularityScoreArgs) Reset() { + *x = ResolveCategoryPopularityScoreArgs{} + mi := &file_product_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryStatusArgs) String() string { +func (x *ResolveCategoryPopularityScoreArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryStatusArgs) ProtoMessage() {} +func (*ResolveCategoryPopularityScoreArgs) ProtoMessage() {} -func (x *ResolveCategoryCategoryStatusArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[164] +func (x *ResolveCategoryPopularityScoreArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7642,41 +7703,40 @@ func (x *ResolveCategoryCategoryStatusArgs) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryStatusArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryStatusArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{164} +// Deprecated: Use ResolveCategoryPopularityScoreArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryPopularityScoreArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{165} } -func (x *ResolveCategoryCategoryStatusArgs) GetCheckHealth() bool { +func (x *ResolveCategoryPopularityScoreArgs) GetThreshold() *wrapperspb.Int32Value { if x != nil { - return x.CheckHealth + return x.Threshold } - return false + return nil } -type ResolveCategoryCategoryStatusContext struct { +type ResolveCategoryPopularityScoreContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryStatusContext) Reset() { - *x = ResolveCategoryCategoryStatusContext{} - mi := &file_product_proto_msgTypes[165] +func (x *ResolveCategoryPopularityScoreContext) Reset() { + *x = ResolveCategoryPopularityScoreContext{} + mi := &file_product_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryStatusContext) String() string { +func (x *ResolveCategoryPopularityScoreContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryStatusContext) ProtoMessage() {} +func (*ResolveCategoryPopularityScoreContext) ProtoMessage() {} -func (x *ResolveCategoryCategoryStatusContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[165] +func (x *ResolveCategoryPopularityScoreContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7687,50 +7747,43 @@ func (x *ResolveCategoryCategoryStatusContext) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryStatusContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryStatusContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{165} +// Deprecated: Use ResolveCategoryPopularityScoreContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryPopularityScoreContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{166} } -func (x *ResolveCategoryCategoryStatusContext) GetId() string { +func (x *ResolveCategoryPopularityScoreContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryCategoryStatusContext) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type ResolveCategoryCategoryStatusRequest struct { +type ResolveCategoryPopularityScoreRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field categoryStatus of type Category. - Context []*ResolveCategoryCategoryStatusContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field categoryStatus of type Category. - FieldArgs *ResolveCategoryCategoryStatusArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field popularityScore of type Category. + Context []*ResolveCategoryPopularityScoreContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field popularityScore of type Category. + FieldArgs *ResolveCategoryPopularityScoreArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryStatusRequest) Reset() { - *x = ResolveCategoryCategoryStatusRequest{} - mi := &file_product_proto_msgTypes[166] +func (x *ResolveCategoryPopularityScoreRequest) Reset() { + *x = ResolveCategoryPopularityScoreRequest{} + mi := &file_product_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryStatusRequest) String() string { +func (x *ResolveCategoryPopularityScoreRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryStatusRequest) ProtoMessage() {} +func (*ResolveCategoryPopularityScoreRequest) ProtoMessage() {} -func (x *ResolveCategoryCategoryStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[166] +func (x *ResolveCategoryPopularityScoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7741,47 +7794,47 @@ func (x *ResolveCategoryCategoryStatusRequest) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryStatusRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryStatusRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{166} +// Deprecated: Use ResolveCategoryPopularityScoreRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryPopularityScoreRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{167} } -func (x *ResolveCategoryCategoryStatusRequest) GetContext() []*ResolveCategoryCategoryStatusContext { +func (x *ResolveCategoryPopularityScoreRequest) GetContext() []*ResolveCategoryPopularityScoreContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryCategoryStatusRequest) GetFieldArgs() *ResolveCategoryCategoryStatusArgs { +func (x *ResolveCategoryPopularityScoreRequest) GetFieldArgs() *ResolveCategoryPopularityScoreArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryCategoryStatusResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - CategoryStatus *ActionResult `protobuf:"bytes,1,opt,name=category_status,json=categoryStatus,proto3" json:"category_status,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryPopularityScoreResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + PopularityScore *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=popularity_score,json=popularityScore,proto3" json:"popularity_score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryStatusResult) Reset() { - *x = ResolveCategoryCategoryStatusResult{} - mi := &file_product_proto_msgTypes[167] +func (x *ResolveCategoryPopularityScoreResult) Reset() { + *x = ResolveCategoryPopularityScoreResult{} + mi := &file_product_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryStatusResult) String() string { +func (x *ResolveCategoryPopularityScoreResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryStatusResult) ProtoMessage() {} +func (*ResolveCategoryPopularityScoreResult) ProtoMessage() {} -func (x *ResolveCategoryCategoryStatusResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[167] +func (x *ResolveCategoryPopularityScoreResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7792,40 +7845,40 @@ func (x *ResolveCategoryCategoryStatusResult) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryStatusResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryStatusResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{167} +// Deprecated: Use ResolveCategoryPopularityScoreResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryPopularityScoreResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{168} } -func (x *ResolveCategoryCategoryStatusResult) GetCategoryStatus() *ActionResult { +func (x *ResolveCategoryPopularityScoreResult) GetPopularityScore() *wrapperspb.Int32Value { if x != nil { - return x.CategoryStatus + return x.PopularityScore } return nil } -type ResolveCategoryCategoryStatusResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryCategoryStatusResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveCategoryPopularityScoreResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryPopularityScoreResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryCategoryStatusResponse) Reset() { - *x = ResolveCategoryCategoryStatusResponse{} - mi := &file_product_proto_msgTypes[168] +func (x *ResolveCategoryPopularityScoreResponse) Reset() { + *x = ResolveCategoryPopularityScoreResponse{} + mi := &file_product_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryCategoryStatusResponse) String() string { +func (x *ResolveCategoryPopularityScoreResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryCategoryStatusResponse) ProtoMessage() {} +func (*ResolveCategoryPopularityScoreResponse) ProtoMessage() {} -func (x *ResolveCategoryCategoryStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[168] +func (x *ResolveCategoryPopularityScoreResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7836,40 +7889,40 @@ func (x *ResolveCategoryCategoryStatusResponse) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryCategoryStatusResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryCategoryStatusResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{168} +// Deprecated: Use ResolveCategoryPopularityScoreResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryPopularityScoreResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{169} } -func (x *ResolveCategoryCategoryStatusResponse) GetResult() []*ResolveCategoryCategoryStatusResult { +func (x *ResolveCategoryPopularityScoreResponse) GetResult() []*ResolveCategoryPopularityScoreResult { if x != nil { return x.Result } return nil } -type ResolveCategoryChildCategoriesArgs struct { +type ResolveCategoryCategoryMetricsArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Include *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=include,proto3" json:"include,omitempty"` + MetricType string `protobuf:"bytes,1,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryChildCategoriesArgs) Reset() { - *x = ResolveCategoryChildCategoriesArgs{} - mi := &file_product_proto_msgTypes[169] +func (x *ResolveCategoryCategoryMetricsArgs) Reset() { + *x = ResolveCategoryCategoryMetricsArgs{} + mi := &file_product_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryChildCategoriesArgs) String() string { +func (x *ResolveCategoryCategoryMetricsArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryChildCategoriesArgs) ProtoMessage() {} +func (*ResolveCategoryCategoryMetricsArgs) ProtoMessage() {} -func (x *ResolveCategoryChildCategoriesArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[169] +func (x *ResolveCategoryCategoryMetricsArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7880,19 +7933,19 @@ func (x *ResolveCategoryChildCategoriesArgs) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryChildCategoriesArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryChildCategoriesArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{169} +// Deprecated: Use ResolveCategoryCategoryMetricsArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryMetricsArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{170} } -func (x *ResolveCategoryChildCategoriesArgs) GetInclude() *wrapperspb.BoolValue { +func (x *ResolveCategoryCategoryMetricsArgs) GetMetricType() string { if x != nil { - return x.Include + return x.MetricType } - return nil + return "" } -type ResolveCategoryChildCategoriesContext struct { +type ResolveCategoryCategoryMetricsContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` @@ -7900,21 +7953,21 @@ type ResolveCategoryChildCategoriesContext struct { sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryChildCategoriesContext) Reset() { - *x = ResolveCategoryChildCategoriesContext{} - mi := &file_product_proto_msgTypes[170] +func (x *ResolveCategoryCategoryMetricsContext) Reset() { + *x = ResolveCategoryCategoryMetricsContext{} + mi := &file_product_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryChildCategoriesContext) String() string { +func (x *ResolveCategoryCategoryMetricsContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryChildCategoriesContext) ProtoMessage() {} +func (*ResolveCategoryCategoryMetricsContext) ProtoMessage() {} -func (x *ResolveCategoryChildCategoriesContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[170] +func (x *ResolveCategoryCategoryMetricsContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7925,50 +7978,50 @@ func (x *ResolveCategoryChildCategoriesContext) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryChildCategoriesContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryChildCategoriesContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{170} +// Deprecated: Use ResolveCategoryCategoryMetricsContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryMetricsContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{171} } -func (x *ResolveCategoryChildCategoriesContext) GetId() string { +func (x *ResolveCategoryCategoryMetricsContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryChildCategoriesContext) GetName() string { +func (x *ResolveCategoryCategoryMetricsContext) GetName() string { if x != nil { return x.Name } return "" } -type ResolveCategoryChildCategoriesRequest struct { +type ResolveCategoryCategoryMetricsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field childCategories of type Category. - Context []*ResolveCategoryChildCategoriesContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field childCategories of type Category. - FieldArgs *ResolveCategoryChildCategoriesArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field categoryMetrics of type Category. + Context []*ResolveCategoryCategoryMetricsContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field categoryMetrics of type Category. + FieldArgs *ResolveCategoryCategoryMetricsArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryChildCategoriesRequest) Reset() { - *x = ResolveCategoryChildCategoriesRequest{} - mi := &file_product_proto_msgTypes[171] +func (x *ResolveCategoryCategoryMetricsRequest) Reset() { + *x = ResolveCategoryCategoryMetricsRequest{} + mi := &file_product_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryChildCategoriesRequest) String() string { +func (x *ResolveCategoryCategoryMetricsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryChildCategoriesRequest) ProtoMessage() {} +func (*ResolveCategoryCategoryMetricsRequest) ProtoMessage() {} -func (x *ResolveCategoryChildCategoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[171] +func (x *ResolveCategoryCategoryMetricsRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7979,47 +8032,47 @@ func (x *ResolveCategoryChildCategoriesRequest) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryChildCategoriesRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryChildCategoriesRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{171} +// Deprecated: Use ResolveCategoryCategoryMetricsRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryMetricsRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{172} } -func (x *ResolveCategoryChildCategoriesRequest) GetContext() []*ResolveCategoryChildCategoriesContext { +func (x *ResolveCategoryCategoryMetricsRequest) GetContext() []*ResolveCategoryCategoryMetricsContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryChildCategoriesRequest) GetFieldArgs() *ResolveCategoryChildCategoriesArgs { +func (x *ResolveCategoryCategoryMetricsRequest) GetFieldArgs() *ResolveCategoryCategoryMetricsArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryChildCategoriesResult struct { +type ResolveCategoryCategoryMetricsResult struct { state protoimpl.MessageState `protogen:"open.v1"` - ChildCategories []*Category `protobuf:"bytes,1,rep,name=child_categories,json=childCategories,proto3" json:"child_categories,omitempty"` + CategoryMetrics *CategoryMetrics `protobuf:"bytes,1,opt,name=category_metrics,json=categoryMetrics,proto3" json:"category_metrics,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryChildCategoriesResult) Reset() { - *x = ResolveCategoryChildCategoriesResult{} - mi := &file_product_proto_msgTypes[172] +func (x *ResolveCategoryCategoryMetricsResult) Reset() { + *x = ResolveCategoryCategoryMetricsResult{} + mi := &file_product_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryChildCategoriesResult) String() string { +func (x *ResolveCategoryCategoryMetricsResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryChildCategoriesResult) ProtoMessage() {} +func (*ResolveCategoryCategoryMetricsResult) ProtoMessage() {} -func (x *ResolveCategoryChildCategoriesResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[172] +func (x *ResolveCategoryCategoryMetricsResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8030,40 +8083,40 @@ func (x *ResolveCategoryChildCategoriesResult) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryChildCategoriesResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryChildCategoriesResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{172} +// Deprecated: Use ResolveCategoryCategoryMetricsResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryMetricsResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{173} } -func (x *ResolveCategoryChildCategoriesResult) GetChildCategories() []*Category { +func (x *ResolveCategoryCategoryMetricsResult) GetCategoryMetrics() *CategoryMetrics { if x != nil { - return x.ChildCategories + return x.CategoryMetrics } return nil } -type ResolveCategoryChildCategoriesResponse struct { +type ResolveCategoryCategoryMetricsResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryChildCategoriesResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + Result []*ResolveCategoryCategoryMetricsResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryChildCategoriesResponse) Reset() { - *x = ResolveCategoryChildCategoriesResponse{} - mi := &file_product_proto_msgTypes[173] +func (x *ResolveCategoryCategoryMetricsResponse) Reset() { + *x = ResolveCategoryCategoryMetricsResponse{} + mi := &file_product_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryChildCategoriesResponse) String() string { +func (x *ResolveCategoryCategoryMetricsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryChildCategoriesResponse) ProtoMessage() {} +func (*ResolveCategoryCategoryMetricsResponse) ProtoMessage() {} -func (x *ResolveCategoryChildCategoriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[173] +func (x *ResolveCategoryCategoryMetricsResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8074,40 +8127,40 @@ func (x *ResolveCategoryChildCategoriesResponse) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryChildCategoriesResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryChildCategoriesResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{173} +// Deprecated: Use ResolveCategoryCategoryMetricsResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryMetricsResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{174} } -func (x *ResolveCategoryChildCategoriesResponse) GetResult() []*ResolveCategoryChildCategoriesResult { +func (x *ResolveCategoryCategoryMetricsResponse) GetResult() []*ResolveCategoryCategoryMetricsResult { if x != nil { return x.Result } return nil } -type ResolveCategoryOptionalCategoriesArgs struct { +type ResolveCategoryMascotArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Include *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=include,proto3" json:"include,omitempty"` + IncludeVolume bool `protobuf:"varint,1,opt,name=include_volume,json=includeVolume,proto3" json:"include_volume,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryOptionalCategoriesArgs) Reset() { - *x = ResolveCategoryOptionalCategoriesArgs{} - mi := &file_product_proto_msgTypes[174] +func (x *ResolveCategoryMascotArgs) Reset() { + *x = ResolveCategoryMascotArgs{} + mi := &file_product_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryOptionalCategoriesArgs) String() string { +func (x *ResolveCategoryMascotArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryOptionalCategoriesArgs) ProtoMessage() {} +func (*ResolveCategoryMascotArgs) ProtoMessage() {} -func (x *ResolveCategoryOptionalCategoriesArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[174] +func (x *ResolveCategoryMascotArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8118,41 +8171,41 @@ func (x *ResolveCategoryOptionalCategoriesArgs) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryOptionalCategoriesArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryOptionalCategoriesArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{174} +// Deprecated: Use ResolveCategoryMascotArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMascotArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{175} } -func (x *ResolveCategoryOptionalCategoriesArgs) GetInclude() *wrapperspb.BoolValue { +func (x *ResolveCategoryMascotArgs) GetIncludeVolume() bool { if x != nil { - return x.Include + return x.IncludeVolume } - return nil + return false } -type ResolveCategoryOptionalCategoriesContext struct { +type ResolveCategoryMascotContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Kind CategoryKind `protobuf:"varint,2,opt,name=kind,proto3,enum=productv1.CategoryKind" json:"kind,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryOptionalCategoriesContext) Reset() { - *x = ResolveCategoryOptionalCategoriesContext{} - mi := &file_product_proto_msgTypes[175] +func (x *ResolveCategoryMascotContext) Reset() { + *x = ResolveCategoryMascotContext{} + mi := &file_product_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryOptionalCategoriesContext) String() string { +func (x *ResolveCategoryMascotContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryOptionalCategoriesContext) ProtoMessage() {} +func (*ResolveCategoryMascotContext) ProtoMessage() {} -func (x *ResolveCategoryOptionalCategoriesContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[175] +func (x *ResolveCategoryMascotContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8163,50 +8216,50 @@ func (x *ResolveCategoryOptionalCategoriesContext) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryOptionalCategoriesContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryOptionalCategoriesContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{175} +// Deprecated: Use ResolveCategoryMascotContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMascotContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{176} } -func (x *ResolveCategoryOptionalCategoriesContext) GetId() string { +func (x *ResolveCategoryMascotContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryOptionalCategoriesContext) GetName() string { +func (x *ResolveCategoryMascotContext) GetKind() CategoryKind { if x != nil { - return x.Name + return x.Kind } - return "" + return CategoryKind_CATEGORY_KIND_UNSPECIFIED } -type ResolveCategoryOptionalCategoriesRequest struct { +type ResolveCategoryMascotRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field optionalCategories of type Category. - Context []*ResolveCategoryOptionalCategoriesContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field optionalCategories of type Category. - FieldArgs *ResolveCategoryOptionalCategoriesArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field mascot of type Category. + Context []*ResolveCategoryMascotContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field mascot of type Category. + FieldArgs *ResolveCategoryMascotArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryOptionalCategoriesRequest) Reset() { - *x = ResolveCategoryOptionalCategoriesRequest{} - mi := &file_product_proto_msgTypes[176] +func (x *ResolveCategoryMascotRequest) Reset() { + *x = ResolveCategoryMascotRequest{} + mi := &file_product_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryOptionalCategoriesRequest) String() string { +func (x *ResolveCategoryMascotRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryOptionalCategoriesRequest) ProtoMessage() {} +func (*ResolveCategoryMascotRequest) ProtoMessage() {} -func (x *ResolveCategoryOptionalCategoriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[176] +func (x *ResolveCategoryMascotRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8217,47 +8270,47 @@ func (x *ResolveCategoryOptionalCategoriesRequest) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryOptionalCategoriesRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryOptionalCategoriesRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{176} +// Deprecated: Use ResolveCategoryMascotRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMascotRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{177} } -func (x *ResolveCategoryOptionalCategoriesRequest) GetContext() []*ResolveCategoryOptionalCategoriesContext { +func (x *ResolveCategoryMascotRequest) GetContext() []*ResolveCategoryMascotContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryOptionalCategoriesRequest) GetFieldArgs() *ResolveCategoryOptionalCategoriesArgs { +func (x *ResolveCategoryMascotRequest) GetFieldArgs() *ResolveCategoryMascotArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryOptionalCategoriesResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - OptionalCategories *ListOfCategory `protobuf:"bytes,1,opt,name=optional_categories,json=optionalCategories,proto3" json:"optional_categories,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryMascotResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mascot *Animal `protobuf:"bytes,1,opt,name=mascot,proto3" json:"mascot,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryOptionalCategoriesResult) Reset() { - *x = ResolveCategoryOptionalCategoriesResult{} - mi := &file_product_proto_msgTypes[177] +func (x *ResolveCategoryMascotResult) Reset() { + *x = ResolveCategoryMascotResult{} + mi := &file_product_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryOptionalCategoriesResult) String() string { +func (x *ResolveCategoryMascotResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryOptionalCategoriesResult) ProtoMessage() {} +func (*ResolveCategoryMascotResult) ProtoMessage() {} -func (x *ResolveCategoryOptionalCategoriesResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[177] +func (x *ResolveCategoryMascotResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8268,40 +8321,40 @@ func (x *ResolveCategoryOptionalCategoriesResult) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryOptionalCategoriesResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryOptionalCategoriesResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{177} +// Deprecated: Use ResolveCategoryMascotResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMascotResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{178} } -func (x *ResolveCategoryOptionalCategoriesResult) GetOptionalCategories() *ListOfCategory { +func (x *ResolveCategoryMascotResult) GetMascot() *Animal { if x != nil { - return x.OptionalCategories + return x.Mascot } return nil } -type ResolveCategoryOptionalCategoriesResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryOptionalCategoriesResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveCategoryMascotResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryMascotResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryOptionalCategoriesResponse) Reset() { - *x = ResolveCategoryOptionalCategoriesResponse{} - mi := &file_product_proto_msgTypes[178] +func (x *ResolveCategoryMascotResponse) Reset() { + *x = ResolveCategoryMascotResponse{} + mi := &file_product_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryOptionalCategoriesResponse) String() string { +func (x *ResolveCategoryMascotResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryOptionalCategoriesResponse) ProtoMessage() {} +func (*ResolveCategoryMascotResponse) ProtoMessage() {} -func (x *ResolveCategoryOptionalCategoriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[178] +func (x *ResolveCategoryMascotResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8312,40 +8365,40 @@ func (x *ResolveCategoryOptionalCategoriesResponse) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryOptionalCategoriesResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryOptionalCategoriesResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{178} +// Deprecated: Use ResolveCategoryMascotResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMascotResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{179} } -func (x *ResolveCategoryOptionalCategoriesResponse) GetResult() []*ResolveCategoryOptionalCategoriesResult { +func (x *ResolveCategoryMascotResponse) GetResult() []*ResolveCategoryMascotResult { if x != nil { return x.Result } return nil } -type ResolveSubcategoryItemCountArgs struct { +type ResolveCategoryCategoryStatusArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Filters *SubcategoryItemFilter `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` + CheckHealth bool `protobuf:"varint,1,opt,name=check_health,json=checkHealth,proto3" json:"check_health,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryItemCountArgs) Reset() { - *x = ResolveSubcategoryItemCountArgs{} - mi := &file_product_proto_msgTypes[179] +func (x *ResolveCategoryCategoryStatusArgs) Reset() { + *x = ResolveCategoryCategoryStatusArgs{} + mi := &file_product_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryItemCountArgs) String() string { +func (x *ResolveCategoryCategoryStatusArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryItemCountArgs) ProtoMessage() {} +func (*ResolveCategoryCategoryStatusArgs) ProtoMessage() {} -func (x *ResolveSubcategoryItemCountArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[179] +func (x *ResolveCategoryCategoryStatusArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8356,40 +8409,41 @@ func (x *ResolveSubcategoryItemCountArgs) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryItemCountArgs.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryItemCountArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{179} +// Deprecated: Use ResolveCategoryCategoryStatusArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryStatusArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{180} } -func (x *ResolveSubcategoryItemCountArgs) GetFilters() *SubcategoryItemFilter { +func (x *ResolveCategoryCategoryStatusArgs) GetCheckHealth() bool { if x != nil { - return x.Filters + return x.CheckHealth } - return nil + return false } -type ResolveSubcategoryItemCountContext struct { +type ResolveCategoryCategoryStatusContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryItemCountContext) Reset() { - *x = ResolveSubcategoryItemCountContext{} - mi := &file_product_proto_msgTypes[180] +func (x *ResolveCategoryCategoryStatusContext) Reset() { + *x = ResolveCategoryCategoryStatusContext{} + mi := &file_product_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryItemCountContext) String() string { +func (x *ResolveCategoryCategoryStatusContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryItemCountContext) ProtoMessage() {} +func (*ResolveCategoryCategoryStatusContext) ProtoMessage() {} -func (x *ResolveSubcategoryItemCountContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[180] +func (x *ResolveCategoryCategoryStatusContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8400,43 +8454,50 @@ func (x *ResolveSubcategoryItemCountContext) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryItemCountContext.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryItemCountContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{180} +// Deprecated: Use ResolveCategoryCategoryStatusContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryStatusContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{181} } -func (x *ResolveSubcategoryItemCountContext) GetId() string { +func (x *ResolveCategoryCategoryStatusContext) GetId() string { if x != nil { return x.Id } return "" } -type ResolveSubcategoryItemCountRequest struct { +func (x *ResolveCategoryCategoryStatusContext) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type ResolveCategoryCategoryStatusRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field itemCount of type Subcategory. - Context []*ResolveSubcategoryItemCountContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field itemCount of type Subcategory. - FieldArgs *ResolveSubcategoryItemCountArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field categoryStatus of type Category. + Context []*ResolveCategoryCategoryStatusContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field categoryStatus of type Category. + FieldArgs *ResolveCategoryCategoryStatusArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryItemCountRequest) Reset() { - *x = ResolveSubcategoryItemCountRequest{} - mi := &file_product_proto_msgTypes[181] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) +func (x *ResolveCategoryCategoryStatusRequest) Reset() { + *x = ResolveCategoryCategoryStatusRequest{} + mi := &file_product_proto_msgTypes[182] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryItemCountRequest) String() string { +func (x *ResolveCategoryCategoryStatusRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryItemCountRequest) ProtoMessage() {} +func (*ResolveCategoryCategoryStatusRequest) ProtoMessage() {} -func (x *ResolveSubcategoryItemCountRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[181] +func (x *ResolveCategoryCategoryStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8447,47 +8508,47 @@ func (x *ResolveSubcategoryItemCountRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryItemCountRequest.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryItemCountRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{181} +// Deprecated: Use ResolveCategoryCategoryStatusRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryStatusRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{182} } -func (x *ResolveSubcategoryItemCountRequest) GetContext() []*ResolveSubcategoryItemCountContext { +func (x *ResolveCategoryCategoryStatusRequest) GetContext() []*ResolveCategoryCategoryStatusContext { if x != nil { return x.Context } return nil } -func (x *ResolveSubcategoryItemCountRequest) GetFieldArgs() *ResolveSubcategoryItemCountArgs { +func (x *ResolveCategoryCategoryStatusRequest) GetFieldArgs() *ResolveCategoryCategoryStatusArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveSubcategoryItemCountResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - ItemCount int32 `protobuf:"varint,1,opt,name=item_count,json=itemCount,proto3" json:"item_count,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryCategoryStatusResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + CategoryStatus *ActionResult `protobuf:"bytes,1,opt,name=category_status,json=categoryStatus,proto3" json:"category_status,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryItemCountResult) Reset() { - *x = ResolveSubcategoryItemCountResult{} - mi := &file_product_proto_msgTypes[182] +func (x *ResolveCategoryCategoryStatusResult) Reset() { + *x = ResolveCategoryCategoryStatusResult{} + mi := &file_product_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryItemCountResult) String() string { +func (x *ResolveCategoryCategoryStatusResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryItemCountResult) ProtoMessage() {} +func (*ResolveCategoryCategoryStatusResult) ProtoMessage() {} -func (x *ResolveSubcategoryItemCountResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[182] +func (x *ResolveCategoryCategoryStatusResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8498,40 +8559,40 @@ func (x *ResolveSubcategoryItemCountResult) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryItemCountResult.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryItemCountResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{182} +// Deprecated: Use ResolveCategoryCategoryStatusResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryStatusResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{183} } -func (x *ResolveSubcategoryItemCountResult) GetItemCount() int32 { +func (x *ResolveCategoryCategoryStatusResult) GetCategoryStatus() *ActionResult { if x != nil { - return x.ItemCount + return x.CategoryStatus } - return 0 + return nil } -type ResolveSubcategoryItemCountResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveSubcategoryItemCountResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveCategoryCategoryStatusResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryCategoryStatusResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryItemCountResponse) Reset() { - *x = ResolveSubcategoryItemCountResponse{} - mi := &file_product_proto_msgTypes[183] +func (x *ResolveCategoryCategoryStatusResponse) Reset() { + *x = ResolveCategoryCategoryStatusResponse{} + mi := &file_product_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryItemCountResponse) String() string { +func (x *ResolveCategoryCategoryStatusResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryItemCountResponse) ProtoMessage() {} +func (*ResolveCategoryCategoryStatusResponse) ProtoMessage() {} -func (x *ResolveSubcategoryItemCountResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[183] +func (x *ResolveCategoryCategoryStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8542,40 +8603,40 @@ func (x *ResolveSubcategoryItemCountResponse) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryItemCountResponse.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryItemCountResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{183} +// Deprecated: Use ResolveCategoryCategoryStatusResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryCategoryStatusResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{184} } -func (x *ResolveSubcategoryItemCountResponse) GetResult() []*ResolveSubcategoryItemCountResult { +func (x *ResolveCategoryCategoryStatusResponse) GetResult() []*ResolveCategoryCategoryStatusResult { if x != nil { return x.Result } return nil } -type ResolveSubcategoryFeaturedCategoryArgs struct { - state protoimpl.MessageState `protogen:"open.v1"` - IncludeChildren bool `protobuf:"varint,1,opt,name=include_children,json=includeChildren,proto3" json:"include_children,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryChildCategoriesArgs struct { + state protoimpl.MessageState `protogen:"open.v1"` + Include *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=include,proto3" json:"include,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryFeaturedCategoryArgs) Reset() { - *x = ResolveSubcategoryFeaturedCategoryArgs{} - mi := &file_product_proto_msgTypes[184] +func (x *ResolveCategoryChildCategoriesArgs) Reset() { + *x = ResolveCategoryChildCategoriesArgs{} + mi := &file_product_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryFeaturedCategoryArgs) String() string { +func (x *ResolveCategoryChildCategoriesArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryFeaturedCategoryArgs) ProtoMessage() {} +func (*ResolveCategoryChildCategoriesArgs) ProtoMessage() {} -func (x *ResolveSubcategoryFeaturedCategoryArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[184] +func (x *ResolveCategoryChildCategoriesArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8586,40 +8647,41 @@ func (x *ResolveSubcategoryFeaturedCategoryArgs) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryFeaturedCategoryArgs.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryFeaturedCategoryArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{184} +// Deprecated: Use ResolveCategoryChildCategoriesArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryChildCategoriesArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{185} } -func (x *ResolveSubcategoryFeaturedCategoryArgs) GetIncludeChildren() bool { +func (x *ResolveCategoryChildCategoriesArgs) GetInclude() *wrapperspb.BoolValue { if x != nil { - return x.IncludeChildren + return x.Include } - return false + return nil } -type ResolveSubcategoryFeaturedCategoryContext struct { +type ResolveCategoryChildCategoriesContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryFeaturedCategoryContext) Reset() { - *x = ResolveSubcategoryFeaturedCategoryContext{} - mi := &file_product_proto_msgTypes[185] +func (x *ResolveCategoryChildCategoriesContext) Reset() { + *x = ResolveCategoryChildCategoriesContext{} + mi := &file_product_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryFeaturedCategoryContext) String() string { +func (x *ResolveCategoryChildCategoriesContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryFeaturedCategoryContext) ProtoMessage() {} +func (*ResolveCategoryChildCategoriesContext) ProtoMessage() {} -func (x *ResolveSubcategoryFeaturedCategoryContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[185] +func (x *ResolveCategoryChildCategoriesContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8630,43 +8692,50 @@ func (x *ResolveSubcategoryFeaturedCategoryContext) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryFeaturedCategoryContext.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryFeaturedCategoryContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{185} +// Deprecated: Use ResolveCategoryChildCategoriesContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryChildCategoriesContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{186} } -func (x *ResolveSubcategoryFeaturedCategoryContext) GetId() string { +func (x *ResolveCategoryChildCategoriesContext) GetId() string { if x != nil { return x.Id } return "" } -type ResolveSubcategoryFeaturedCategoryRequest struct { +func (x *ResolveCategoryChildCategoriesContext) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type ResolveCategoryChildCategoriesRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field featuredCategory of type Subcategory. - Context []*ResolveSubcategoryFeaturedCategoryContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field featuredCategory of type Subcategory. - FieldArgs *ResolveSubcategoryFeaturedCategoryArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field childCategories of type Category. + Context []*ResolveCategoryChildCategoriesContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field childCategories of type Category. + FieldArgs *ResolveCategoryChildCategoriesArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryFeaturedCategoryRequest) Reset() { - *x = ResolveSubcategoryFeaturedCategoryRequest{} - mi := &file_product_proto_msgTypes[186] +func (x *ResolveCategoryChildCategoriesRequest) Reset() { + *x = ResolveCategoryChildCategoriesRequest{} + mi := &file_product_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryFeaturedCategoryRequest) String() string { +func (x *ResolveCategoryChildCategoriesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryFeaturedCategoryRequest) ProtoMessage() {} +func (*ResolveCategoryChildCategoriesRequest) ProtoMessage() {} -func (x *ResolveSubcategoryFeaturedCategoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[186] +func (x *ResolveCategoryChildCategoriesRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8677,47 +8746,47 @@ func (x *ResolveSubcategoryFeaturedCategoryRequest) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryFeaturedCategoryRequest.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryFeaturedCategoryRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{186} +// Deprecated: Use ResolveCategoryChildCategoriesRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryChildCategoriesRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{187} } -func (x *ResolveSubcategoryFeaturedCategoryRequest) GetContext() []*ResolveSubcategoryFeaturedCategoryContext { +func (x *ResolveCategoryChildCategoriesRequest) GetContext() []*ResolveCategoryChildCategoriesContext { if x != nil { return x.Context } return nil } -func (x *ResolveSubcategoryFeaturedCategoryRequest) GetFieldArgs() *ResolveSubcategoryFeaturedCategoryArgs { +func (x *ResolveCategoryChildCategoriesRequest) GetFieldArgs() *ResolveCategoryChildCategoriesArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveSubcategoryFeaturedCategoryResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - FeaturedCategory *Category `protobuf:"bytes,1,opt,name=featured_category,json=featuredCategory,proto3" json:"featured_category,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryChildCategoriesResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChildCategories []*Category `protobuf:"bytes,1,rep,name=child_categories,json=childCategories,proto3" json:"child_categories,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryFeaturedCategoryResult) Reset() { - *x = ResolveSubcategoryFeaturedCategoryResult{} - mi := &file_product_proto_msgTypes[187] +func (x *ResolveCategoryChildCategoriesResult) Reset() { + *x = ResolveCategoryChildCategoriesResult{} + mi := &file_product_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryFeaturedCategoryResult) String() string { +func (x *ResolveCategoryChildCategoriesResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryFeaturedCategoryResult) ProtoMessage() {} +func (*ResolveCategoryChildCategoriesResult) ProtoMessage() {} -func (x *ResolveSubcategoryFeaturedCategoryResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[187] +func (x *ResolveCategoryChildCategoriesResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8728,40 +8797,40 @@ func (x *ResolveSubcategoryFeaturedCategoryResult) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryFeaturedCategoryResult.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryFeaturedCategoryResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{187} +// Deprecated: Use ResolveCategoryChildCategoriesResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryChildCategoriesResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{188} } -func (x *ResolveSubcategoryFeaturedCategoryResult) GetFeaturedCategory() *Category { +func (x *ResolveCategoryChildCategoriesResult) GetChildCategories() []*Category { if x != nil { - return x.FeaturedCategory + return x.ChildCategories } return nil } -type ResolveSubcategoryFeaturedCategoryResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveSubcategoryFeaturedCategoryResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveCategoryChildCategoriesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryChildCategoriesResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveSubcategoryFeaturedCategoryResponse) Reset() { - *x = ResolveSubcategoryFeaturedCategoryResponse{} - mi := &file_product_proto_msgTypes[188] +func (x *ResolveCategoryChildCategoriesResponse) Reset() { + *x = ResolveCategoryChildCategoriesResponse{} + mi := &file_product_proto_msgTypes[189] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveSubcategoryFeaturedCategoryResponse) String() string { +func (x *ResolveCategoryChildCategoriesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveSubcategoryFeaturedCategoryResponse) ProtoMessage() {} +func (*ResolveCategoryChildCategoriesResponse) ProtoMessage() {} -func (x *ResolveSubcategoryFeaturedCategoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[188] +func (x *ResolveCategoryChildCategoriesResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[189] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8772,40 +8841,40 @@ func (x *ResolveSubcategoryFeaturedCategoryResponse) ProtoReflect() protoreflect return mi.MessageOf(x) } -// Deprecated: Use ResolveSubcategoryFeaturedCategoryResponse.ProtoReflect.Descriptor instead. -func (*ResolveSubcategoryFeaturedCategoryResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{188} +// Deprecated: Use ResolveCategoryChildCategoriesResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryChildCategoriesResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{189} } -func (x *ResolveSubcategoryFeaturedCategoryResponse) GetResult() []*ResolveSubcategoryFeaturedCategoryResult { +func (x *ResolveCategoryChildCategoriesResponse) GetResult() []*ResolveCategoryChildCategoriesResult { if x != nil { return x.Result } return nil } -type ResolveCategoryMetricsNormalizedScoreArgs struct { +type ResolveCategoryOptionalCategoriesArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Baseline float64 `protobuf:"fixed64,1,opt,name=baseline,proto3" json:"baseline,omitempty"` + Include *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=include,proto3" json:"include,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsNormalizedScoreArgs) Reset() { - *x = ResolveCategoryMetricsNormalizedScoreArgs{} - mi := &file_product_proto_msgTypes[189] +func (x *ResolveCategoryOptionalCategoriesArgs) Reset() { + *x = ResolveCategoryOptionalCategoriesArgs{} + mi := &file_product_proto_msgTypes[190] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsNormalizedScoreArgs) String() string { +func (x *ResolveCategoryOptionalCategoriesArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsNormalizedScoreArgs) ProtoMessage() {} +func (*ResolveCategoryOptionalCategoriesArgs) ProtoMessage() {} -func (x *ResolveCategoryMetricsNormalizedScoreArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[189] +func (x *ResolveCategoryOptionalCategoriesArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[190] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8816,42 +8885,41 @@ func (x *ResolveCategoryMetricsNormalizedScoreArgs) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsNormalizedScoreArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsNormalizedScoreArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{189} +// Deprecated: Use ResolveCategoryOptionalCategoriesArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryOptionalCategoriesArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{190} } -func (x *ResolveCategoryMetricsNormalizedScoreArgs) GetBaseline() float64 { +func (x *ResolveCategoryOptionalCategoriesArgs) GetInclude() *wrapperspb.BoolValue { if x != nil { - return x.Baseline + return x.Include } - return 0 + return nil } -type ResolveCategoryMetricsNormalizedScoreContext struct { +type ResolveCategoryOptionalCategoriesContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - MetricType string `protobuf:"bytes,2,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Value float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsNormalizedScoreContext) Reset() { - *x = ResolveCategoryMetricsNormalizedScoreContext{} - mi := &file_product_proto_msgTypes[190] +func (x *ResolveCategoryOptionalCategoriesContext) Reset() { + *x = ResolveCategoryOptionalCategoriesContext{} + mi := &file_product_proto_msgTypes[191] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsNormalizedScoreContext) String() string { +func (x *ResolveCategoryOptionalCategoriesContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsNormalizedScoreContext) ProtoMessage() {} +func (*ResolveCategoryOptionalCategoriesContext) ProtoMessage() {} -func (x *ResolveCategoryMetricsNormalizedScoreContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[190] +func (x *ResolveCategoryOptionalCategoriesContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[191] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8862,57 +8930,50 @@ func (x *ResolveCategoryMetricsNormalizedScoreContext) ProtoReflect() protorefle return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsNormalizedScoreContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsNormalizedScoreContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{190} +// Deprecated: Use ResolveCategoryOptionalCategoriesContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryOptionalCategoriesContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{191} } -func (x *ResolveCategoryMetricsNormalizedScoreContext) GetId() string { +func (x *ResolveCategoryOptionalCategoriesContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveCategoryMetricsNormalizedScoreContext) GetMetricType() string { +func (x *ResolveCategoryOptionalCategoriesContext) GetName() string { if x != nil { - return x.MetricType + return x.Name } return "" } -func (x *ResolveCategoryMetricsNormalizedScoreContext) GetValue() float64 { - if x != nil { - return x.Value - } - return 0 -} - -type ResolveCategoryMetricsNormalizedScoreRequest struct { +type ResolveCategoryOptionalCategoriesRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field normalizedScore of type CategoryMetrics. - Context []*ResolveCategoryMetricsNormalizedScoreContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field normalizedScore of type CategoryMetrics. - FieldArgs *ResolveCategoryMetricsNormalizedScoreArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field optionalCategories of type Category. + Context []*ResolveCategoryOptionalCategoriesContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field optionalCategories of type Category. + FieldArgs *ResolveCategoryOptionalCategoriesArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsNormalizedScoreRequest) Reset() { - *x = ResolveCategoryMetricsNormalizedScoreRequest{} - mi := &file_product_proto_msgTypes[191] +func (x *ResolveCategoryOptionalCategoriesRequest) Reset() { + *x = ResolveCategoryOptionalCategoriesRequest{} + mi := &file_product_proto_msgTypes[192] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsNormalizedScoreRequest) String() string { +func (x *ResolveCategoryOptionalCategoriesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsNormalizedScoreRequest) ProtoMessage() {} +func (*ResolveCategoryOptionalCategoriesRequest) ProtoMessage() {} -func (x *ResolveCategoryMetricsNormalizedScoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[191] +func (x *ResolveCategoryOptionalCategoriesRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[192] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8923,47 +8984,47 @@ func (x *ResolveCategoryMetricsNormalizedScoreRequest) ProtoReflect() protorefle return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsNormalizedScoreRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsNormalizedScoreRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{191} +// Deprecated: Use ResolveCategoryOptionalCategoriesRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryOptionalCategoriesRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{192} } -func (x *ResolveCategoryMetricsNormalizedScoreRequest) GetContext() []*ResolveCategoryMetricsNormalizedScoreContext { +func (x *ResolveCategoryOptionalCategoriesRequest) GetContext() []*ResolveCategoryOptionalCategoriesContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryMetricsNormalizedScoreRequest) GetFieldArgs() *ResolveCategoryMetricsNormalizedScoreArgs { +func (x *ResolveCategoryOptionalCategoriesRequest) GetFieldArgs() *ResolveCategoryOptionalCategoriesArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryMetricsNormalizedScoreResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - NormalizedScore float64 `protobuf:"fixed64,1,opt,name=normalized_score,json=normalizedScore,proto3" json:"normalized_score,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryOptionalCategoriesResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionalCategories *ListOfCategory `protobuf:"bytes,1,opt,name=optional_categories,json=optionalCategories,proto3" json:"optional_categories,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsNormalizedScoreResult) Reset() { - *x = ResolveCategoryMetricsNormalizedScoreResult{} - mi := &file_product_proto_msgTypes[192] +func (x *ResolveCategoryOptionalCategoriesResult) Reset() { + *x = ResolveCategoryOptionalCategoriesResult{} + mi := &file_product_proto_msgTypes[193] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsNormalizedScoreResult) String() string { +func (x *ResolveCategoryOptionalCategoriesResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsNormalizedScoreResult) ProtoMessage() {} +func (*ResolveCategoryOptionalCategoriesResult) ProtoMessage() {} -func (x *ResolveCategoryMetricsNormalizedScoreResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[192] +func (x *ResolveCategoryOptionalCategoriesResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[193] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8974,40 +9035,40 @@ func (x *ResolveCategoryMetricsNormalizedScoreResult) ProtoReflect() protoreflec return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsNormalizedScoreResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsNormalizedScoreResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{192} +// Deprecated: Use ResolveCategoryOptionalCategoriesResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryOptionalCategoriesResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{193} } -func (x *ResolveCategoryMetricsNormalizedScoreResult) GetNormalizedScore() float64 { +func (x *ResolveCategoryOptionalCategoriesResult) GetOptionalCategories() *ListOfCategory { if x != nil { - return x.NormalizedScore + return x.OptionalCategories } - return 0 + return nil } -type ResolveCategoryMetricsNormalizedScoreResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryMetricsNormalizedScoreResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveCategoryOptionalCategoriesResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryOptionalCategoriesResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsNormalizedScoreResponse) Reset() { - *x = ResolveCategoryMetricsNormalizedScoreResponse{} - mi := &file_product_proto_msgTypes[193] +func (x *ResolveCategoryOptionalCategoriesResponse) Reset() { + *x = ResolveCategoryOptionalCategoriesResponse{} + mi := &file_product_proto_msgTypes[194] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsNormalizedScoreResponse) String() string { +func (x *ResolveCategoryOptionalCategoriesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsNormalizedScoreResponse) ProtoMessage() {} +func (*ResolveCategoryOptionalCategoriesResponse) ProtoMessage() {} -func (x *ResolveCategoryMetricsNormalizedScoreResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[193] +func (x *ResolveCategoryOptionalCategoriesResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[194] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9018,40 +9079,40 @@ func (x *ResolveCategoryMetricsNormalizedScoreResponse) ProtoReflect() protorefl return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsNormalizedScoreResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsNormalizedScoreResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{193} +// Deprecated: Use ResolveCategoryOptionalCategoriesResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryOptionalCategoriesResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{194} } -func (x *ResolveCategoryMetricsNormalizedScoreResponse) GetResult() []*ResolveCategoryMetricsNormalizedScoreResult { +func (x *ResolveCategoryOptionalCategoriesResponse) GetResult() []*ResolveCategoryOptionalCategoriesResult { if x != nil { return x.Result } return nil } -type ResolveCategoryMetricsRelatedCategoryArgs struct { +type ResolveSubcategoryItemCountArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Include *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=include,proto3" json:"include,omitempty"` + Filters *SubcategoryItemFilter `protobuf:"bytes,1,opt,name=filters,proto3" json:"filters,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsRelatedCategoryArgs) Reset() { - *x = ResolveCategoryMetricsRelatedCategoryArgs{} - mi := &file_product_proto_msgTypes[194] +func (x *ResolveSubcategoryItemCountArgs) Reset() { + *x = ResolveSubcategoryItemCountArgs{} + mi := &file_product_proto_msgTypes[195] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsRelatedCategoryArgs) String() string { +func (x *ResolveSubcategoryItemCountArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsRelatedCategoryArgs) ProtoMessage() {} +func (*ResolveSubcategoryItemCountArgs) ProtoMessage() {} -func (x *ResolveCategoryMetricsRelatedCategoryArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[194] +func (x *ResolveSubcategoryItemCountArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[195] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9062,40 +9123,40 @@ func (x *ResolveCategoryMetricsRelatedCategoryArgs) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsRelatedCategoryArgs.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsRelatedCategoryArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{194} +// Deprecated: Use ResolveSubcategoryItemCountArgs.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryItemCountArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{195} } -func (x *ResolveCategoryMetricsRelatedCategoryArgs) GetInclude() *wrapperspb.BoolValue { +func (x *ResolveSubcategoryItemCountArgs) GetFilters() *SubcategoryItemFilter { if x != nil { - return x.Include + return x.Filters } return nil } -type ResolveCategoryMetricsRelatedCategoryContext struct { +type ResolveSubcategoryItemCountContext struct { state protoimpl.MessageState `protogen:"open.v1"` - CategoryId string `protobuf:"bytes,1,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsRelatedCategoryContext) Reset() { - *x = ResolveCategoryMetricsRelatedCategoryContext{} - mi := &file_product_proto_msgTypes[195] +func (x *ResolveSubcategoryItemCountContext) Reset() { + *x = ResolveSubcategoryItemCountContext{} + mi := &file_product_proto_msgTypes[196] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsRelatedCategoryContext) String() string { +func (x *ResolveSubcategoryItemCountContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsRelatedCategoryContext) ProtoMessage() {} +func (*ResolveSubcategoryItemCountContext) ProtoMessage() {} -func (x *ResolveCategoryMetricsRelatedCategoryContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[195] +func (x *ResolveSubcategoryItemCountContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[196] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9106,43 +9167,43 @@ func (x *ResolveCategoryMetricsRelatedCategoryContext) ProtoReflect() protorefle return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsRelatedCategoryContext.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsRelatedCategoryContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{195} +// Deprecated: Use ResolveSubcategoryItemCountContext.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryItemCountContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{196} } -func (x *ResolveCategoryMetricsRelatedCategoryContext) GetCategoryId() string { +func (x *ResolveSubcategoryItemCountContext) GetId() string { if x != nil { - return x.CategoryId + return x.Id } return "" } -type ResolveCategoryMetricsRelatedCategoryRequest struct { +type ResolveSubcategoryItemCountRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field relatedCategory of type CategoryMetrics. - Context []*ResolveCategoryMetricsRelatedCategoryContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field relatedCategory of type CategoryMetrics. - FieldArgs *ResolveCategoryMetricsRelatedCategoryArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field itemCount of type Subcategory. + Context []*ResolveSubcategoryItemCountContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field itemCount of type Subcategory. + FieldArgs *ResolveSubcategoryItemCountArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsRelatedCategoryRequest) Reset() { - *x = ResolveCategoryMetricsRelatedCategoryRequest{} - mi := &file_product_proto_msgTypes[196] +func (x *ResolveSubcategoryItemCountRequest) Reset() { + *x = ResolveSubcategoryItemCountRequest{} + mi := &file_product_proto_msgTypes[197] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsRelatedCategoryRequest) String() string { +func (x *ResolveSubcategoryItemCountRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsRelatedCategoryRequest) ProtoMessage() {} +func (*ResolveSubcategoryItemCountRequest) ProtoMessage() {} -func (x *ResolveCategoryMetricsRelatedCategoryRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[196] +func (x *ResolveSubcategoryItemCountRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[197] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9153,47 +9214,47 @@ func (x *ResolveCategoryMetricsRelatedCategoryRequest) ProtoReflect() protorefle return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsRelatedCategoryRequest.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsRelatedCategoryRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{196} +// Deprecated: Use ResolveSubcategoryItemCountRequest.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryItemCountRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{197} } -func (x *ResolveCategoryMetricsRelatedCategoryRequest) GetContext() []*ResolveCategoryMetricsRelatedCategoryContext { +func (x *ResolveSubcategoryItemCountRequest) GetContext() []*ResolveSubcategoryItemCountContext { if x != nil { return x.Context } return nil } -func (x *ResolveCategoryMetricsRelatedCategoryRequest) GetFieldArgs() *ResolveCategoryMetricsRelatedCategoryArgs { +func (x *ResolveSubcategoryItemCountRequest) GetFieldArgs() *ResolveSubcategoryItemCountArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveCategoryMetricsRelatedCategoryResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelatedCategory *Category `protobuf:"bytes,1,opt,name=related_category,json=relatedCategory,proto3" json:"related_category,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} +type ResolveSubcategoryItemCountResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + ItemCount int32 `protobuf:"varint,1,opt,name=item_count,json=itemCount,proto3" json:"item_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} -func (x *ResolveCategoryMetricsRelatedCategoryResult) Reset() { - *x = ResolveCategoryMetricsRelatedCategoryResult{} - mi := &file_product_proto_msgTypes[197] +func (x *ResolveSubcategoryItemCountResult) Reset() { + *x = ResolveSubcategoryItemCountResult{} + mi := &file_product_proto_msgTypes[198] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsRelatedCategoryResult) String() string { +func (x *ResolveSubcategoryItemCountResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsRelatedCategoryResult) ProtoMessage() {} +func (*ResolveSubcategoryItemCountResult) ProtoMessage() {} -func (x *ResolveCategoryMetricsRelatedCategoryResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[197] +func (x *ResolveSubcategoryItemCountResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[198] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9204,40 +9265,40 @@ func (x *ResolveCategoryMetricsRelatedCategoryResult) ProtoReflect() protoreflec return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsRelatedCategoryResult.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsRelatedCategoryResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{197} +// Deprecated: Use ResolveSubcategoryItemCountResult.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryItemCountResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{198} } -func (x *ResolveCategoryMetricsRelatedCategoryResult) GetRelatedCategory() *Category { +func (x *ResolveSubcategoryItemCountResult) GetItemCount() int32 { if x != nil { - return x.RelatedCategory + return x.ItemCount } - return nil + return 0 } -type ResolveCategoryMetricsRelatedCategoryResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveCategoryMetricsRelatedCategoryResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveSubcategoryItemCountResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveSubcategoryItemCountResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveCategoryMetricsRelatedCategoryResponse) Reset() { - *x = ResolveCategoryMetricsRelatedCategoryResponse{} - mi := &file_product_proto_msgTypes[198] +func (x *ResolveSubcategoryItemCountResponse) Reset() { + *x = ResolveSubcategoryItemCountResponse{} + mi := &file_product_proto_msgTypes[199] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveCategoryMetricsRelatedCategoryResponse) String() string { +func (x *ResolveSubcategoryItemCountResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveCategoryMetricsRelatedCategoryResponse) ProtoMessage() {} +func (*ResolveSubcategoryItemCountResponse) ProtoMessage() {} -func (x *ResolveCategoryMetricsRelatedCategoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[198] +func (x *ResolveSubcategoryItemCountResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[199] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9248,40 +9309,40 @@ func (x *ResolveCategoryMetricsRelatedCategoryResponse) ProtoReflect() protorefl return mi.MessageOf(x) } -// Deprecated: Use ResolveCategoryMetricsRelatedCategoryResponse.ProtoReflect.Descriptor instead. -func (*ResolveCategoryMetricsRelatedCategoryResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{198} +// Deprecated: Use ResolveSubcategoryItemCountResponse.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryItemCountResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{199} } -func (x *ResolveCategoryMetricsRelatedCategoryResponse) GetResult() []*ResolveCategoryMetricsRelatedCategoryResult { +func (x *ResolveSubcategoryItemCountResponse) GetResult() []*ResolveSubcategoryItemCountResult { if x != nil { return x.Result } return nil } -type ResolveTestContainerDetailsArgs struct { +type ResolveSubcategoryFeaturedCategoryArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - IncludeExtended bool `protobuf:"varint,1,opt,name=include_extended,json=includeExtended,proto3" json:"include_extended,omitempty"` + IncludeChildren bool `protobuf:"varint,1,opt,name=include_children,json=includeChildren,proto3" json:"include_children,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveTestContainerDetailsArgs) Reset() { - *x = ResolveTestContainerDetailsArgs{} - mi := &file_product_proto_msgTypes[199] +func (x *ResolveSubcategoryFeaturedCategoryArgs) Reset() { + *x = ResolveSubcategoryFeaturedCategoryArgs{} + mi := &file_product_proto_msgTypes[200] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveTestContainerDetailsArgs) String() string { +func (x *ResolveSubcategoryFeaturedCategoryArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveTestContainerDetailsArgs) ProtoMessage() {} +func (*ResolveSubcategoryFeaturedCategoryArgs) ProtoMessage() {} -func (x *ResolveTestContainerDetailsArgs) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[199] +func (x *ResolveSubcategoryFeaturedCategoryArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[200] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9292,41 +9353,40 @@ func (x *ResolveTestContainerDetailsArgs) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveTestContainerDetailsArgs.ProtoReflect.Descriptor instead. -func (*ResolveTestContainerDetailsArgs) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{199} +// Deprecated: Use ResolveSubcategoryFeaturedCategoryArgs.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryFeaturedCategoryArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{200} } -func (x *ResolveTestContainerDetailsArgs) GetIncludeExtended() bool { +func (x *ResolveSubcategoryFeaturedCategoryArgs) GetIncludeChildren() bool { if x != nil { - return x.IncludeExtended + return x.IncludeChildren } return false } -type ResolveTestContainerDetailsContext struct { +type ResolveSubcategoryFeaturedCategoryContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveTestContainerDetailsContext) Reset() { - *x = ResolveTestContainerDetailsContext{} - mi := &file_product_proto_msgTypes[200] +func (x *ResolveSubcategoryFeaturedCategoryContext) Reset() { + *x = ResolveSubcategoryFeaturedCategoryContext{} + mi := &file_product_proto_msgTypes[201] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveTestContainerDetailsContext) String() string { +func (x *ResolveSubcategoryFeaturedCategoryContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveTestContainerDetailsContext) ProtoMessage() {} +func (*ResolveSubcategoryFeaturedCategoryContext) ProtoMessage() {} -func (x *ResolveTestContainerDetailsContext) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[200] +func (x *ResolveSubcategoryFeaturedCategoryContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[201] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9337,50 +9397,43 @@ func (x *ResolveTestContainerDetailsContext) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveTestContainerDetailsContext.ProtoReflect.Descriptor instead. -func (*ResolveTestContainerDetailsContext) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{200} +// Deprecated: Use ResolveSubcategoryFeaturedCategoryContext.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryFeaturedCategoryContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{201} } -func (x *ResolveTestContainerDetailsContext) GetId() string { +func (x *ResolveSubcategoryFeaturedCategoryContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *ResolveTestContainerDetailsContext) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type ResolveTestContainerDetailsRequest struct { +type ResolveSubcategoryFeaturedCategoryRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // context provides the resolver context for the field details of type TestContainer. - Context []*ResolveTestContainerDetailsContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` - // field_args provides the arguments for the resolver field details of type TestContainer. - FieldArgs *ResolveTestContainerDetailsArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + // context provides the resolver context for the field featuredCategory of type Subcategory. + Context []*ResolveSubcategoryFeaturedCategoryContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field featuredCategory of type Subcategory. + FieldArgs *ResolveSubcategoryFeaturedCategoryArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveTestContainerDetailsRequest) Reset() { - *x = ResolveTestContainerDetailsRequest{} - mi := &file_product_proto_msgTypes[201] +func (x *ResolveSubcategoryFeaturedCategoryRequest) Reset() { + *x = ResolveSubcategoryFeaturedCategoryRequest{} + mi := &file_product_proto_msgTypes[202] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveTestContainerDetailsRequest) String() string { +func (x *ResolveSubcategoryFeaturedCategoryRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveTestContainerDetailsRequest) ProtoMessage() {} +func (*ResolveSubcategoryFeaturedCategoryRequest) ProtoMessage() {} -func (x *ResolveTestContainerDetailsRequest) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[201] +func (x *ResolveSubcategoryFeaturedCategoryRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[202] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9391,47 +9444,47 @@ func (x *ResolveTestContainerDetailsRequest) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveTestContainerDetailsRequest.ProtoReflect.Descriptor instead. -func (*ResolveTestContainerDetailsRequest) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{201} +// Deprecated: Use ResolveSubcategoryFeaturedCategoryRequest.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryFeaturedCategoryRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{202} } -func (x *ResolveTestContainerDetailsRequest) GetContext() []*ResolveTestContainerDetailsContext { +func (x *ResolveSubcategoryFeaturedCategoryRequest) GetContext() []*ResolveSubcategoryFeaturedCategoryContext { if x != nil { return x.Context } return nil } -func (x *ResolveTestContainerDetailsRequest) GetFieldArgs() *ResolveTestContainerDetailsArgs { +func (x *ResolveSubcategoryFeaturedCategoryRequest) GetFieldArgs() *ResolveSubcategoryFeaturedCategoryArgs { if x != nil { return x.FieldArgs } return nil } -type ResolveTestContainerDetailsResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - Details *TestDetails `protobuf:"bytes,1,opt,name=details,proto3" json:"details,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveSubcategoryFeaturedCategoryResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + FeaturedCategory *Category `protobuf:"bytes,1,opt,name=featured_category,json=featuredCategory,proto3" json:"featured_category,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ResolveTestContainerDetailsResult) Reset() { - *x = ResolveTestContainerDetailsResult{} - mi := &file_product_proto_msgTypes[202] +func (x *ResolveSubcategoryFeaturedCategoryResult) Reset() { + *x = ResolveSubcategoryFeaturedCategoryResult{} + mi := &file_product_proto_msgTypes[203] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveTestContainerDetailsResult) String() string { +func (x *ResolveSubcategoryFeaturedCategoryResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveTestContainerDetailsResult) ProtoMessage() {} +func (*ResolveSubcategoryFeaturedCategoryResult) ProtoMessage() {} -func (x *ResolveTestContainerDetailsResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[202] +func (x *ResolveSubcategoryFeaturedCategoryResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[203] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9442,40 +9495,40 @@ func (x *ResolveTestContainerDetailsResult) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ResolveTestContainerDetailsResult.ProtoReflect.Descriptor instead. -func (*ResolveTestContainerDetailsResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{202} +// Deprecated: Use ResolveSubcategoryFeaturedCategoryResult.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryFeaturedCategoryResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{203} } -func (x *ResolveTestContainerDetailsResult) GetDetails() *TestDetails { +func (x *ResolveSubcategoryFeaturedCategoryResult) GetFeaturedCategory() *Category { if x != nil { - return x.Details + return x.FeaturedCategory } return nil } -type ResolveTestContainerDetailsResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Result []*ResolveTestContainerDetailsResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` +type ResolveSubcategoryFeaturedCategoryResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveSubcategoryFeaturedCategoryResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ResolveTestContainerDetailsResponse) Reset() { - *x = ResolveTestContainerDetailsResponse{} - mi := &file_product_proto_msgTypes[203] +func (x *ResolveSubcategoryFeaturedCategoryResponse) Reset() { + *x = ResolveSubcategoryFeaturedCategoryResponse{} + mi := &file_product_proto_msgTypes[204] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ResolveTestContainerDetailsResponse) String() string { +func (x *ResolveSubcategoryFeaturedCategoryResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveTestContainerDetailsResponse) ProtoMessage() {} +func (*ResolveSubcategoryFeaturedCategoryResponse) ProtoMessage() {} -func (x *ResolveTestContainerDetailsResponse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[203] +func (x *ResolveSubcategoryFeaturedCategoryResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[204] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9486,42 +9539,40 @@ func (x *ResolveTestContainerDetailsResponse) ProtoReflect() protoreflect.Messag return mi.MessageOf(x) } -// Deprecated: Use ResolveTestContainerDetailsResponse.ProtoReflect.Descriptor instead. -func (*ResolveTestContainerDetailsResponse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{203} +// Deprecated: Use ResolveSubcategoryFeaturedCategoryResponse.ProtoReflect.Descriptor instead. +func (*ResolveSubcategoryFeaturedCategoryResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{204} } -func (x *ResolveTestContainerDetailsResponse) GetResult() []*ResolveTestContainerDetailsResult { +func (x *ResolveSubcategoryFeaturedCategoryResponse) GetResult() []*ResolveSubcategoryFeaturedCategoryResult { if x != nil { return x.Result } return nil } -type Product struct { +type ResolveCategoryMetricsNormalizedScoreArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Price float64 `protobuf:"fixed64,3,opt,name=price,proto3" json:"price,omitempty"` + Baseline float64 `protobuf:"fixed64,1,opt,name=baseline,proto3" json:"baseline,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Product) Reset() { - *x = Product{} - mi := &file_product_proto_msgTypes[204] +func (x *ResolveCategoryMetricsNormalizedScoreArgs) Reset() { + *x = ResolveCategoryMetricsNormalizedScoreArgs{} + mi := &file_product_proto_msgTypes[205] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Product) String() string { +func (x *ResolveCategoryMetricsNormalizedScoreArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Product) ProtoMessage() {} +func (*ResolveCategoryMetricsNormalizedScoreArgs) ProtoMessage() {} -func (x *Product) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[204] +func (x *ResolveCategoryMetricsNormalizedScoreArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[205] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9532,56 +9583,42 @@ func (x *Product) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Product.ProtoReflect.Descriptor instead. -func (*Product) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{204} -} - -func (x *Product) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use ResolveCategoryMetricsNormalizedScoreArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsNormalizedScoreArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{205} } -func (x *Product) GetName() string { +func (x *ResolveCategoryMetricsNormalizedScoreArgs) GetBaseline() float64 { if x != nil { - return x.Name + return x.Baseline } - return "" + return 0 } -func (x *Product) GetPrice() float64 { - if x != nil { - return x.Price - } - return 0 -} - -type Storage struct { +type ResolveCategoryMetricsNormalizedScoreContext struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` + MetricType string `protobuf:"bytes,2,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Value float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Storage) Reset() { - *x = Storage{} - mi := &file_product_proto_msgTypes[205] +func (x *ResolveCategoryMetricsNormalizedScoreContext) Reset() { + *x = ResolveCategoryMetricsNormalizedScoreContext{} + mi := &file_product_proto_msgTypes[206] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Storage) String() string { +func (x *ResolveCategoryMetricsNormalizedScoreContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Storage) ProtoMessage() {} +func (*ResolveCategoryMetricsNormalizedScoreContext) ProtoMessage() {} -func (x *Storage) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[205] +func (x *ResolveCategoryMetricsNormalizedScoreContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[206] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9592,56 +9629,57 @@ func (x *Storage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Storage.ProtoReflect.Descriptor instead. -func (*Storage) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{205} +// Deprecated: Use ResolveCategoryMetricsNormalizedScoreContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsNormalizedScoreContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{206} } -func (x *Storage) GetId() string { +func (x *ResolveCategoryMetricsNormalizedScoreContext) GetId() string { if x != nil { return x.Id } return "" } -func (x *Storage) GetName() string { +func (x *ResolveCategoryMetricsNormalizedScoreContext) GetMetricType() string { if x != nil { - return x.Name + return x.MetricType } return "" } -func (x *Storage) GetLocation() string { +func (x *ResolveCategoryMetricsNormalizedScoreContext) GetValue() float64 { if x != nil { - return x.Location + return x.Value } - return "" + return 0 } -type Warehouse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` +type ResolveCategoryMetricsNormalizedScoreRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // context provides the resolver context for the field normalizedScore of type CategoryMetrics. + Context []*ResolveCategoryMetricsNormalizedScoreContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field normalizedScore of type CategoryMetrics. + FieldArgs *ResolveCategoryMetricsNormalizedScoreArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Warehouse) Reset() { - *x = Warehouse{} - mi := &file_product_proto_msgTypes[206] +func (x *ResolveCategoryMetricsNormalizedScoreRequest) Reset() { + *x = ResolveCategoryMetricsNormalizedScoreRequest{} + mi := &file_product_proto_msgTypes[207] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Warehouse) String() string { +func (x *ResolveCategoryMetricsNormalizedScoreRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Warehouse) ProtoMessage() {} +func (*ResolveCategoryMetricsNormalizedScoreRequest) ProtoMessage() {} -func (x *Warehouse) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[206] +func (x *ResolveCategoryMetricsNormalizedScoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[207] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9652,55 +9690,47 @@ func (x *Warehouse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Warehouse.ProtoReflect.Descriptor instead. -func (*Warehouse) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{206} -} - -func (x *Warehouse) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use ResolveCategoryMetricsNormalizedScoreRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsNormalizedScoreRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{207} } -func (x *Warehouse) GetName() string { +func (x *ResolveCategoryMetricsNormalizedScoreRequest) GetContext() []*ResolveCategoryMetricsNormalizedScoreContext { if x != nil { - return x.Name + return x.Context } - return "" + return nil } -func (x *Warehouse) GetLocation() string { +func (x *ResolveCategoryMetricsNormalizedScoreRequest) GetFieldArgs() *ResolveCategoryMetricsNormalizedScoreArgs { if x != nil { - return x.Location + return x.FieldArgs } - return "" + return nil } -type User struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryMetricsNormalizedScoreResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + NormalizedScore float64 `protobuf:"fixed64,1,opt,name=normalized_score,json=normalizedScore,proto3" json:"normalized_score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *User) Reset() { - *x = User{} - mi := &file_product_proto_msgTypes[207] +func (x *ResolveCategoryMetricsNormalizedScoreResult) Reset() { + *x = ResolveCategoryMetricsNormalizedScoreResult{} + mi := &file_product_proto_msgTypes[208] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *User) String() string { +func (x *ResolveCategoryMetricsNormalizedScoreResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*User) ProtoMessage() {} +func (*ResolveCategoryMetricsNormalizedScoreResult) ProtoMessage() {} -func (x *User) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[207] +func (x *ResolveCategoryMetricsNormalizedScoreResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[208] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9711,49 +9741,40 @@ func (x *User) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use User.ProtoReflect.Descriptor instead. -func (*User) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{207} -} - -func (x *User) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use ResolveCategoryMetricsNormalizedScoreResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsNormalizedScoreResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{208} } -func (x *User) GetName() string { +func (x *ResolveCategoryMetricsNormalizedScoreResult) GetNormalizedScore() float64 { if x != nil { - return x.Name + return x.NormalizedScore } - return "" + return 0 } -type NestedTypeA struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - B *NestedTypeB `protobuf:"bytes,3,opt,name=b,proto3" json:"b,omitempty"` +type ResolveCategoryMetricsNormalizedScoreResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryMetricsNormalizedScoreResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *NestedTypeA) Reset() { - *x = NestedTypeA{} - mi := &file_product_proto_msgTypes[208] +func (x *ResolveCategoryMetricsNormalizedScoreResponse) Reset() { + *x = ResolveCategoryMetricsNormalizedScoreResponse{} + mi := &file_product_proto_msgTypes[209] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NestedTypeA) String() string { +func (x *ResolveCategoryMetricsNormalizedScoreResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NestedTypeA) ProtoMessage() {} +func (*ResolveCategoryMetricsNormalizedScoreResponse) ProtoMessage() {} -func (x *NestedTypeA) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[208] +func (x *ResolveCategoryMetricsNormalizedScoreResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[209] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9764,56 +9785,40 @@ func (x *NestedTypeA) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NestedTypeA.ProtoReflect.Descriptor instead. -func (*NestedTypeA) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{208} -} - -func (x *NestedTypeA) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *NestedTypeA) GetName() string { - if x != nil { - return x.Name - } - return "" +// Deprecated: Use ResolveCategoryMetricsNormalizedScoreResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsNormalizedScoreResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{209} } -func (x *NestedTypeA) GetB() *NestedTypeB { +func (x *ResolveCategoryMetricsNormalizedScoreResponse) GetResult() []*ResolveCategoryMetricsNormalizedScoreResult { if x != nil { - return x.B + return x.Result } return nil } -type RecursiveType struct { +type ResolveCategoryMetricsRelatedCategoryArgs struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - RecursiveType *RecursiveType `protobuf:"bytes,3,opt,name=recursive_type,json=recursiveType,proto3" json:"recursive_type,omitempty"` + Include *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=include,proto3" json:"include,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *RecursiveType) Reset() { - *x = RecursiveType{} - mi := &file_product_proto_msgTypes[209] +func (x *ResolveCategoryMetricsRelatedCategoryArgs) Reset() { + *x = ResolveCategoryMetricsRelatedCategoryArgs{} + mi := &file_product_proto_msgTypes[210] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *RecursiveType) String() string { +func (x *ResolveCategoryMetricsRelatedCategoryArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RecursiveType) ProtoMessage() {} +func (*ResolveCategoryMetricsRelatedCategoryArgs) ProtoMessage() {} -func (x *RecursiveType) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[209] +func (x *ResolveCategoryMetricsRelatedCategoryArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[210] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9824,57 +9829,40 @@ func (x *RecursiveType) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RecursiveType.ProtoReflect.Descriptor instead. -func (*RecursiveType) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{209} -} - -func (x *RecursiveType) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *RecursiveType) GetName() string { - if x != nil { - return x.Name - } - return "" +// Deprecated: Use ResolveCategoryMetricsRelatedCategoryArgs.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsRelatedCategoryArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{210} } -func (x *RecursiveType) GetRecursiveType() *RecursiveType { +func (x *ResolveCategoryMetricsRelatedCategoryArgs) GetInclude() *wrapperspb.BoolValue { if x != nil { - return x.RecursiveType + return x.Include } return nil } -type TypeWithMultipleFilterFields struct { +type ResolveCategoryMetricsRelatedCategoryContext struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - FilterField_1 string `protobuf:"bytes,3,opt,name=filter_field_1,json=filterField1,proto3" json:"filter_field_1,omitempty"` - FilterField_2 string `protobuf:"bytes,4,opt,name=filter_field_2,json=filterField2,proto3" json:"filter_field_2,omitempty"` + CategoryId string `protobuf:"bytes,1,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *TypeWithMultipleFilterFields) Reset() { - *x = TypeWithMultipleFilterFields{} - mi := &file_product_proto_msgTypes[210] +func (x *ResolveCategoryMetricsRelatedCategoryContext) Reset() { + *x = ResolveCategoryMetricsRelatedCategoryContext{} + mi := &file_product_proto_msgTypes[211] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TypeWithMultipleFilterFields) String() string { +func (x *ResolveCategoryMetricsRelatedCategoryContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TypeWithMultipleFilterFields) ProtoMessage() {} +func (*ResolveCategoryMetricsRelatedCategoryContext) ProtoMessage() {} -func (x *TypeWithMultipleFilterFields) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[210] +func (x *ResolveCategoryMetricsRelatedCategoryContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[211] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9885,62 +9873,94 @@ func (x *TypeWithMultipleFilterFields) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TypeWithMultipleFilterFields.ProtoReflect.Descriptor instead. -func (*TypeWithMultipleFilterFields) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{210} +// Deprecated: Use ResolveCategoryMetricsRelatedCategoryContext.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsRelatedCategoryContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{211} } -func (x *TypeWithMultipleFilterFields) GetId() string { +func (x *ResolveCategoryMetricsRelatedCategoryContext) GetCategoryId() string { if x != nil { - return x.Id + return x.CategoryId } return "" } -func (x *TypeWithMultipleFilterFields) GetName() string { +type ResolveCategoryMetricsRelatedCategoryRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // context provides the resolver context for the field relatedCategory of type CategoryMetrics. + Context []*ResolveCategoryMetricsRelatedCategoryContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field relatedCategory of type CategoryMetrics. + FieldArgs *ResolveCategoryMetricsRelatedCategoryArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResolveCategoryMetricsRelatedCategoryRequest) Reset() { + *x = ResolveCategoryMetricsRelatedCategoryRequest{} + mi := &file_product_proto_msgTypes[212] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveCategoryMetricsRelatedCategoryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveCategoryMetricsRelatedCategoryRequest) ProtoMessage() {} + +func (x *ResolveCategoryMetricsRelatedCategoryRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[212] if x != nil { - return x.Name + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *TypeWithMultipleFilterFields) GetFilterField_1() string { +// Deprecated: Use ResolveCategoryMetricsRelatedCategoryRequest.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsRelatedCategoryRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{212} +} + +func (x *ResolveCategoryMetricsRelatedCategoryRequest) GetContext() []*ResolveCategoryMetricsRelatedCategoryContext { if x != nil { - return x.FilterField_1 + return x.Context } - return "" + return nil } -func (x *TypeWithMultipleFilterFields) GetFilterField_2() string { +func (x *ResolveCategoryMetricsRelatedCategoryRequest) GetFieldArgs() *ResolveCategoryMetricsRelatedCategoryArgs { if x != nil { - return x.FilterField_2 + return x.FieldArgs } - return "" + return nil } -type FilterTypeInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - FilterField_1 string `protobuf:"bytes,1,opt,name=filter_field_1,json=filterField1,proto3" json:"filter_field_1,omitempty"` - FilterField_2 string `protobuf:"bytes,2,opt,name=filter_field_2,json=filterField2,proto3" json:"filter_field_2,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveCategoryMetricsRelatedCategoryResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + RelatedCategory *Category `protobuf:"bytes,1,opt,name=related_category,json=relatedCategory,proto3" json:"related_category,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *FilterTypeInput) Reset() { - *x = FilterTypeInput{} - mi := &file_product_proto_msgTypes[211] +func (x *ResolveCategoryMetricsRelatedCategoryResult) Reset() { + *x = ResolveCategoryMetricsRelatedCategoryResult{} + mi := &file_product_proto_msgTypes[213] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *FilterTypeInput) String() string { +func (x *ResolveCategoryMetricsRelatedCategoryResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FilterTypeInput) ProtoMessage() {} +func (*ResolveCategoryMetricsRelatedCategoryResult) ProtoMessage() {} -func (x *FilterTypeInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[211] +func (x *ResolveCategoryMetricsRelatedCategoryResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[213] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9951,47 +9971,40 @@ func (x *FilterTypeInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FilterTypeInput.ProtoReflect.Descriptor instead. -func (*FilterTypeInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{211} -} - -func (x *FilterTypeInput) GetFilterField_1() string { - if x != nil { - return x.FilterField_1 - } - return "" +// Deprecated: Use ResolveCategoryMetricsRelatedCategoryResult.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsRelatedCategoryResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{213} } -func (x *FilterTypeInput) GetFilterField_2() string { +func (x *ResolveCategoryMetricsRelatedCategoryResult) GetRelatedCategory() *Category { if x != nil { - return x.FilterField_2 + return x.RelatedCategory } - return "" + return nil } -type ComplexFilterTypeInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Filter *FilterType `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` +type ResolveCategoryMetricsRelatedCategoryResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveCategoryMetricsRelatedCategoryResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ComplexFilterTypeInput) Reset() { - *x = ComplexFilterTypeInput{} - mi := &file_product_proto_msgTypes[212] +func (x *ResolveCategoryMetricsRelatedCategoryResponse) Reset() { + *x = ResolveCategoryMetricsRelatedCategoryResponse{} + mi := &file_product_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ComplexFilterTypeInput) String() string { +func (x *ResolveCategoryMetricsRelatedCategoryResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ComplexFilterTypeInput) ProtoMessage() {} +func (*ResolveCategoryMetricsRelatedCategoryResponse) ProtoMessage() {} -func (x *ComplexFilterTypeInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[212] +func (x *ResolveCategoryMetricsRelatedCategoryResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[214] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10002,41 +10015,40 @@ func (x *ComplexFilterTypeInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ComplexFilterTypeInput.ProtoReflect.Descriptor instead. -func (*ComplexFilterTypeInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{212} +// Deprecated: Use ResolveCategoryMetricsRelatedCategoryResponse.ProtoReflect.Descriptor instead. +func (*ResolveCategoryMetricsRelatedCategoryResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{214} } -func (x *ComplexFilterTypeInput) GetFilter() *FilterType { +func (x *ResolveCategoryMetricsRelatedCategoryResponse) GetResult() []*ResolveCategoryMetricsRelatedCategoryResult { if x != nil { - return x.Filter + return x.Result } return nil } -type TypeWithComplexFilterInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ResolveTestContainerDetailsArgs struct { + state protoimpl.MessageState `protogen:"open.v1"` + IncludeExtended bool `protobuf:"varint,1,opt,name=include_extended,json=includeExtended,proto3" json:"include_extended,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TypeWithComplexFilterInput) Reset() { - *x = TypeWithComplexFilterInput{} - mi := &file_product_proto_msgTypes[213] +func (x *ResolveTestContainerDetailsArgs) Reset() { + *x = ResolveTestContainerDetailsArgs{} + mi := &file_product_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TypeWithComplexFilterInput) String() string { +func (x *ResolveTestContainerDetailsArgs) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TypeWithComplexFilterInput) ProtoMessage() {} +func (*ResolveTestContainerDetailsArgs) ProtoMessage() {} -func (x *TypeWithComplexFilterInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[213] +func (x *ResolveTestContainerDetailsArgs) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[215] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10047,49 +10059,41 @@ func (x *TypeWithComplexFilterInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TypeWithComplexFilterInput.ProtoReflect.Descriptor instead. -func (*TypeWithComplexFilterInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{213} -} - -func (x *TypeWithComplexFilterInput) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use ResolveTestContainerDetailsArgs.ProtoReflect.Descriptor instead. +func (*ResolveTestContainerDetailsArgs) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{215} } -func (x *TypeWithComplexFilterInput) GetName() string { +func (x *ResolveTestContainerDetailsArgs) GetIncludeExtended() bool { if x != nil { - return x.Name + return x.IncludeExtended } - return "" + return false } -type OrderInput struct { +type ResolveTestContainerDetailsContext struct { state protoimpl.MessageState `protogen:"open.v1"` - OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - CustomerName string `protobuf:"bytes,2,opt,name=customer_name,json=customerName,proto3" json:"customer_name,omitempty"` - Lines []*OrderLineInput `protobuf:"bytes,3,rep,name=lines,proto3" json:"lines,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *OrderInput) Reset() { - *x = OrderInput{} - mi := &file_product_proto_msgTypes[214] +func (x *ResolveTestContainerDetailsContext) Reset() { + *x = ResolveTestContainerDetailsContext{} + mi := &file_product_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *OrderInput) String() string { +func (x *ResolveTestContainerDetailsContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OrderInput) ProtoMessage() {} +func (*ResolveTestContainerDetailsContext) ProtoMessage() {} -func (x *OrderInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[214] +func (x *ResolveTestContainerDetailsContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[216] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10100,57 +10104,50 @@ func (x *OrderInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OrderInput.ProtoReflect.Descriptor instead. -func (*OrderInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{214} +// Deprecated: Use ResolveTestContainerDetailsContext.ProtoReflect.Descriptor instead. +func (*ResolveTestContainerDetailsContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{216} } -func (x *OrderInput) GetOrderId() string { +func (x *ResolveTestContainerDetailsContext) GetId() string { if x != nil { - return x.OrderId + return x.Id } return "" } -func (x *OrderInput) GetCustomerName() string { +func (x *ResolveTestContainerDetailsContext) GetName() string { if x != nil { - return x.CustomerName + return x.Name } return "" } -func (x *OrderInput) GetLines() []*OrderLineInput { - if x != nil { - return x.Lines - } - return nil -} - -type Order struct { - state protoimpl.MessageState `protogen:"open.v1"` - OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` - CustomerName string `protobuf:"bytes,2,opt,name=customer_name,json=customerName,proto3" json:"customer_name,omitempty"` - TotalItems int32 `protobuf:"varint,3,opt,name=total_items,json=totalItems,proto3" json:"total_items,omitempty"` - OrderLines *ListOfOrderLine `protobuf:"bytes,4,opt,name=order_lines,json=orderLines,proto3" json:"order_lines,omitempty"` +type ResolveTestContainerDetailsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // context provides the resolver context for the field details of type TestContainer. + Context []*ResolveTestContainerDetailsContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + // field_args provides the arguments for the resolver field details of type TestContainer. + FieldArgs *ResolveTestContainerDetailsArgs `protobuf:"bytes,2,opt,name=field_args,json=fieldArgs,proto3" json:"field_args,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Order) Reset() { - *x = Order{} - mi := &file_product_proto_msgTypes[215] +func (x *ResolveTestContainerDetailsRequest) Reset() { + *x = ResolveTestContainerDetailsRequest{} + mi := &file_product_proto_msgTypes[217] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Order) String() string { +func (x *ResolveTestContainerDetailsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Order) ProtoMessage() {} +func (*ResolveTestContainerDetailsRequest) ProtoMessage() {} -func (x *Order) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[215] +func (x *ResolveTestContainerDetailsRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[217] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10161,65 +10158,91 @@ func (x *Order) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Order.ProtoReflect.Descriptor instead. -func (*Order) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{215} +// Deprecated: Use ResolveTestContainerDetailsRequest.ProtoReflect.Descriptor instead. +func (*ResolveTestContainerDetailsRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{217} } -func (x *Order) GetOrderId() string { +func (x *ResolveTestContainerDetailsRequest) GetContext() []*ResolveTestContainerDetailsContext { if x != nil { - return x.OrderId + return x.Context } - return "" + return nil } -func (x *Order) GetCustomerName() string { +func (x *ResolveTestContainerDetailsRequest) GetFieldArgs() *ResolveTestContainerDetailsArgs { if x != nil { - return x.CustomerName + return x.FieldArgs } - return "" + return nil } -func (x *Order) GetTotalItems() int32 { +type ResolveTestContainerDetailsResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + Details *TestDetails `protobuf:"bytes,1,opt,name=details,proto3" json:"details,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResolveTestContainerDetailsResult) Reset() { + *x = ResolveTestContainerDetailsResult{} + mi := &file_product_proto_msgTypes[218] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResolveTestContainerDetailsResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveTestContainerDetailsResult) ProtoMessage() {} + +func (x *ResolveTestContainerDetailsResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[218] if x != nil { - return x.TotalItems + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (x *Order) GetOrderLines() *ListOfOrderLine { +// Deprecated: Use ResolveTestContainerDetailsResult.ProtoReflect.Descriptor instead. +func (*ResolveTestContainerDetailsResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{218} +} + +func (x *ResolveTestContainerDetailsResult) GetDetails() *TestDetails { if x != nil { - return x.OrderLines + return x.Details } return nil } -type Category struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Kind CategoryKind `protobuf:"varint,3,opt,name=kind,proto3,enum=productv1.CategoryKind" json:"kind,omitempty"` - Subcategories *ListOfSubcategory `protobuf:"bytes,4,opt,name=subcategories,proto3" json:"subcategories,omitempty"` - NullMetrics *CategoryMetrics `protobuf:"bytes,5,opt,name=null_metrics,json=nullMetrics,proto3" json:"null_metrics,omitempty"` +type ResolveTestContainerDetailsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Result []*ResolveTestContainerDetailsResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Category) Reset() { - *x = Category{} - mi := &file_product_proto_msgTypes[216] +func (x *ResolveTestContainerDetailsResponse) Reset() { + *x = ResolveTestContainerDetailsResponse{} + mi := &file_product_proto_msgTypes[219] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Category) String() string { +func (x *ResolveTestContainerDetailsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Category) ProtoMessage() {} +func (*ResolveTestContainerDetailsResponse) ProtoMessage() {} -func (x *Category) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[216] +func (x *ResolveTestContainerDetailsResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[219] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10230,69 +10253,86 @@ func (x *Category) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Category.ProtoReflect.Descriptor instead. -func (*Category) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{216} +// Deprecated: Use ResolveTestContainerDetailsResponse.ProtoReflect.Descriptor instead. +func (*ResolveTestContainerDetailsResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{219} } -func (x *Category) GetId() string { +func (x *ResolveTestContainerDetailsResponse) GetResult() []*ResolveTestContainerDetailsResult { if x != nil { - return x.Id + return x.Result } - return "" + return nil } -func (x *Category) GetName() string { - if x != nil { - return x.Name - } - return "" +type RequireStorageStockHealthScoreByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageStockHealthScoreByIdContext provides the context for the required fields method RequireStorageStockHealthScoreById. + Context []*RequireStorageStockHealthScoreByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Category) GetKind() CategoryKind { - if x != nil { - return x.Kind - } - return CategoryKind_CATEGORY_KIND_UNSPECIFIED +func (x *RequireStorageStockHealthScoreByIdRequest) Reset() { + *x = RequireStorageStockHealthScoreByIdRequest{} + mi := &file_product_proto_msgTypes[220] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Category) GetSubcategories() *ListOfSubcategory { +func (x *RequireStorageStockHealthScoreByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageStockHealthScoreByIdRequest) ProtoMessage() {} + +func (x *RequireStorageStockHealthScoreByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[220] if x != nil { - return x.Subcategories + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Category) GetNullMetrics() *CategoryMetrics { +// Deprecated: Use RequireStorageStockHealthScoreByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageStockHealthScoreByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{220} +} + +func (x *RequireStorageStockHealthScoreByIdRequest) GetContext() []*RequireStorageStockHealthScoreByIdContext { if x != nil { - return x.NullMetrics + return x.Context } return nil } -type CategoryFilter struct { - state protoimpl.MessageState `protogen:"open.v1"` - Category CategoryKind `protobuf:"varint,1,opt,name=category,proto3,enum=productv1.CategoryKind" json:"category,omitempty"` - Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +type RequireStorageStockHealthScoreByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageStockHealthScoreByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *CategoryFilter) Reset() { - *x = CategoryFilter{} - mi := &file_product_proto_msgTypes[217] +func (x *RequireStorageStockHealthScoreByIdContext) Reset() { + *x = RequireStorageStockHealthScoreByIdContext{} + mi := &file_product_proto_msgTypes[221] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *CategoryFilter) String() string { +func (x *RequireStorageStockHealthScoreByIdContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CategoryFilter) ProtoMessage() {} +func (*RequireStorageStockHealthScoreByIdContext) ProtoMessage() {} -func (x *CategoryFilter) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[217] +func (x *RequireStorageStockHealthScoreByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[221] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10303,51 +10343,48 @@ func (x *CategoryFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CategoryFilter.ProtoReflect.Descriptor instead. -func (*CategoryFilter) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{217} +// Deprecated: Use RequireStorageStockHealthScoreByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageStockHealthScoreByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{221} } -func (x *CategoryFilter) GetCategory() CategoryKind { +func (x *RequireStorageStockHealthScoreByIdContext) GetKey() *LookupStorageByIdRequestKey { if x != nil { - return x.Category + return x.Key } - return CategoryKind_CATEGORY_KIND_UNSPECIFIED + return nil } -func (x *CategoryFilter) GetPagination() *Pagination { +func (x *RequireStorageStockHealthScoreByIdContext) GetFields() *RequireStorageStockHealthScoreByIdFields { if x != nil { - return x.Pagination + return x.Fields } return nil } -type Animal struct { +type RequireStorageStockHealthScoreByIdResponse struct { state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Instance: - // - // *Animal_Cat - // *Animal_Dog - Instance isAnimal_Instance `protobuf_oneof:"instance"` + // RequireStorageStockHealthScoreByIdResult provides the result for the required fields method RequireStorageStockHealthScoreById. + Result []*RequireStorageStockHealthScoreByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Animal) Reset() { - *x = Animal{} - mi := &file_product_proto_msgTypes[218] +func (x *RequireStorageStockHealthScoreByIdResponse) Reset() { + *x = RequireStorageStockHealthScoreByIdResponse{} + mi := &file_product_proto_msgTypes[222] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Animal) String() string { +func (x *RequireStorageStockHealthScoreByIdResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Animal) ProtoMessage() {} +func (*RequireStorageStockHealthScoreByIdResponse) ProtoMessage() {} -func (x *Animal) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[218] +func (x *RequireStorageStockHealthScoreByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[222] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10358,75 +10395,85 @@ func (x *Animal) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Animal.ProtoReflect.Descriptor instead. -func (*Animal) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{218} +// Deprecated: Use RequireStorageStockHealthScoreByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageStockHealthScoreByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{222} } -func (x *Animal) GetInstance() isAnimal_Instance { +func (x *RequireStorageStockHealthScoreByIdResponse) GetResult() []*RequireStorageStockHealthScoreByIdResult { if x != nil { - return x.Instance + return x.Result } return nil } -func (x *Animal) GetCat() *Cat { - if x != nil { - if x, ok := x.Instance.(*Animal_Cat); ok { - return x.Cat - } - } - return nil +type RequireStorageStockHealthScoreByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + StockHealthScore float64 `protobuf:"fixed64,1,opt,name=stock_health_score,json=stockHealthScore,proto3" json:"stock_health_score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Animal) GetDog() *Dog { - if x != nil { - if x, ok := x.Instance.(*Animal_Dog); ok { - return x.Dog - } - } - return nil +func (x *RequireStorageStockHealthScoreByIdResult) Reset() { + *x = RequireStorageStockHealthScoreByIdResult{} + mi := &file_product_proto_msgTypes[223] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type isAnimal_Instance interface { - isAnimal_Instance() +func (x *RequireStorageStockHealthScoreByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) } -type Animal_Cat struct { - Cat *Cat `protobuf:"bytes,1,opt,name=cat,proto3,oneof"` -} +func (*RequireStorageStockHealthScoreByIdResult) ProtoMessage() {} -type Animal_Dog struct { - Dog *Dog `protobuf:"bytes,2,opt,name=dog,proto3,oneof"` +func (x *RequireStorageStockHealthScoreByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[223] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*Animal_Cat) isAnimal_Instance() {} +// Deprecated: Use RequireStorageStockHealthScoreByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageStockHealthScoreByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{223} +} -func (*Animal_Dog) isAnimal_Instance() {} +func (x *RequireStorageStockHealthScoreByIdResult) GetStockHealthScore() float64 { + if x != nil { + return x.StockHealthScore + } + return 0 +} -type SearchInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` - Limit *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` +type RequireStorageStockHealthScoreByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + ItemCount int32 `protobuf:"varint,1,opt,name=item_count,json=itemCount,proto3" json:"item_count,omitempty"` + RestockData *RequireStorageStockHealthScoreByIdFields_RestockData `protobuf:"bytes,2,opt,name=restock_data,json=restockData,proto3" json:"restock_data,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *SearchInput) Reset() { - *x = SearchInput{} - mi := &file_product_proto_msgTypes[219] +func (x *RequireStorageStockHealthScoreByIdFields) Reset() { + *x = RequireStorageStockHealthScoreByIdFields{} + mi := &file_product_proto_msgTypes[224] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *SearchInput) String() string { +func (x *RequireStorageStockHealthScoreByIdFields) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SearchInput) ProtoMessage() {} +func (*RequireStorageStockHealthScoreByIdFields) ProtoMessage() {} -func (x *SearchInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[219] +func (x *RequireStorageStockHealthScoreByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[224] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10437,52 +10484,48 @@ func (x *SearchInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SearchInput.ProtoReflect.Descriptor instead. -func (*SearchInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{219} +// Deprecated: Use RequireStorageStockHealthScoreByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageStockHealthScoreByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{224} } -func (x *SearchInput) GetQuery() string { +func (x *RequireStorageStockHealthScoreByIdFields) GetItemCount() int32 { if x != nil { - return x.Query + return x.ItemCount } - return "" + return 0 } -func (x *SearchInput) GetLimit() *wrapperspb.Int32Value { +func (x *RequireStorageStockHealthScoreByIdFields) GetRestockData() *RequireStorageStockHealthScoreByIdFields_RestockData { if x != nil { - return x.Limit + return x.RestockData } return nil } -type SearchResult struct { +type RequireStorageTagSummaryByIdRequest struct { state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Value: - // - // *SearchResult_Product - // *SearchResult_User - // *SearchResult_Category - Value isSearchResult_Value `protobuf_oneof:"value"` + // RequireStorageTagSummaryByIdContext provides the context for the required fields method RequireStorageTagSummaryById. + Context []*RequireStorageTagSummaryByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *SearchResult) Reset() { - *x = SearchResult{} - mi := &file_product_proto_msgTypes[220] +func (x *RequireStorageTagSummaryByIdRequest) Reset() { + *x = RequireStorageTagSummaryByIdRequest{} + mi := &file_product_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *SearchResult) String() string { +func (x *RequireStorageTagSummaryByIdRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SearchResult) ProtoMessage() {} +func (*RequireStorageTagSummaryByIdRequest) ProtoMessage() {} -func (x *SearchResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[220] +func (x *RequireStorageTagSummaryByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[225] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10493,96 +10536,137 @@ func (x *SearchResult) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SearchResult.ProtoReflect.Descriptor instead. -func (*SearchResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{220} +// Deprecated: Use RequireStorageTagSummaryByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageTagSummaryByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{225} } -func (x *SearchResult) GetValue() isSearchResult_Value { +func (x *RequireStorageTagSummaryByIdRequest) GetContext() []*RequireStorageTagSummaryByIdContext { if x != nil { - return x.Value + return x.Context } return nil } -func (x *SearchResult) GetProduct() *Product { - if x != nil { - if x, ok := x.Value.(*SearchResult_Product); ok { - return x.Product - } - } - return nil +type RequireStorageTagSummaryByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageTagSummaryByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SearchResult) GetUser() *User { +func (x *RequireStorageTagSummaryByIdContext) Reset() { + *x = RequireStorageTagSummaryByIdContext{} + mi := &file_product_proto_msgTypes[226] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageTagSummaryByIdContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageTagSummaryByIdContext) ProtoMessage() {} + +func (x *RequireStorageTagSummaryByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[226] if x != nil { - if x, ok := x.Value.(*SearchResult_User); ok { - return x.User + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms } - return nil + return mi.MessageOf(x) } -func (x *SearchResult) GetCategory() *Category { +// Deprecated: Use RequireStorageTagSummaryByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageTagSummaryByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{226} +} + +func (x *RequireStorageTagSummaryByIdContext) GetKey() *LookupStorageByIdRequestKey { if x != nil { - if x, ok := x.Value.(*SearchResult_Category); ok { - return x.Category - } + return x.Key } return nil } -type isSearchResult_Value interface { - isSearchResult_Value() +func (x *RequireStorageTagSummaryByIdContext) GetFields() *RequireStorageTagSummaryByIdFields { + if x != nil { + return x.Fields + } + return nil } -type SearchResult_Product struct { - Product *Product `protobuf:"bytes,1,opt,name=product,proto3,oneof"` +type RequireStorageTagSummaryByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageTagSummaryByIdResult provides the result for the required fields method RequireStorageTagSummaryById. + Result []*RequireStorageTagSummaryByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type SearchResult_User struct { - User *User `protobuf:"bytes,2,opt,name=user,proto3,oneof"` +func (x *RequireStorageTagSummaryByIdResponse) Reset() { + *x = RequireStorageTagSummaryByIdResponse{} + mi := &file_product_proto_msgTypes[227] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type SearchResult_Category struct { - Category *Category `protobuf:"bytes,3,opt,name=category,proto3,oneof"` +func (x *RequireStorageTagSummaryByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*SearchResult_Product) isSearchResult_Value() {} +func (*RequireStorageTagSummaryByIdResponse) ProtoMessage() {} -func (*SearchResult_User) isSearchResult_Value() {} +func (x *RequireStorageTagSummaryByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[227] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} -func (*SearchResult_Category) isSearchResult_Value() {} +// Deprecated: Use RequireStorageTagSummaryByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageTagSummaryByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{227} +} -type NullableFieldsType struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - OptionalString *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"` - OptionalInt *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=optional_int,json=optionalInt,proto3" json:"optional_int,omitempty"` - OptionalFloat *wrapperspb.DoubleValue `protobuf:"bytes,5,opt,name=optional_float,json=optionalFloat,proto3" json:"optional_float,omitempty"` - OptionalBoolean *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=optional_boolean,json=optionalBoolean,proto3" json:"optional_boolean,omitempty"` - RequiredString string `protobuf:"bytes,7,opt,name=required_string,json=requiredString,proto3" json:"required_string,omitempty"` - RequiredInt int32 `protobuf:"varint,8,opt,name=required_int,json=requiredInt,proto3" json:"required_int,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +func (x *RequireStorageTagSummaryByIdResponse) GetResult() []*RequireStorageTagSummaryByIdResult { + if x != nil { + return x.Result + } + return nil } -func (x *NullableFieldsType) Reset() { - *x = NullableFieldsType{} - mi := &file_product_proto_msgTypes[221] +type RequireStorageTagSummaryByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + TagSummary string `protobuf:"bytes,1,opt,name=tag_summary,json=tagSummary,proto3" json:"tag_summary,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageTagSummaryByIdResult) Reset() { + *x = RequireStorageTagSummaryByIdResult{} + mi := &file_product_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NullableFieldsType) String() string { +func (x *RequireStorageTagSummaryByIdResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NullableFieldsType) ProtoMessage() {} +func (*RequireStorageTagSummaryByIdResult) ProtoMessage() {} -func (x *NullableFieldsType) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[221] +func (x *RequireStorageTagSummaryByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[228] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10593,91 +10677,130 @@ func (x *NullableFieldsType) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NullableFieldsType.ProtoReflect.Descriptor instead. -func (*NullableFieldsType) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{221} +// Deprecated: Use RequireStorageTagSummaryByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageTagSummaryByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{228} } -func (x *NullableFieldsType) GetId() string { +func (x *RequireStorageTagSummaryByIdResult) GetTagSummary() string { if x != nil { - return x.Id + return x.TagSummary } return "" } -func (x *NullableFieldsType) GetName() string { - if x != nil { - return x.Name - } - return "" +type RequireStorageTagSummaryByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NullableFieldsType) GetOptionalString() *wrapperspb.StringValue { - if x != nil { - return x.OptionalString - } - return nil +func (x *RequireStorageTagSummaryByIdFields) Reset() { + *x = RequireStorageTagSummaryByIdFields{} + mi := &file_product_proto_msgTypes[229] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *NullableFieldsType) GetOptionalInt() *wrapperspb.Int32Value { - if x != nil { - return x.OptionalInt - } - return nil +func (x *RequireStorageTagSummaryByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *NullableFieldsType) GetOptionalFloat() *wrapperspb.DoubleValue { +func (*RequireStorageTagSummaryByIdFields) ProtoMessage() {} + +func (x *RequireStorageTagSummaryByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[229] if x != nil { - return x.OptionalFloat + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *NullableFieldsType) GetOptionalBoolean() *wrapperspb.BoolValue { +// Deprecated: Use RequireStorageTagSummaryByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageTagSummaryByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{229} +} + +func (x *RequireStorageTagSummaryByIdFields) GetTags() []string { if x != nil { - return x.OptionalBoolean + return x.Tags } return nil } -func (x *NullableFieldsType) GetRequiredString() string { +type RequireStorageOptionalTagSummaryByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageOptionalTagSummaryByIdContext provides the context for the required fields method RequireStorageOptionalTagSummaryById. + Context []*RequireStorageOptionalTagSummaryByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalTagSummaryByIdRequest) Reset() { + *x = RequireStorageOptionalTagSummaryByIdRequest{} + mi := &file_product_proto_msgTypes[230] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalTagSummaryByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalTagSummaryByIdRequest) ProtoMessage() {} + +func (x *RequireStorageOptionalTagSummaryByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[230] if x != nil { - return x.RequiredString + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *NullableFieldsType) GetRequiredInt() int32 { +// Deprecated: Use RequireStorageOptionalTagSummaryByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalTagSummaryByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{230} +} + +func (x *RequireStorageOptionalTagSummaryByIdRequest) GetContext() []*RequireStorageOptionalTagSummaryByIdContext { if x != nil { - return x.RequiredInt + return x.Context } - return 0 + return nil } -type NullableFieldsFilter struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - OptionalString *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"` - IncludeNulls *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=include_nulls,json=includeNulls,proto3" json:"include_nulls,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type RequireStorageOptionalTagSummaryByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageOptionalTagSummaryByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NullableFieldsFilter) Reset() { - *x = NullableFieldsFilter{} - mi := &file_product_proto_msgTypes[222] +func (x *RequireStorageOptionalTagSummaryByIdContext) Reset() { + *x = RequireStorageOptionalTagSummaryByIdContext{} + mi := &file_product_proto_msgTypes[231] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NullableFieldsFilter) String() string { +func (x *RequireStorageOptionalTagSummaryByIdContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NullableFieldsFilter) ProtoMessage() {} +func (*RequireStorageOptionalTagSummaryByIdContext) ProtoMessage() {} -func (x *NullableFieldsFilter) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[222] +func (x *RequireStorageOptionalTagSummaryByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[231] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10688,73 +10811,48 @@ func (x *NullableFieldsFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NullableFieldsFilter.ProtoReflect.Descriptor instead. -func (*NullableFieldsFilter) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{222} -} - -func (x *NullableFieldsFilter) GetName() *wrapperspb.StringValue { - if x != nil { - return x.Name - } - return nil +// Deprecated: Use RequireStorageOptionalTagSummaryByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalTagSummaryByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{231} } -func (x *NullableFieldsFilter) GetOptionalString() *wrapperspb.StringValue { +func (x *RequireStorageOptionalTagSummaryByIdContext) GetKey() *LookupStorageByIdRequestKey { if x != nil { - return x.OptionalString + return x.Key } return nil } -func (x *NullableFieldsFilter) GetIncludeNulls() *wrapperspb.BoolValue { +func (x *RequireStorageOptionalTagSummaryByIdContext) GetFields() *RequireStorageOptionalTagSummaryByIdFields { if x != nil { - return x.IncludeNulls + return x.Fields } return nil } -type BlogPost struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` - Tags []string `protobuf:"bytes,4,rep,name=tags,proto3" json:"tags,omitempty"` - OptionalTags *ListOfString `protobuf:"bytes,5,opt,name=optional_tags,json=optionalTags,proto3" json:"optional_tags,omitempty"` - Categories []string `protobuf:"bytes,6,rep,name=categories,proto3" json:"categories,omitempty"` - Keywords *ListOfString `protobuf:"bytes,7,opt,name=keywords,proto3" json:"keywords,omitempty"` - ViewCounts []int32 `protobuf:"varint,8,rep,packed,name=view_counts,json=viewCounts,proto3" json:"view_counts,omitempty"` - Ratings *ListOfFloat `protobuf:"bytes,9,opt,name=ratings,proto3" json:"ratings,omitempty"` - IsPublished *ListOfBoolean `protobuf:"bytes,10,opt,name=is_published,json=isPublished,proto3" json:"is_published,omitempty"` - TagGroups *ListOfListOfString `protobuf:"bytes,11,opt,name=tag_groups,json=tagGroups,proto3" json:"tag_groups,omitempty"` - RelatedTopics *ListOfListOfString `protobuf:"bytes,12,opt,name=related_topics,json=relatedTopics,proto3" json:"related_topics,omitempty"` - CommentThreads *ListOfListOfString `protobuf:"bytes,13,opt,name=comment_threads,json=commentThreads,proto3" json:"comment_threads,omitempty"` - Suggestions *ListOfListOfString `protobuf:"bytes,14,opt,name=suggestions,proto3" json:"suggestions,omitempty"` - RelatedCategories []*Category `protobuf:"bytes,15,rep,name=related_categories,json=relatedCategories,proto3" json:"related_categories,omitempty"` - Contributors []*User `protobuf:"bytes,16,rep,name=contributors,proto3" json:"contributors,omitempty"` - MentionedProducts *ListOfProduct `protobuf:"bytes,17,opt,name=mentioned_products,json=mentionedProducts,proto3" json:"mentioned_products,omitempty"` - MentionedUsers *ListOfUser `protobuf:"bytes,18,opt,name=mentioned_users,json=mentionedUsers,proto3" json:"mentioned_users,omitempty"` - CategoryGroups *ListOfListOfCategory `protobuf:"bytes,19,opt,name=category_groups,json=categoryGroups,proto3" json:"category_groups,omitempty"` - ContributorTeams *ListOfListOfUser `protobuf:"bytes,20,opt,name=contributor_teams,json=contributorTeams,proto3" json:"contributor_teams,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type RequireStorageOptionalTagSummaryByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageOptionalTagSummaryByIdResult provides the result for the required fields method RequireStorageOptionalTagSummaryById. + Result []*RequireStorageOptionalTagSummaryByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPost) Reset() { - *x = BlogPost{} - mi := &file_product_proto_msgTypes[223] +func (x *RequireStorageOptionalTagSummaryByIdResponse) Reset() { + *x = RequireStorageOptionalTagSummaryByIdResponse{} + mi := &file_product_proto_msgTypes[232] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *BlogPost) String() string { +func (x *RequireStorageOptionalTagSummaryByIdResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BlogPost) ProtoMessage() {} +func (*RequireStorageOptionalTagSummaryByIdResponse) ProtoMessage() {} -func (x *BlogPost) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[223] +func (x *RequireStorageOptionalTagSummaryByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[232] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10765,175 +10863,174 @@ func (x *BlogPost) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BlogPost.ProtoReflect.Descriptor instead. -func (*BlogPost) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{223} -} - -func (x *BlogPost) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use RequireStorageOptionalTagSummaryByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalTagSummaryByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{232} } -func (x *BlogPost) GetTitle() string { +func (x *RequireStorageOptionalTagSummaryByIdResponse) GetResult() []*RequireStorageOptionalTagSummaryByIdResult { if x != nil { - return x.Title + return x.Result } - return "" + return nil } -func (x *BlogPost) GetContent() string { - if x != nil { - return x.Content - } - return "" +type RequireStorageOptionalTagSummaryByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionalTagSummary *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=optional_tag_summary,json=optionalTagSummary,proto3" json:"optional_tag_summary,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPost) GetTags() []string { - if x != nil { - return x.Tags - } - return nil +func (x *RequireStorageOptionalTagSummaryByIdResult) Reset() { + *x = RequireStorageOptionalTagSummaryByIdResult{} + mi := &file_product_proto_msgTypes[233] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BlogPost) GetOptionalTags() *ListOfString { - if x != nil { - return x.OptionalTags - } - return nil +func (x *RequireStorageOptionalTagSummaryByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *BlogPost) GetCategories() []string { +func (*RequireStorageOptionalTagSummaryByIdResult) ProtoMessage() {} + +func (x *RequireStorageOptionalTagSummaryByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[233] if x != nil { - return x.Categories + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *BlogPost) GetKeywords() *ListOfString { - if x != nil { - return x.Keywords - } - return nil +// Deprecated: Use RequireStorageOptionalTagSummaryByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalTagSummaryByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{233} } -func (x *BlogPost) GetViewCounts() []int32 { +func (x *RequireStorageOptionalTagSummaryByIdResult) GetOptionalTagSummary() *wrapperspb.StringValue { if x != nil { - return x.ViewCounts + return x.OptionalTagSummary } return nil } -func (x *BlogPost) GetRatings() *ListOfFloat { - if x != nil { - return x.Ratings - } - return nil +type RequireStorageOptionalTagSummaryByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionalTags *ListOfString `protobuf:"bytes,1,opt,name=optional_tags,json=optionalTags,proto3" json:"optional_tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPost) GetIsPublished() *ListOfBoolean { - if x != nil { - return x.IsPublished - } - return nil +func (x *RequireStorageOptionalTagSummaryByIdFields) Reset() { + *x = RequireStorageOptionalTagSummaryByIdFields{} + mi := &file_product_proto_msgTypes[234] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BlogPost) GetTagGroups() *ListOfListOfString { - if x != nil { - return x.TagGroups - } - return nil +func (x *RequireStorageOptionalTagSummaryByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *BlogPost) GetRelatedTopics() *ListOfListOfString { +func (*RequireStorageOptionalTagSummaryByIdFields) ProtoMessage() {} + +func (x *RequireStorageOptionalTagSummaryByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[234] if x != nil { - return x.RelatedTopics + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *BlogPost) GetCommentThreads() *ListOfListOfString { - if x != nil { - return x.CommentThreads - } - return nil +// Deprecated: Use RequireStorageOptionalTagSummaryByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalTagSummaryByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{234} } -func (x *BlogPost) GetSuggestions() *ListOfListOfString { +func (x *RequireStorageOptionalTagSummaryByIdFields) GetOptionalTags() *ListOfString { if x != nil { - return x.Suggestions + return x.OptionalTags } return nil } -func (x *BlogPost) GetRelatedCategories() []*Category { - if x != nil { - return x.RelatedCategories - } - return nil +type RequireStorageMetadataScoreByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageMetadataScoreByIdContext provides the context for the required fields method RequireStorageMetadataScoreById. + Context []*RequireStorageMetadataScoreByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPost) GetContributors() []*User { - if x != nil { - return x.Contributors - } - return nil +func (x *RequireStorageMetadataScoreByIdRequest) Reset() { + *x = RequireStorageMetadataScoreByIdRequest{} + mi := &file_product_proto_msgTypes[235] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BlogPost) GetMentionedProducts() *ListOfProduct { - if x != nil { - return x.MentionedProducts - } - return nil +func (x *RequireStorageMetadataScoreByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *BlogPost) GetMentionedUsers() *ListOfUser { +func (*RequireStorageMetadataScoreByIdRequest) ProtoMessage() {} + +func (x *RequireStorageMetadataScoreByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[235] if x != nil { - return x.MentionedUsers + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *BlogPost) GetCategoryGroups() *ListOfListOfCategory { - if x != nil { - return x.CategoryGroups - } - return nil +// Deprecated: Use RequireStorageMetadataScoreByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageMetadataScoreByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{235} } -func (x *BlogPost) GetContributorTeams() *ListOfListOfUser { +func (x *RequireStorageMetadataScoreByIdRequest) GetContext() []*RequireStorageMetadataScoreByIdContext { if x != nil { - return x.ContributorTeams + return x.Context } return nil } -type BlogPostFilter struct { - state protoimpl.MessageState `protogen:"open.v1"` - Title *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - HasCategories *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=has_categories,json=hasCategories,proto3" json:"has_categories,omitempty"` - MinTags *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=min_tags,json=minTags,proto3" json:"min_tags,omitempty"` +type RequireStorageMetadataScoreByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageMetadataScoreByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *BlogPostFilter) Reset() { - *x = BlogPostFilter{} - mi := &file_product_proto_msgTypes[224] +func (x *RequireStorageMetadataScoreByIdContext) Reset() { + *x = RequireStorageMetadataScoreByIdContext{} + mi := &file_product_proto_msgTypes[236] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *BlogPostFilter) String() string { +func (x *RequireStorageMetadataScoreByIdContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BlogPostFilter) ProtoMessage() {} +func (*RequireStorageMetadataScoreByIdContext) ProtoMessage() {} -func (x *BlogPostFilter) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[224] +func (x *RequireStorageMetadataScoreByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[236] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10944,68 +11041,48 @@ func (x *BlogPostFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BlogPostFilter.ProtoReflect.Descriptor instead. -func (*BlogPostFilter) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{224} -} - -func (x *BlogPostFilter) GetTitle() *wrapperspb.StringValue { - if x != nil { - return x.Title - } - return nil +// Deprecated: Use RequireStorageMetadataScoreByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageMetadataScoreByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{236} } -func (x *BlogPostFilter) GetHasCategories() *wrapperspb.BoolValue { +func (x *RequireStorageMetadataScoreByIdContext) GetKey() *LookupStorageByIdRequestKey { if x != nil { - return x.HasCategories + return x.Key } return nil } -func (x *BlogPostFilter) GetMinTags() *wrapperspb.Int32Value { +func (x *RequireStorageMetadataScoreByIdContext) GetFields() *RequireStorageMetadataScoreByIdFields { if x != nil { - return x.MinTags + return x.Fields } return nil } -type Author struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Email *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` - Skills []string `protobuf:"bytes,4,rep,name=skills,proto3" json:"skills,omitempty"` - Languages []string `protobuf:"bytes,5,rep,name=languages,proto3" json:"languages,omitempty"` - SocialLinks *ListOfString `protobuf:"bytes,6,opt,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty"` - TeamsByProject *ListOfListOfString `protobuf:"bytes,7,opt,name=teams_by_project,json=teamsByProject,proto3" json:"teams_by_project,omitempty"` - Collaborations *ListOfListOfString `protobuf:"bytes,8,opt,name=collaborations,proto3" json:"collaborations,omitempty"` - WrittenPosts *ListOfBlogPost `protobuf:"bytes,9,opt,name=written_posts,json=writtenPosts,proto3" json:"written_posts,omitempty"` - FavoriteCategories []*Category `protobuf:"bytes,10,rep,name=favorite_categories,json=favoriteCategories,proto3" json:"favorite_categories,omitempty"` - RelatedAuthors *ListOfUser `protobuf:"bytes,11,opt,name=related_authors,json=relatedAuthors,proto3" json:"related_authors,omitempty"` - ProductReviews *ListOfProduct `protobuf:"bytes,12,opt,name=product_reviews,json=productReviews,proto3" json:"product_reviews,omitempty"` - AuthorGroups *ListOfListOfUser `protobuf:"bytes,13,opt,name=author_groups,json=authorGroups,proto3" json:"author_groups,omitempty"` - CategoryPreferences *ListOfListOfCategory `protobuf:"bytes,14,opt,name=category_preferences,json=categoryPreferences,proto3" json:"category_preferences,omitempty"` - ProjectTeams *ListOfListOfUser `protobuf:"bytes,15,opt,name=project_teams,json=projectTeams,proto3" json:"project_teams,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type RequireStorageMetadataScoreByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageMetadataScoreByIdResult provides the result for the required fields method RequireStorageMetadataScoreById. + Result []*RequireStorageMetadataScoreByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Author) Reset() { - *x = Author{} - mi := &file_product_proto_msgTypes[225] +func (x *RequireStorageMetadataScoreByIdResponse) Reset() { + *x = RequireStorageMetadataScoreByIdResponse{} + mi := &file_product_proto_msgTypes[237] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Author) String() string { +func (x *RequireStorageMetadataScoreByIdResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Author) ProtoMessage() {} +func (*RequireStorageMetadataScoreByIdResponse) ProtoMessage() {} -func (x *Author) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[225] +func (x *RequireStorageMetadataScoreByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[237] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11016,140 +11093,174 @@ func (x *Author) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Author.ProtoReflect.Descriptor instead. -func (*Author) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{225} +// Deprecated: Use RequireStorageMetadataScoreByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageMetadataScoreByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{237} } -func (x *Author) GetId() string { +func (x *RequireStorageMetadataScoreByIdResponse) GetResult() []*RequireStorageMetadataScoreByIdResult { if x != nil { - return x.Id + return x.Result } - return "" + return nil } -func (x *Author) GetName() string { - if x != nil { - return x.Name - } - return "" +type RequireStorageMetadataScoreByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + MetadataScore float64 `protobuf:"fixed64,1,opt,name=metadata_score,json=metadataScore,proto3" json:"metadata_score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Author) GetEmail() *wrapperspb.StringValue { - if x != nil { - return x.Email - } - return nil +func (x *RequireStorageMetadataScoreByIdResult) Reset() { + *x = RequireStorageMetadataScoreByIdResult{} + mi := &file_product_proto_msgTypes[238] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Author) GetSkills() []string { - if x != nil { - return x.Skills - } - return nil +func (x *RequireStorageMetadataScoreByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Author) GetLanguages() []string { +func (*RequireStorageMetadataScoreByIdResult) ProtoMessage() {} + +func (x *RequireStorageMetadataScoreByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[238] if x != nil { - return x.Languages + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Author) GetSocialLinks() *ListOfString { - if x != nil { - return x.SocialLinks - } - return nil +// Deprecated: Use RequireStorageMetadataScoreByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageMetadataScoreByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{238} } -func (x *Author) GetTeamsByProject() *ListOfListOfString { +func (x *RequireStorageMetadataScoreByIdResult) GetMetadataScore() float64 { if x != nil { - return x.TeamsByProject + return x.MetadataScore } - return nil + return 0 } -func (x *Author) GetCollaborations() *ListOfListOfString { - if x != nil { - return x.Collaborations - } - return nil +type RequireStorageMetadataScoreByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + Metadata *RequireStorageMetadataScoreByIdFields_StorageMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Author) GetWrittenPosts() *ListOfBlogPost { - if x != nil { - return x.WrittenPosts - } - return nil +func (x *RequireStorageMetadataScoreByIdFields) Reset() { + *x = RequireStorageMetadataScoreByIdFields{} + mi := &file_product_proto_msgTypes[239] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Author) GetFavoriteCategories() []*Category { - if x != nil { - return x.FavoriteCategories - } - return nil +func (x *RequireStorageMetadataScoreByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Author) GetRelatedAuthors() *ListOfUser { +func (*RequireStorageMetadataScoreByIdFields) ProtoMessage() {} + +func (x *RequireStorageMetadataScoreByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[239] if x != nil { - return x.RelatedAuthors + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Author) GetProductReviews() *ListOfProduct { - if x != nil { - return x.ProductReviews - } - return nil +// Deprecated: Use RequireStorageMetadataScoreByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageMetadataScoreByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{239} } -func (x *Author) GetAuthorGroups() *ListOfListOfUser { +func (x *RequireStorageMetadataScoreByIdFields) GetMetadata() *RequireStorageMetadataScoreByIdFields_StorageMetadata { if x != nil { - return x.AuthorGroups + return x.Metadata } return nil } -func (x *Author) GetCategoryPreferences() *ListOfListOfCategory { +type RequireStorageProcessedMetadataByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageProcessedMetadataByIdContext provides the context for the required fields method RequireStorageProcessedMetadataById. + Context []*RequireStorageProcessedMetadataByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataByIdRequest) Reset() { + *x = RequireStorageProcessedMetadataByIdRequest{} + mi := &file_product_proto_msgTypes[240] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataByIdRequest) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[240] if x != nil { - return x.CategoryPreferences + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Author) GetProjectTeams() *ListOfListOfUser { +// Deprecated: Use RequireStorageProcessedMetadataByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{240} +} + +func (x *RequireStorageProcessedMetadataByIdRequest) GetContext() []*RequireStorageProcessedMetadataByIdContext { if x != nil { - return x.ProjectTeams + return x.Context } return nil } -type AuthorFilter struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - HasTeams *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=has_teams,json=hasTeams,proto3" json:"has_teams,omitempty"` - SkillCount *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=skill_count,json=skillCount,proto3" json:"skill_count,omitempty"` +type RequireStorageProcessedMetadataByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageProcessedMetadataByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *AuthorFilter) Reset() { - *x = AuthorFilter{} - mi := &file_product_proto_msgTypes[226] +func (x *RequireStorageProcessedMetadataByIdContext) Reset() { + *x = RequireStorageProcessedMetadataByIdContext{} + mi := &file_product_proto_msgTypes[241] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AuthorFilter) String() string { +func (x *RequireStorageProcessedMetadataByIdContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AuthorFilter) ProtoMessage() {} +func (*RequireStorageProcessedMetadataByIdContext) ProtoMessage() {} -func (x *AuthorFilter) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[226] +func (x *RequireStorageProcessedMetadataByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[241] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11160,56 +11271,48 @@ func (x *AuthorFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AuthorFilter.ProtoReflect.Descriptor instead. -func (*AuthorFilter) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{226} -} - -func (x *AuthorFilter) GetName() *wrapperspb.StringValue { - if x != nil { - return x.Name - } - return nil +// Deprecated: Use RequireStorageProcessedMetadataByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{241} } -func (x *AuthorFilter) GetHasTeams() *wrapperspb.BoolValue { +func (x *RequireStorageProcessedMetadataByIdContext) GetKey() *LookupStorageByIdRequestKey { if x != nil { - return x.HasTeams + return x.Key } return nil } -func (x *AuthorFilter) GetSkillCount() *wrapperspb.Int32Value { +func (x *RequireStorageProcessedMetadataByIdContext) GetFields() *RequireStorageProcessedMetadataByIdFields { if x != nil { - return x.SkillCount + return x.Fields } return nil } -type TestContainer struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` +type RequireStorageProcessedMetadataByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageProcessedMetadataByIdResult provides the result for the required fields method RequireStorageProcessedMetadataById. + Result []*RequireStorageProcessedMetadataByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *TestContainer) Reset() { - *x = TestContainer{} - mi := &file_product_proto_msgTypes[227] +func (x *RequireStorageProcessedMetadataByIdResponse) Reset() { + *x = RequireStorageProcessedMetadataByIdResponse{} + mi := &file_product_proto_msgTypes[242] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TestContainer) String() string { +func (x *RequireStorageProcessedMetadataByIdResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TestContainer) ProtoMessage() {} +func (*RequireStorageProcessedMetadataByIdResponse) ProtoMessage() {} -func (x *TestContainer) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[227] +func (x *RequireStorageProcessedMetadataByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[242] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11220,54 +11323,84 @@ func (x *TestContainer) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TestContainer.ProtoReflect.Descriptor instead. -func (*TestContainer) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{227} +// Deprecated: Use RequireStorageProcessedMetadataByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{242} } -func (x *TestContainer) GetId() string { +func (x *RequireStorageProcessedMetadataByIdResponse) GetResult() []*RequireStorageProcessedMetadataByIdResult { if x != nil { - return x.Id + return x.Result } - return "" + return nil } -func (x *TestContainer) GetName() string { +type RequireStorageProcessedMetadataByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProcessedMetadata *StorageMetadata `protobuf:"bytes,1,opt,name=processed_metadata,json=processedMetadata,proto3" json:"processed_metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataByIdResult) Reset() { + *x = RequireStorageProcessedMetadataByIdResult{} + mi := &file_product_proto_msgTypes[243] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataByIdResult) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[243] if x != nil { - return x.Name + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *TestContainer) GetDescription() *wrapperspb.StringValue { +// Deprecated: Use RequireStorageProcessedMetadataByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{243} +} + +func (x *RequireStorageProcessedMetadataByIdResult) GetProcessedMetadata() *StorageMetadata { if x != nil { - return x.Description + return x.ProcessedMetadata } return nil } -type UserInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +type RequireStorageProcessedMetadataByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + Metadata *RequireStorageProcessedMetadataByIdFields_StorageMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *UserInput) Reset() { - *x = UserInput{} - mi := &file_product_proto_msgTypes[228] +func (x *RequireStorageProcessedMetadataByIdFields) Reset() { + *x = RequireStorageProcessedMetadataByIdFields{} + mi := &file_product_proto_msgTypes[244] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *UserInput) String() string { +func (x *RequireStorageProcessedMetadataByIdFields) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UserInput) ProtoMessage() {} +func (*RequireStorageProcessedMetadataByIdFields) ProtoMessage() {} -func (x *UserInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[228] +func (x *RequireStorageProcessedMetadataByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[244] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11278,41 +11411,41 @@ func (x *UserInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UserInput.ProtoReflect.Descriptor instead. -func (*UserInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{228} +// Deprecated: Use RequireStorageProcessedMetadataByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{244} } -func (x *UserInput) GetName() string { +func (x *RequireStorageProcessedMetadataByIdFields) GetMetadata() *RequireStorageProcessedMetadataByIdFields_StorageMetadata { if x != nil { - return x.Name + return x.Metadata } - return "" + return nil } -type ActionInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` +type RequireStorageOptionalProcessedMetadataByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageOptionalProcessedMetadataByIdContext provides the context for the required fields method RequireStorageOptionalProcessedMetadataById. + Context []*RequireStorageOptionalProcessedMetadataByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ActionInput) Reset() { - *x = ActionInput{} - mi := &file_product_proto_msgTypes[229] +func (x *RequireStorageOptionalProcessedMetadataByIdRequest) Reset() { + *x = RequireStorageOptionalProcessedMetadataByIdRequest{} + mi := &file_product_proto_msgTypes[245] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ActionInput) String() string { +func (x *RequireStorageOptionalProcessedMetadataByIdRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ActionInput) ProtoMessage() {} +func (*RequireStorageOptionalProcessedMetadataByIdRequest) ProtoMessage() {} -func (x *ActionInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[229] +func (x *RequireStorageOptionalProcessedMetadataByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[245] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11323,51 +11456,41 @@ func (x *ActionInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ActionInput.ProtoReflect.Descriptor instead. -func (*ActionInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{229} -} - -func (x *ActionInput) GetType() string { - if x != nil { - return x.Type - } - return "" +// Deprecated: Use RequireStorageOptionalProcessedMetadataByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedMetadataByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{245} } -func (x *ActionInput) GetPayload() string { +func (x *RequireStorageOptionalProcessedMetadataByIdRequest) GetContext() []*RequireStorageOptionalProcessedMetadataByIdContext { if x != nil { - return x.Payload + return x.Context } - return "" + return nil } -type ActionResult struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Types that are valid to be assigned to Value: - // - // *ActionResult_ActionSuccess - // *ActionResult_ActionError - Value isActionResult_Value `protobuf_oneof:"value"` +type RequireStorageOptionalProcessedMetadataByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageOptionalProcessedMetadataByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ActionResult) Reset() { - *x = ActionResult{} - mi := &file_product_proto_msgTypes[230] +func (x *RequireStorageOptionalProcessedMetadataByIdContext) Reset() { + *x = RequireStorageOptionalProcessedMetadataByIdContext{} + mi := &file_product_proto_msgTypes[246] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ActionResult) String() string { +func (x *RequireStorageOptionalProcessedMetadataByIdContext) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ActionResult) ProtoMessage() {} +func (*RequireStorageOptionalProcessedMetadataByIdContext) ProtoMessage() {} -func (x *ActionResult) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[230] +func (x *RequireStorageOptionalProcessedMetadataByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[246] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11378,80 +11501,3474 @@ func (x *ActionResult) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ActionResult.ProtoReflect.Descriptor instead. -func (*ActionResult) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{230} +// Deprecated: Use RequireStorageOptionalProcessedMetadataByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedMetadataByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{246} } -func (x *ActionResult) GetValue() isActionResult_Value { +func (x *RequireStorageOptionalProcessedMetadataByIdContext) GetKey() *LookupStorageByIdRequestKey { if x != nil { - return x.Value + return x.Key } return nil } -func (x *ActionResult) GetActionSuccess() *ActionSuccess { +func (x *RequireStorageOptionalProcessedMetadataByIdContext) GetFields() *RequireStorageOptionalProcessedMetadataByIdFields { if x != nil { - if x, ok := x.Value.(*ActionResult_ActionSuccess); ok { - return x.ActionSuccess - } + return x.Fields } return nil } -func (x *ActionResult) GetActionError() *ActionError { +type RequireStorageOptionalProcessedMetadataByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageOptionalProcessedMetadataByIdResult provides the result for the required fields method RequireStorageOptionalProcessedMetadataById. + Result []*RequireStorageOptionalProcessedMetadataByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedMetadataByIdResponse) Reset() { + *x = RequireStorageOptionalProcessedMetadataByIdResponse{} + mi := &file_product_proto_msgTypes[247] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedMetadataByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedMetadataByIdResponse) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedMetadataByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[247] if x != nil { - if x, ok := x.Value.(*ActionResult_ActionError); ok { - return x.ActionError + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedMetadataByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedMetadataByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{247} +} + +func (x *RequireStorageOptionalProcessedMetadataByIdResponse) GetResult() []*RequireStorageOptionalProcessedMetadataByIdResult { + if x != nil { + return x.Result } return nil } -type isActionResult_Value interface { - isActionResult_Value() +type RequireStorageOptionalProcessedMetadataByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionalProcessedMetadata *StorageMetadata `protobuf:"bytes,1,opt,name=optional_processed_metadata,json=optionalProcessedMetadata,proto3" json:"optional_processed_metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type ActionResult_ActionSuccess struct { - ActionSuccess *ActionSuccess `protobuf:"bytes,1,opt,name=action_success,json=actionSuccess,proto3,oneof"` +func (x *RequireStorageOptionalProcessedMetadataByIdResult) Reset() { + *x = RequireStorageOptionalProcessedMetadataByIdResult{} + mi := &file_product_proto_msgTypes[248] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type ActionResult_ActionError struct { - ActionError *ActionError `protobuf:"bytes,2,opt,name=action_error,json=actionError,proto3,oneof"` +func (x *RequireStorageOptionalProcessedMetadataByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*ActionResult_ActionSuccess) isActionResult_Value() {} +func (*RequireStorageOptionalProcessedMetadataByIdResult) ProtoMessage() {} -func (*ActionResult_ActionError) isActionResult_Value() {} +func (x *RequireStorageOptionalProcessedMetadataByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[248] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedMetadataByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedMetadataByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{248} +} + +func (x *RequireStorageOptionalProcessedMetadataByIdResult) GetOptionalProcessedMetadata() *StorageMetadata { + if x != nil { + return x.OptionalProcessedMetadata + } + return nil +} + +type RequireStorageOptionalProcessedMetadataByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + Metadata *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedMetadataByIdFields) Reset() { + *x = RequireStorageOptionalProcessedMetadataByIdFields{} + mi := &file_product_proto_msgTypes[249] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedMetadataByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedMetadataByIdFields) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedMetadataByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[249] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedMetadataByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedMetadataByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{249} +} + +func (x *RequireStorageOptionalProcessedMetadataByIdFields) GetMetadata() *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +type RequireStorageProcessedTagsByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageProcessedTagsByIdContext provides the context for the required fields method RequireStorageProcessedTagsById. + Context []*RequireStorageProcessedTagsByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedTagsByIdRequest) Reset() { + *x = RequireStorageProcessedTagsByIdRequest{} + mi := &file_product_proto_msgTypes[250] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedTagsByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedTagsByIdRequest) ProtoMessage() {} + +func (x *RequireStorageProcessedTagsByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[250] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedTagsByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedTagsByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{250} +} + +func (x *RequireStorageProcessedTagsByIdRequest) GetContext() []*RequireStorageProcessedTagsByIdContext { + if x != nil { + return x.Context + } + return nil +} + +type RequireStorageProcessedTagsByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageProcessedTagsByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedTagsByIdContext) Reset() { + *x = RequireStorageProcessedTagsByIdContext{} + mi := &file_product_proto_msgTypes[251] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedTagsByIdContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedTagsByIdContext) ProtoMessage() {} + +func (x *RequireStorageProcessedTagsByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[251] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedTagsByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedTagsByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{251} +} + +func (x *RequireStorageProcessedTagsByIdContext) GetKey() *LookupStorageByIdRequestKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *RequireStorageProcessedTagsByIdContext) GetFields() *RequireStorageProcessedTagsByIdFields { + if x != nil { + return x.Fields + } + return nil +} + +type RequireStorageProcessedTagsByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageProcessedTagsByIdResult provides the result for the required fields method RequireStorageProcessedTagsById. + Result []*RequireStorageProcessedTagsByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedTagsByIdResponse) Reset() { + *x = RequireStorageProcessedTagsByIdResponse{} + mi := &file_product_proto_msgTypes[252] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedTagsByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedTagsByIdResponse) ProtoMessage() {} + +func (x *RequireStorageProcessedTagsByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[252] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedTagsByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedTagsByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{252} +} + +func (x *RequireStorageProcessedTagsByIdResponse) GetResult() []*RequireStorageProcessedTagsByIdResult { + if x != nil { + return x.Result + } + return nil +} + +type RequireStorageProcessedTagsByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProcessedTags []string `protobuf:"bytes,1,rep,name=processed_tags,json=processedTags,proto3" json:"processed_tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedTagsByIdResult) Reset() { + *x = RequireStorageProcessedTagsByIdResult{} + mi := &file_product_proto_msgTypes[253] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedTagsByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedTagsByIdResult) ProtoMessage() {} + +func (x *RequireStorageProcessedTagsByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[253] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedTagsByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedTagsByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{253} +} + +func (x *RequireStorageProcessedTagsByIdResult) GetProcessedTags() []string { + if x != nil { + return x.ProcessedTags + } + return nil +} + +type RequireStorageProcessedTagsByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedTagsByIdFields) Reset() { + *x = RequireStorageProcessedTagsByIdFields{} + mi := &file_product_proto_msgTypes[254] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedTagsByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedTagsByIdFields) ProtoMessage() {} + +func (x *RequireStorageProcessedTagsByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[254] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedTagsByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedTagsByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{254} +} + +func (x *RequireStorageProcessedTagsByIdFields) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +type RequireStorageOptionalProcessedTagsByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageOptionalProcessedTagsByIdContext provides the context for the required fields method RequireStorageOptionalProcessedTagsById. + Context []*RequireStorageOptionalProcessedTagsByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedTagsByIdRequest) Reset() { + *x = RequireStorageOptionalProcessedTagsByIdRequest{} + mi := &file_product_proto_msgTypes[255] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedTagsByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedTagsByIdRequest) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedTagsByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[255] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedTagsByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedTagsByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{255} +} + +func (x *RequireStorageOptionalProcessedTagsByIdRequest) GetContext() []*RequireStorageOptionalProcessedTagsByIdContext { + if x != nil { + return x.Context + } + return nil +} + +type RequireStorageOptionalProcessedTagsByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageOptionalProcessedTagsByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedTagsByIdContext) Reset() { + *x = RequireStorageOptionalProcessedTagsByIdContext{} + mi := &file_product_proto_msgTypes[256] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedTagsByIdContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedTagsByIdContext) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedTagsByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[256] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedTagsByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedTagsByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{256} +} + +func (x *RequireStorageOptionalProcessedTagsByIdContext) GetKey() *LookupStorageByIdRequestKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *RequireStorageOptionalProcessedTagsByIdContext) GetFields() *RequireStorageOptionalProcessedTagsByIdFields { + if x != nil { + return x.Fields + } + return nil +} + +type RequireStorageOptionalProcessedTagsByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageOptionalProcessedTagsByIdResult provides the result for the required fields method RequireStorageOptionalProcessedTagsById. + Result []*RequireStorageOptionalProcessedTagsByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedTagsByIdResponse) Reset() { + *x = RequireStorageOptionalProcessedTagsByIdResponse{} + mi := &file_product_proto_msgTypes[257] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedTagsByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedTagsByIdResponse) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedTagsByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[257] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedTagsByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedTagsByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{257} +} + +func (x *RequireStorageOptionalProcessedTagsByIdResponse) GetResult() []*RequireStorageOptionalProcessedTagsByIdResult { + if x != nil { + return x.Result + } + return nil +} + +type RequireStorageOptionalProcessedTagsByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionalProcessedTags *ListOfString `protobuf:"bytes,1,opt,name=optional_processed_tags,json=optionalProcessedTags,proto3" json:"optional_processed_tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedTagsByIdResult) Reset() { + *x = RequireStorageOptionalProcessedTagsByIdResult{} + mi := &file_product_proto_msgTypes[258] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedTagsByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedTagsByIdResult) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedTagsByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[258] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedTagsByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedTagsByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{258} +} + +func (x *RequireStorageOptionalProcessedTagsByIdResult) GetOptionalProcessedTags() *ListOfString { + if x != nil { + return x.OptionalProcessedTags + } + return nil +} + +type RequireStorageOptionalProcessedTagsByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionalTags *ListOfString `protobuf:"bytes,1,opt,name=optional_tags,json=optionalTags,proto3" json:"optional_tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageOptionalProcessedTagsByIdFields) Reset() { + *x = RequireStorageOptionalProcessedTagsByIdFields{} + mi := &file_product_proto_msgTypes[259] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageOptionalProcessedTagsByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageOptionalProcessedTagsByIdFields) ProtoMessage() {} + +func (x *RequireStorageOptionalProcessedTagsByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[259] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageOptionalProcessedTagsByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedTagsByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{259} +} + +func (x *RequireStorageOptionalProcessedTagsByIdFields) GetOptionalTags() *ListOfString { + if x != nil { + return x.OptionalTags + } + return nil +} + +type RequireStorageProcessedMetadataHistoryByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageProcessedMetadataHistoryByIdContext provides the context for the required fields method RequireStorageProcessedMetadataHistoryById. + Context []*RequireStorageProcessedMetadataHistoryByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataHistoryByIdRequest) Reset() { + *x = RequireStorageProcessedMetadataHistoryByIdRequest{} + mi := &file_product_proto_msgTypes[260] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataHistoryByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataHistoryByIdRequest) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataHistoryByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[260] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedMetadataHistoryByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataHistoryByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{260} +} + +func (x *RequireStorageProcessedMetadataHistoryByIdRequest) GetContext() []*RequireStorageProcessedMetadataHistoryByIdContext { + if x != nil { + return x.Context + } + return nil +} + +type RequireStorageProcessedMetadataHistoryByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupStorageByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireStorageProcessedMetadataHistoryByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataHistoryByIdContext) Reset() { + *x = RequireStorageProcessedMetadataHistoryByIdContext{} + mi := &file_product_proto_msgTypes[261] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataHistoryByIdContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataHistoryByIdContext) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataHistoryByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[261] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedMetadataHistoryByIdContext.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataHistoryByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{261} +} + +func (x *RequireStorageProcessedMetadataHistoryByIdContext) GetKey() *LookupStorageByIdRequestKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *RequireStorageProcessedMetadataHistoryByIdContext) GetFields() *RequireStorageProcessedMetadataHistoryByIdFields { + if x != nil { + return x.Fields + } + return nil +} + +type RequireStorageProcessedMetadataHistoryByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireStorageProcessedMetadataHistoryByIdResult provides the result for the required fields method RequireStorageProcessedMetadataHistoryById. + Result []*RequireStorageProcessedMetadataHistoryByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataHistoryByIdResponse) Reset() { + *x = RequireStorageProcessedMetadataHistoryByIdResponse{} + mi := &file_product_proto_msgTypes[262] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataHistoryByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataHistoryByIdResponse) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataHistoryByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[262] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedMetadataHistoryByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataHistoryByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{262} +} + +func (x *RequireStorageProcessedMetadataHistoryByIdResponse) GetResult() []*RequireStorageProcessedMetadataHistoryByIdResult { + if x != nil { + return x.Result + } + return nil +} + +type RequireStorageProcessedMetadataHistoryByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProcessedMetadataHistory []*StorageMetadata `protobuf:"bytes,1,rep,name=processed_metadata_history,json=processedMetadataHistory,proto3" json:"processed_metadata_history,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataHistoryByIdResult) Reset() { + *x = RequireStorageProcessedMetadataHistoryByIdResult{} + mi := &file_product_proto_msgTypes[263] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataHistoryByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataHistoryByIdResult) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataHistoryByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[263] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedMetadataHistoryByIdResult.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataHistoryByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{263} +} + +func (x *RequireStorageProcessedMetadataHistoryByIdResult) GetProcessedMetadataHistory() []*StorageMetadata { + if x != nil { + return x.ProcessedMetadataHistory + } + return nil +} + +type RequireStorageProcessedMetadataHistoryByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + MetadataHistory []*RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata `protobuf:"bytes,1,rep,name=metadata_history,json=metadataHistory,proto3" json:"metadata_history,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireStorageProcessedMetadataHistoryByIdFields) Reset() { + *x = RequireStorageProcessedMetadataHistoryByIdFields{} + mi := &file_product_proto_msgTypes[264] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireStorageProcessedMetadataHistoryByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireStorageProcessedMetadataHistoryByIdFields) ProtoMessage() {} + +func (x *RequireStorageProcessedMetadataHistoryByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[264] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireStorageProcessedMetadataHistoryByIdFields.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataHistoryByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{264} +} + +func (x *RequireStorageProcessedMetadataHistoryByIdFields) GetMetadataHistory() []*RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata { + if x != nil { + return x.MetadataHistory + } + return nil +} + +type RequireWarehouseStockHealthScoreByIdRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireWarehouseStockHealthScoreByIdContext provides the context for the required fields method RequireWarehouseStockHealthScoreById. + Context []*RequireWarehouseStockHealthScoreByIdContext `protobuf:"bytes,1,rep,name=context,proto3" json:"context,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireWarehouseStockHealthScoreByIdRequest) Reset() { + *x = RequireWarehouseStockHealthScoreByIdRequest{} + mi := &file_product_proto_msgTypes[265] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireWarehouseStockHealthScoreByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireWarehouseStockHealthScoreByIdRequest) ProtoMessage() {} + +func (x *RequireWarehouseStockHealthScoreByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[265] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireWarehouseStockHealthScoreByIdRequest.ProtoReflect.Descriptor instead. +func (*RequireWarehouseStockHealthScoreByIdRequest) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{265} +} + +func (x *RequireWarehouseStockHealthScoreByIdRequest) GetContext() []*RequireWarehouseStockHealthScoreByIdContext { + if x != nil { + return x.Context + } + return nil +} + +type RequireWarehouseStockHealthScoreByIdContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *LookupWarehouseByIdRequestKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Fields *RequireWarehouseStockHealthScoreByIdFields `protobuf:"bytes,2,opt,name=fields,proto3" json:"fields,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireWarehouseStockHealthScoreByIdContext) Reset() { + *x = RequireWarehouseStockHealthScoreByIdContext{} + mi := &file_product_proto_msgTypes[266] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireWarehouseStockHealthScoreByIdContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireWarehouseStockHealthScoreByIdContext) ProtoMessage() {} + +func (x *RequireWarehouseStockHealthScoreByIdContext) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[266] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireWarehouseStockHealthScoreByIdContext.ProtoReflect.Descriptor instead. +func (*RequireWarehouseStockHealthScoreByIdContext) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{266} +} + +func (x *RequireWarehouseStockHealthScoreByIdContext) GetKey() *LookupWarehouseByIdRequestKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *RequireWarehouseStockHealthScoreByIdContext) GetFields() *RequireWarehouseStockHealthScoreByIdFields { + if x != nil { + return x.Fields + } + return nil +} + +type RequireWarehouseStockHealthScoreByIdResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // RequireWarehouseStockHealthScoreByIdResult provides the result for the required fields method RequireWarehouseStockHealthScoreById. + Result []*RequireWarehouseStockHealthScoreByIdResult `protobuf:"bytes,1,rep,name=result,proto3" json:"result,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireWarehouseStockHealthScoreByIdResponse) Reset() { + *x = RequireWarehouseStockHealthScoreByIdResponse{} + mi := &file_product_proto_msgTypes[267] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireWarehouseStockHealthScoreByIdResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireWarehouseStockHealthScoreByIdResponse) ProtoMessage() {} + +func (x *RequireWarehouseStockHealthScoreByIdResponse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[267] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireWarehouseStockHealthScoreByIdResponse.ProtoReflect.Descriptor instead. +func (*RequireWarehouseStockHealthScoreByIdResponse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{267} +} + +func (x *RequireWarehouseStockHealthScoreByIdResponse) GetResult() []*RequireWarehouseStockHealthScoreByIdResult { + if x != nil { + return x.Result + } + return nil +} + +type RequireWarehouseStockHealthScoreByIdResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + StockHealthScore float64 `protobuf:"fixed64,1,opt,name=stock_health_score,json=stockHealthScore,proto3" json:"stock_health_score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireWarehouseStockHealthScoreByIdResult) Reset() { + *x = RequireWarehouseStockHealthScoreByIdResult{} + mi := &file_product_proto_msgTypes[268] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireWarehouseStockHealthScoreByIdResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireWarehouseStockHealthScoreByIdResult) ProtoMessage() {} + +func (x *RequireWarehouseStockHealthScoreByIdResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[268] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireWarehouseStockHealthScoreByIdResult.ProtoReflect.Descriptor instead. +func (*RequireWarehouseStockHealthScoreByIdResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{268} +} + +func (x *RequireWarehouseStockHealthScoreByIdResult) GetStockHealthScore() float64 { + if x != nil { + return x.StockHealthScore + } + return 0 +} + +type RequireWarehouseStockHealthScoreByIdFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + InventoryCount int32 `protobuf:"varint,1,opt,name=inventory_count,json=inventoryCount,proto3" json:"inventory_count,omitempty"` + RestockData *RequireWarehouseStockHealthScoreByIdFields_RestockData `protobuf:"bytes,2,opt,name=restock_data,json=restockData,proto3" json:"restock_data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireWarehouseStockHealthScoreByIdFields) Reset() { + *x = RequireWarehouseStockHealthScoreByIdFields{} + mi := &file_product_proto_msgTypes[269] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RequireWarehouseStockHealthScoreByIdFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequireWarehouseStockHealthScoreByIdFields) ProtoMessage() {} + +func (x *RequireWarehouseStockHealthScoreByIdFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[269] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RequireWarehouseStockHealthScoreByIdFields.ProtoReflect.Descriptor instead. +func (*RequireWarehouseStockHealthScoreByIdFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{269} +} + +func (x *RequireWarehouseStockHealthScoreByIdFields) GetInventoryCount() int32 { + if x != nil { + return x.InventoryCount + } + return 0 +} + +func (x *RequireWarehouseStockHealthScoreByIdFields) GetRestockData() *RequireWarehouseStockHealthScoreByIdFields_RestockData { + if x != nil { + return x.RestockData + } + return nil +} + +type Product struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Price float64 `protobuf:"fixed64,3,opt,name=price,proto3" json:"price,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Product) Reset() { + *x = Product{} + mi := &file_product_proto_msgTypes[270] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Product) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Product) ProtoMessage() {} + +func (x *Product) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[270] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Product.ProtoReflect.Descriptor instead. +func (*Product) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{270} +} + +func (x *Product) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Product) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Product) GetPrice() float64 { + if x != nil { + return x.Price + } + return 0 +} + +type Storage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Storage) Reset() { + *x = Storage{} + mi := &file_product_proto_msgTypes[271] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Storage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Storage) ProtoMessage() {} + +func (x *Storage) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[271] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Storage.ProtoReflect.Descriptor instead. +func (*Storage) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{271} +} + +func (x *Storage) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Storage) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Storage) GetLocation() string { + if x != nil { + return x.Location + } + return "" +} + +type Warehouse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Location string `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Warehouse) Reset() { + *x = Warehouse{} + mi := &file_product_proto_msgTypes[272] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Warehouse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Warehouse) ProtoMessage() {} + +func (x *Warehouse) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[272] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Warehouse.ProtoReflect.Descriptor instead. +func (*Warehouse) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{272} +} + +func (x *Warehouse) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Warehouse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Warehouse) GetLocation() string { + if x != nil { + return x.Location + } + return "" +} + +type User struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *User) Reset() { + *x = User{} + mi := &file_product_proto_msgTypes[273] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *User) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*User) ProtoMessage() {} + +func (x *User) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[273] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use User.ProtoReflect.Descriptor instead. +func (*User) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{273} +} + +func (x *User) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *User) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type NestedTypeA struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + B *NestedTypeB `protobuf:"bytes,3,opt,name=b,proto3" json:"b,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NestedTypeA) Reset() { + *x = NestedTypeA{} + mi := &file_product_proto_msgTypes[274] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NestedTypeA) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NestedTypeA) ProtoMessage() {} + +func (x *NestedTypeA) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[274] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NestedTypeA.ProtoReflect.Descriptor instead. +func (*NestedTypeA) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{274} +} + +func (x *NestedTypeA) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NestedTypeA) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NestedTypeA) GetB() *NestedTypeB { + if x != nil { + return x.B + } + return nil +} + +type RecursiveType struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + RecursiveType *RecursiveType `protobuf:"bytes,3,opt,name=recursive_type,json=recursiveType,proto3" json:"recursive_type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RecursiveType) Reset() { + *x = RecursiveType{} + mi := &file_product_proto_msgTypes[275] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RecursiveType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecursiveType) ProtoMessage() {} + +func (x *RecursiveType) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[275] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecursiveType.ProtoReflect.Descriptor instead. +func (*RecursiveType) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{275} +} + +func (x *RecursiveType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RecursiveType) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RecursiveType) GetRecursiveType() *RecursiveType { + if x != nil { + return x.RecursiveType + } + return nil +} + +type TypeWithMultipleFilterFields struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + FilterField_1 string `protobuf:"bytes,3,opt,name=filter_field_1,json=filterField1,proto3" json:"filter_field_1,omitempty"` + FilterField_2 string `protobuf:"bytes,4,opt,name=filter_field_2,json=filterField2,proto3" json:"filter_field_2,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TypeWithMultipleFilterFields) Reset() { + *x = TypeWithMultipleFilterFields{} + mi := &file_product_proto_msgTypes[276] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TypeWithMultipleFilterFields) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypeWithMultipleFilterFields) ProtoMessage() {} + +func (x *TypeWithMultipleFilterFields) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[276] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TypeWithMultipleFilterFields.ProtoReflect.Descriptor instead. +func (*TypeWithMultipleFilterFields) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{276} +} + +func (x *TypeWithMultipleFilterFields) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TypeWithMultipleFilterFields) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TypeWithMultipleFilterFields) GetFilterField_1() string { + if x != nil { + return x.FilterField_1 + } + return "" +} + +func (x *TypeWithMultipleFilterFields) GetFilterField_2() string { + if x != nil { + return x.FilterField_2 + } + return "" +} + +type FilterTypeInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + FilterField_1 string `protobuf:"bytes,1,opt,name=filter_field_1,json=filterField1,proto3" json:"filter_field_1,omitempty"` + FilterField_2 string `protobuf:"bytes,2,opt,name=filter_field_2,json=filterField2,proto3" json:"filter_field_2,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FilterTypeInput) Reset() { + *x = FilterTypeInput{} + mi := &file_product_proto_msgTypes[277] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FilterTypeInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FilterTypeInput) ProtoMessage() {} + +func (x *FilterTypeInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[277] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FilterTypeInput.ProtoReflect.Descriptor instead. +func (*FilterTypeInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{277} +} + +func (x *FilterTypeInput) GetFilterField_1() string { + if x != nil { + return x.FilterField_1 + } + return "" +} + +func (x *FilterTypeInput) GetFilterField_2() string { + if x != nil { + return x.FilterField_2 + } + return "" +} + +type ComplexFilterTypeInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filter *FilterType `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ComplexFilterTypeInput) Reset() { + *x = ComplexFilterTypeInput{} + mi := &file_product_proto_msgTypes[278] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ComplexFilterTypeInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ComplexFilterTypeInput) ProtoMessage() {} + +func (x *ComplexFilterTypeInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[278] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ComplexFilterTypeInput.ProtoReflect.Descriptor instead. +func (*ComplexFilterTypeInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{278} +} + +func (x *ComplexFilterTypeInput) GetFilter() *FilterType { + if x != nil { + return x.Filter + } + return nil +} + +type TypeWithComplexFilterInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TypeWithComplexFilterInput) Reset() { + *x = TypeWithComplexFilterInput{} + mi := &file_product_proto_msgTypes[279] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TypeWithComplexFilterInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypeWithComplexFilterInput) ProtoMessage() {} + +func (x *TypeWithComplexFilterInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[279] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TypeWithComplexFilterInput.ProtoReflect.Descriptor instead. +func (*TypeWithComplexFilterInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{279} +} + +func (x *TypeWithComplexFilterInput) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TypeWithComplexFilterInput) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type OrderInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + CustomerName string `protobuf:"bytes,2,opt,name=customer_name,json=customerName,proto3" json:"customer_name,omitempty"` + Lines []*OrderLineInput `protobuf:"bytes,3,rep,name=lines,proto3" json:"lines,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OrderInput) Reset() { + *x = OrderInput{} + mi := &file_product_proto_msgTypes[280] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OrderInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OrderInput) ProtoMessage() {} + +func (x *OrderInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[280] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OrderInput.ProtoReflect.Descriptor instead. +func (*OrderInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{280} +} + +func (x *OrderInput) GetOrderId() string { + if x != nil { + return x.OrderId + } + return "" +} + +func (x *OrderInput) GetCustomerName() string { + if x != nil { + return x.CustomerName + } + return "" +} + +func (x *OrderInput) GetLines() []*OrderLineInput { + if x != nil { + return x.Lines + } + return nil +} + +type Order struct { + state protoimpl.MessageState `protogen:"open.v1"` + OrderId string `protobuf:"bytes,1,opt,name=order_id,json=orderId,proto3" json:"order_id,omitempty"` + CustomerName string `protobuf:"bytes,2,opt,name=customer_name,json=customerName,proto3" json:"customer_name,omitempty"` + TotalItems int32 `protobuf:"varint,3,opt,name=total_items,json=totalItems,proto3" json:"total_items,omitempty"` + OrderLines *ListOfOrderLine `protobuf:"bytes,4,opt,name=order_lines,json=orderLines,proto3" json:"order_lines,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Order) Reset() { + *x = Order{} + mi := &file_product_proto_msgTypes[281] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Order) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Order) ProtoMessage() {} + +func (x *Order) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[281] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Order.ProtoReflect.Descriptor instead. +func (*Order) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{281} +} + +func (x *Order) GetOrderId() string { + if x != nil { + return x.OrderId + } + return "" +} + +func (x *Order) GetCustomerName() string { + if x != nil { + return x.CustomerName + } + return "" +} + +func (x *Order) GetTotalItems() int32 { + if x != nil { + return x.TotalItems + } + return 0 +} + +func (x *Order) GetOrderLines() *ListOfOrderLine { + if x != nil { + return x.OrderLines + } + return nil +} + +type Category struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Kind CategoryKind `protobuf:"varint,3,opt,name=kind,proto3,enum=productv1.CategoryKind" json:"kind,omitempty"` + Subcategories *ListOfSubcategory `protobuf:"bytes,4,opt,name=subcategories,proto3" json:"subcategories,omitempty"` + NullMetrics *CategoryMetrics `protobuf:"bytes,5,opt,name=null_metrics,json=nullMetrics,proto3" json:"null_metrics,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Category) Reset() { + *x = Category{} + mi := &file_product_proto_msgTypes[282] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Category) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Category) ProtoMessage() {} + +func (x *Category) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[282] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Category.ProtoReflect.Descriptor instead. +func (*Category) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{282} +} + +func (x *Category) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Category) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Category) GetKind() CategoryKind { + if x != nil { + return x.Kind + } + return CategoryKind_CATEGORY_KIND_UNSPECIFIED +} + +func (x *Category) GetSubcategories() *ListOfSubcategory { + if x != nil { + return x.Subcategories + } + return nil +} + +func (x *Category) GetNullMetrics() *CategoryMetrics { + if x != nil { + return x.NullMetrics + } + return nil +} + +type CategoryFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + Category CategoryKind `protobuf:"varint,1,opt,name=category,proto3,enum=productv1.CategoryKind" json:"category,omitempty"` + Pagination *Pagination `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CategoryFilter) Reset() { + *x = CategoryFilter{} + mi := &file_product_proto_msgTypes[283] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CategoryFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CategoryFilter) ProtoMessage() {} + +func (x *CategoryFilter) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[283] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CategoryFilter.ProtoReflect.Descriptor instead. +func (*CategoryFilter) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{283} +} + +func (x *CategoryFilter) GetCategory() CategoryKind { + if x != nil { + return x.Category + } + return CategoryKind_CATEGORY_KIND_UNSPECIFIED +} + +func (x *CategoryFilter) GetPagination() *Pagination { + if x != nil { + return x.Pagination + } + return nil +} + +type Animal struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Instance: + // + // *Animal_Cat + // *Animal_Dog + Instance isAnimal_Instance `protobuf_oneof:"instance"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Animal) Reset() { + *x = Animal{} + mi := &file_product_proto_msgTypes[284] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Animal) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Animal) ProtoMessage() {} + +func (x *Animal) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[284] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Animal.ProtoReflect.Descriptor instead. +func (*Animal) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{284} +} + +func (x *Animal) GetInstance() isAnimal_Instance { + if x != nil { + return x.Instance + } + return nil +} + +func (x *Animal) GetCat() *Cat { + if x != nil { + if x, ok := x.Instance.(*Animal_Cat); ok { + return x.Cat + } + } + return nil +} + +func (x *Animal) GetDog() *Dog { + if x != nil { + if x, ok := x.Instance.(*Animal_Dog); ok { + return x.Dog + } + } + return nil +} + +type isAnimal_Instance interface { + isAnimal_Instance() +} + +type Animal_Cat struct { + Cat *Cat `protobuf:"bytes,1,opt,name=cat,proto3,oneof"` +} + +type Animal_Dog struct { + Dog *Dog `protobuf:"bytes,2,opt,name=dog,proto3,oneof"` +} + +func (*Animal_Cat) isAnimal_Instance() {} + +func (*Animal_Dog) isAnimal_Instance() {} + +type SearchInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + Limit *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SearchInput) Reset() { + *x = SearchInput{} + mi := &file_product_proto_msgTypes[285] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SearchInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchInput) ProtoMessage() {} + +func (x *SearchInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[285] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchInput.ProtoReflect.Descriptor instead. +func (*SearchInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{285} +} + +func (x *SearchInput) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *SearchInput) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +type SearchResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Value: + // + // *SearchResult_Product + // *SearchResult_User + // *SearchResult_Category + Value isSearchResult_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SearchResult) Reset() { + *x = SearchResult{} + mi := &file_product_proto_msgTypes[286] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SearchResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SearchResult) ProtoMessage() {} + +func (x *SearchResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[286] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SearchResult.ProtoReflect.Descriptor instead. +func (*SearchResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{286} +} + +func (x *SearchResult) GetValue() isSearchResult_Value { + if x != nil { + return x.Value + } + return nil +} + +func (x *SearchResult) GetProduct() *Product { + if x != nil { + if x, ok := x.Value.(*SearchResult_Product); ok { + return x.Product + } + } + return nil +} + +func (x *SearchResult) GetUser() *User { + if x != nil { + if x, ok := x.Value.(*SearchResult_User); ok { + return x.User + } + } + return nil +} + +func (x *SearchResult) GetCategory() *Category { + if x != nil { + if x, ok := x.Value.(*SearchResult_Category); ok { + return x.Category + } + } + return nil +} + +type isSearchResult_Value interface { + isSearchResult_Value() +} + +type SearchResult_Product struct { + Product *Product `protobuf:"bytes,1,opt,name=product,proto3,oneof"` +} + +type SearchResult_User struct { + User *User `protobuf:"bytes,2,opt,name=user,proto3,oneof"` +} + +type SearchResult_Category struct { + Category *Category `protobuf:"bytes,3,opt,name=category,proto3,oneof"` +} + +func (*SearchResult_Product) isSearchResult_Value() {} + +func (*SearchResult_User) isSearchResult_Value() {} + +func (*SearchResult_Category) isSearchResult_Value() {} + +type NullableFieldsType struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + OptionalString *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"` + OptionalInt *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=optional_int,json=optionalInt,proto3" json:"optional_int,omitempty"` + OptionalFloat *wrapperspb.DoubleValue `protobuf:"bytes,5,opt,name=optional_float,json=optionalFloat,proto3" json:"optional_float,omitempty"` + OptionalBoolean *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=optional_boolean,json=optionalBoolean,proto3" json:"optional_boolean,omitempty"` + RequiredString string `protobuf:"bytes,7,opt,name=required_string,json=requiredString,proto3" json:"required_string,omitempty"` + RequiredInt int32 `protobuf:"varint,8,opt,name=required_int,json=requiredInt,proto3" json:"required_int,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NullableFieldsType) Reset() { + *x = NullableFieldsType{} + mi := &file_product_proto_msgTypes[287] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NullableFieldsType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NullableFieldsType) ProtoMessage() {} + +func (x *NullableFieldsType) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[287] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NullableFieldsType.ProtoReflect.Descriptor instead. +func (*NullableFieldsType) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{287} +} + +func (x *NullableFieldsType) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *NullableFieldsType) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NullableFieldsType) GetOptionalString() *wrapperspb.StringValue { + if x != nil { + return x.OptionalString + } + return nil +} + +func (x *NullableFieldsType) GetOptionalInt() *wrapperspb.Int32Value { + if x != nil { + return x.OptionalInt + } + return nil +} + +func (x *NullableFieldsType) GetOptionalFloat() *wrapperspb.DoubleValue { + if x != nil { + return x.OptionalFloat + } + return nil +} + +func (x *NullableFieldsType) GetOptionalBoolean() *wrapperspb.BoolValue { + if x != nil { + return x.OptionalBoolean + } + return nil +} + +func (x *NullableFieldsType) GetRequiredString() string { + if x != nil { + return x.RequiredString + } + return "" +} + +func (x *NullableFieldsType) GetRequiredInt() int32 { + if x != nil { + return x.RequiredInt + } + return 0 +} + +type NullableFieldsFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + OptionalString *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"` + IncludeNulls *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=include_nulls,json=includeNulls,proto3" json:"include_nulls,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NullableFieldsFilter) Reset() { + *x = NullableFieldsFilter{} + mi := &file_product_proto_msgTypes[288] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NullableFieldsFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NullableFieldsFilter) ProtoMessage() {} + +func (x *NullableFieldsFilter) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[288] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NullableFieldsFilter.ProtoReflect.Descriptor instead. +func (*NullableFieldsFilter) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{288} +} + +func (x *NullableFieldsFilter) GetName() *wrapperspb.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *NullableFieldsFilter) GetOptionalString() *wrapperspb.StringValue { + if x != nil { + return x.OptionalString + } + return nil +} + +func (x *NullableFieldsFilter) GetIncludeNulls() *wrapperspb.BoolValue { + if x != nil { + return x.IncludeNulls + } + return nil +} + +type BlogPost struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` + Tags []string `protobuf:"bytes,4,rep,name=tags,proto3" json:"tags,omitempty"` + OptionalTags *ListOfString `protobuf:"bytes,5,opt,name=optional_tags,json=optionalTags,proto3" json:"optional_tags,omitempty"` + Categories []string `protobuf:"bytes,6,rep,name=categories,proto3" json:"categories,omitempty"` + Keywords *ListOfString `protobuf:"bytes,7,opt,name=keywords,proto3" json:"keywords,omitempty"` + ViewCounts []int32 `protobuf:"varint,8,rep,packed,name=view_counts,json=viewCounts,proto3" json:"view_counts,omitempty"` + Ratings *ListOfFloat `protobuf:"bytes,9,opt,name=ratings,proto3" json:"ratings,omitempty"` + IsPublished *ListOfBoolean `protobuf:"bytes,10,opt,name=is_published,json=isPublished,proto3" json:"is_published,omitempty"` + TagGroups *ListOfListOfString `protobuf:"bytes,11,opt,name=tag_groups,json=tagGroups,proto3" json:"tag_groups,omitempty"` + RelatedTopics *ListOfListOfString `protobuf:"bytes,12,opt,name=related_topics,json=relatedTopics,proto3" json:"related_topics,omitempty"` + CommentThreads *ListOfListOfString `protobuf:"bytes,13,opt,name=comment_threads,json=commentThreads,proto3" json:"comment_threads,omitempty"` + Suggestions *ListOfListOfString `protobuf:"bytes,14,opt,name=suggestions,proto3" json:"suggestions,omitempty"` + RelatedCategories []*Category `protobuf:"bytes,15,rep,name=related_categories,json=relatedCategories,proto3" json:"related_categories,omitempty"` + Contributors []*User `protobuf:"bytes,16,rep,name=contributors,proto3" json:"contributors,omitempty"` + MentionedProducts *ListOfProduct `protobuf:"bytes,17,opt,name=mentioned_products,json=mentionedProducts,proto3" json:"mentioned_products,omitempty"` + MentionedUsers *ListOfUser `protobuf:"bytes,18,opt,name=mentioned_users,json=mentionedUsers,proto3" json:"mentioned_users,omitempty"` + CategoryGroups *ListOfListOfCategory `protobuf:"bytes,19,opt,name=category_groups,json=categoryGroups,proto3" json:"category_groups,omitempty"` + ContributorTeams *ListOfListOfUser `protobuf:"bytes,20,opt,name=contributor_teams,json=contributorTeams,proto3" json:"contributor_teams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlogPost) Reset() { + *x = BlogPost{} + mi := &file_product_proto_msgTypes[289] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlogPost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlogPost) ProtoMessage() {} + +func (x *BlogPost) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[289] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlogPost.ProtoReflect.Descriptor instead. +func (*BlogPost) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{289} +} + +func (x *BlogPost) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *BlogPost) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *BlogPost) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *BlogPost) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *BlogPost) GetOptionalTags() *ListOfString { + if x != nil { + return x.OptionalTags + } + return nil +} + +func (x *BlogPost) GetCategories() []string { + if x != nil { + return x.Categories + } + return nil +} + +func (x *BlogPost) GetKeywords() *ListOfString { + if x != nil { + return x.Keywords + } + return nil +} + +func (x *BlogPost) GetViewCounts() []int32 { + if x != nil { + return x.ViewCounts + } + return nil +} + +func (x *BlogPost) GetRatings() *ListOfFloat { + if x != nil { + return x.Ratings + } + return nil +} + +func (x *BlogPost) GetIsPublished() *ListOfBoolean { + if x != nil { + return x.IsPublished + } + return nil +} + +func (x *BlogPost) GetTagGroups() *ListOfListOfString { + if x != nil { + return x.TagGroups + } + return nil +} + +func (x *BlogPost) GetRelatedTopics() *ListOfListOfString { + if x != nil { + return x.RelatedTopics + } + return nil +} + +func (x *BlogPost) GetCommentThreads() *ListOfListOfString { + if x != nil { + return x.CommentThreads + } + return nil +} + +func (x *BlogPost) GetSuggestions() *ListOfListOfString { + if x != nil { + return x.Suggestions + } + return nil +} + +func (x *BlogPost) GetRelatedCategories() []*Category { + if x != nil { + return x.RelatedCategories + } + return nil +} + +func (x *BlogPost) GetContributors() []*User { + if x != nil { + return x.Contributors + } + return nil +} + +func (x *BlogPost) GetMentionedProducts() *ListOfProduct { + if x != nil { + return x.MentionedProducts + } + return nil +} + +func (x *BlogPost) GetMentionedUsers() *ListOfUser { + if x != nil { + return x.MentionedUsers + } + return nil +} + +func (x *BlogPost) GetCategoryGroups() *ListOfListOfCategory { + if x != nil { + return x.CategoryGroups + } + return nil +} + +func (x *BlogPost) GetContributorTeams() *ListOfListOfUser { + if x != nil { + return x.ContributorTeams + } + return nil +} + +type BlogPostFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + HasCategories *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=has_categories,json=hasCategories,proto3" json:"has_categories,omitempty"` + MinTags *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=min_tags,json=minTags,proto3" json:"min_tags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlogPostFilter) Reset() { + *x = BlogPostFilter{} + mi := &file_product_proto_msgTypes[290] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlogPostFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlogPostFilter) ProtoMessage() {} + +func (x *BlogPostFilter) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[290] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlogPostFilter.ProtoReflect.Descriptor instead. +func (*BlogPostFilter) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{290} +} + +func (x *BlogPostFilter) GetTitle() *wrapperspb.StringValue { + if x != nil { + return x.Title + } + return nil +} + +func (x *BlogPostFilter) GetHasCategories() *wrapperspb.BoolValue { + if x != nil { + return x.HasCategories + } + return nil +} + +func (x *BlogPostFilter) GetMinTags() *wrapperspb.Int32Value { + if x != nil { + return x.MinTags + } + return nil +} + +type Author struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Email *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + Skills []string `protobuf:"bytes,4,rep,name=skills,proto3" json:"skills,omitempty"` + Languages []string `protobuf:"bytes,5,rep,name=languages,proto3" json:"languages,omitempty"` + SocialLinks *ListOfString `protobuf:"bytes,6,opt,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty"` + TeamsByProject *ListOfListOfString `protobuf:"bytes,7,opt,name=teams_by_project,json=teamsByProject,proto3" json:"teams_by_project,omitempty"` + Collaborations *ListOfListOfString `protobuf:"bytes,8,opt,name=collaborations,proto3" json:"collaborations,omitempty"` + WrittenPosts *ListOfBlogPost `protobuf:"bytes,9,opt,name=written_posts,json=writtenPosts,proto3" json:"written_posts,omitempty"` + FavoriteCategories []*Category `protobuf:"bytes,10,rep,name=favorite_categories,json=favoriteCategories,proto3" json:"favorite_categories,omitempty"` + RelatedAuthors *ListOfUser `protobuf:"bytes,11,opt,name=related_authors,json=relatedAuthors,proto3" json:"related_authors,omitempty"` + ProductReviews *ListOfProduct `protobuf:"bytes,12,opt,name=product_reviews,json=productReviews,proto3" json:"product_reviews,omitempty"` + AuthorGroups *ListOfListOfUser `protobuf:"bytes,13,opt,name=author_groups,json=authorGroups,proto3" json:"author_groups,omitempty"` + CategoryPreferences *ListOfListOfCategory `protobuf:"bytes,14,opt,name=category_preferences,json=categoryPreferences,proto3" json:"category_preferences,omitempty"` + ProjectTeams *ListOfListOfUser `protobuf:"bytes,15,opt,name=project_teams,json=projectTeams,proto3" json:"project_teams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Author) Reset() { + *x = Author{} + mi := &file_product_proto_msgTypes[291] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Author) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Author) ProtoMessage() {} + +func (x *Author) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[291] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Author.ProtoReflect.Descriptor instead. +func (*Author) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{291} +} + +func (x *Author) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Author) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Author) GetEmail() *wrapperspb.StringValue { + if x != nil { + return x.Email + } + return nil +} + +func (x *Author) GetSkills() []string { + if x != nil { + return x.Skills + } + return nil +} + +func (x *Author) GetLanguages() []string { + if x != nil { + return x.Languages + } + return nil +} + +func (x *Author) GetSocialLinks() *ListOfString { + if x != nil { + return x.SocialLinks + } + return nil +} + +func (x *Author) GetTeamsByProject() *ListOfListOfString { + if x != nil { + return x.TeamsByProject + } + return nil +} + +func (x *Author) GetCollaborations() *ListOfListOfString { + if x != nil { + return x.Collaborations + } + return nil +} + +func (x *Author) GetWrittenPosts() *ListOfBlogPost { + if x != nil { + return x.WrittenPosts + } + return nil +} + +func (x *Author) GetFavoriteCategories() []*Category { + if x != nil { + return x.FavoriteCategories + } + return nil +} + +func (x *Author) GetRelatedAuthors() *ListOfUser { + if x != nil { + return x.RelatedAuthors + } + return nil +} + +func (x *Author) GetProductReviews() *ListOfProduct { + if x != nil { + return x.ProductReviews + } + return nil +} + +func (x *Author) GetAuthorGroups() *ListOfListOfUser { + if x != nil { + return x.AuthorGroups + } + return nil +} + +func (x *Author) GetCategoryPreferences() *ListOfListOfCategory { + if x != nil { + return x.CategoryPreferences + } + return nil +} + +func (x *Author) GetProjectTeams() *ListOfListOfUser { + if x != nil { + return x.ProjectTeams + } + return nil +} + +type AuthorFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + HasTeams *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=has_teams,json=hasTeams,proto3" json:"has_teams,omitempty"` + SkillCount *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=skill_count,json=skillCount,proto3" json:"skill_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthorFilter) Reset() { + *x = AuthorFilter{} + mi := &file_product_proto_msgTypes[292] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthorFilter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthorFilter) ProtoMessage() {} + +func (x *AuthorFilter) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[292] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthorFilter.ProtoReflect.Descriptor instead. +func (*AuthorFilter) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{292} +} + +func (x *AuthorFilter) GetName() *wrapperspb.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *AuthorFilter) GetHasTeams() *wrapperspb.BoolValue { + if x != nil { + return x.HasTeams + } + return nil +} + +func (x *AuthorFilter) GetSkillCount() *wrapperspb.Int32Value { + if x != nil { + return x.SkillCount + } + return nil +} + +type TestContainer struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TestContainer) Reset() { + *x = TestContainer{} + mi := &file_product_proto_msgTypes[293] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TestContainer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TestContainer) ProtoMessage() {} + +func (x *TestContainer) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[293] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TestContainer.ProtoReflect.Descriptor instead. +func (*TestContainer) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{293} +} + +func (x *TestContainer) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TestContainer) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TestContainer) GetDescription() *wrapperspb.StringValue { + if x != nil { + return x.Description + } + return nil +} + +type UserInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UserInput) Reset() { + *x = UserInput{} + mi := &file_product_proto_msgTypes[294] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UserInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserInput) ProtoMessage() {} + +func (x *UserInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[294] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserInput.ProtoReflect.Descriptor instead. +func (*UserInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{294} +} + +func (x *UserInput) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type ActionInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActionInput) Reset() { + *x = ActionInput{} + mi := &file_product_proto_msgTypes[295] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActionInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActionInput) ProtoMessage() {} + +func (x *ActionInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[295] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActionInput.ProtoReflect.Descriptor instead. +func (*ActionInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{295} +} + +func (x *ActionInput) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ActionInput) GetPayload() string { + if x != nil { + return x.Payload + } + return "" +} + +type ActionResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Value: + // + // *ActionResult_ActionSuccess + // *ActionResult_ActionError + Value isActionResult_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActionResult) Reset() { + *x = ActionResult{} + mi := &file_product_proto_msgTypes[296] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActionResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActionResult) ProtoMessage() {} + +func (x *ActionResult) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[296] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActionResult.ProtoReflect.Descriptor instead. +func (*ActionResult) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{296} +} + +func (x *ActionResult) GetValue() isActionResult_Value { + if x != nil { + return x.Value + } + return nil +} + +func (x *ActionResult) GetActionSuccess() *ActionSuccess { + if x != nil { + if x, ok := x.Value.(*ActionResult_ActionSuccess); ok { + return x.ActionSuccess + } + } + return nil +} + +func (x *ActionResult) GetActionError() *ActionError { + if x != nil { + if x, ok := x.Value.(*ActionResult_ActionError); ok { + return x.ActionError + } + } + return nil +} + +type isActionResult_Value interface { + isActionResult_Value() +} + +type ActionResult_ActionSuccess struct { + ActionSuccess *ActionSuccess `protobuf:"bytes,1,opt,name=action_success,json=actionSuccess,proto3,oneof"` +} + +type ActionResult_ActionError struct { + ActionError *ActionError `protobuf:"bytes,2,opt,name=action_error,json=actionError,proto3,oneof"` +} + +func (*ActionResult_ActionSuccess) isActionResult_Value() {} + +func (*ActionResult_ActionError) isActionResult_Value() {} + +type NullableFieldsInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + OptionalString *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"` + OptionalInt *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=optional_int,json=optionalInt,proto3" json:"optional_int,omitempty"` + OptionalFloat *wrapperspb.DoubleValue `protobuf:"bytes,4,opt,name=optional_float,json=optionalFloat,proto3" json:"optional_float,omitempty"` + OptionalBoolean *wrapperspb.BoolValue `protobuf:"bytes,5,opt,name=optional_boolean,json=optionalBoolean,proto3" json:"optional_boolean,omitempty"` + RequiredString string `protobuf:"bytes,6,opt,name=required_string,json=requiredString,proto3" json:"required_string,omitempty"` + RequiredInt int32 `protobuf:"varint,7,opt,name=required_int,json=requiredInt,proto3" json:"required_int,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NullableFieldsInput) Reset() { + *x = NullableFieldsInput{} + mi := &file_product_proto_msgTypes[297] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NullableFieldsInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NullableFieldsInput) ProtoMessage() {} + +func (x *NullableFieldsInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[297] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NullableFieldsInput.ProtoReflect.Descriptor instead. +func (*NullableFieldsInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{297} +} + +func (x *NullableFieldsInput) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NullableFieldsInput) GetOptionalString() *wrapperspb.StringValue { + if x != nil { + return x.OptionalString + } + return nil +} + +func (x *NullableFieldsInput) GetOptionalInt() *wrapperspb.Int32Value { + if x != nil { + return x.OptionalInt + } + return nil +} + +func (x *NullableFieldsInput) GetOptionalFloat() *wrapperspb.DoubleValue { + if x != nil { + return x.OptionalFloat + } + return nil +} + +func (x *NullableFieldsInput) GetOptionalBoolean() *wrapperspb.BoolValue { + if x != nil { + return x.OptionalBoolean + } + return nil +} + +func (x *NullableFieldsInput) GetRequiredString() string { + if x != nil { + return x.RequiredString + } + return "" +} + +func (x *NullableFieldsInput) GetRequiredInt() int32 { + if x != nil { + return x.RequiredInt + } + return 0 +} + +type BlogPostInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` + Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"` + OptionalTags *ListOfString `protobuf:"bytes,4,opt,name=optional_tags,json=optionalTags,proto3" json:"optional_tags,omitempty"` + Categories []string `protobuf:"bytes,5,rep,name=categories,proto3" json:"categories,omitempty"` + Keywords *ListOfString `protobuf:"bytes,6,opt,name=keywords,proto3" json:"keywords,omitempty"` + ViewCounts []int32 `protobuf:"varint,7,rep,packed,name=view_counts,json=viewCounts,proto3" json:"view_counts,omitempty"` + Ratings *ListOfFloat `protobuf:"bytes,8,opt,name=ratings,proto3" json:"ratings,omitempty"` + IsPublished *ListOfBoolean `protobuf:"bytes,9,opt,name=is_published,json=isPublished,proto3" json:"is_published,omitempty"` + TagGroups *ListOfListOfString `protobuf:"bytes,10,opt,name=tag_groups,json=tagGroups,proto3" json:"tag_groups,omitempty"` + RelatedTopics *ListOfListOfString `protobuf:"bytes,11,opt,name=related_topics,json=relatedTopics,proto3" json:"related_topics,omitempty"` + CommentThreads *ListOfListOfString `protobuf:"bytes,12,opt,name=comment_threads,json=commentThreads,proto3" json:"comment_threads,omitempty"` + Suggestions *ListOfListOfString `protobuf:"bytes,13,opt,name=suggestions,proto3" json:"suggestions,omitempty"` + RelatedCategories *ListOfCategoryInput `protobuf:"bytes,14,opt,name=related_categories,json=relatedCategories,proto3" json:"related_categories,omitempty"` + Contributors *ListOfUserInput `protobuf:"bytes,15,opt,name=contributors,proto3" json:"contributors,omitempty"` + CategoryGroups *ListOfListOfCategoryInput `protobuf:"bytes,16,opt,name=category_groups,json=categoryGroups,proto3" json:"category_groups,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BlogPostInput) Reset() { + *x = BlogPostInput{} + mi := &file_product_proto_msgTypes[298] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BlogPostInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlogPostInput) ProtoMessage() {} + +func (x *BlogPostInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[298] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlogPostInput.ProtoReflect.Descriptor instead. +func (*BlogPostInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{298} +} + +func (x *BlogPostInput) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *BlogPostInput) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *BlogPostInput) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *BlogPostInput) GetOptionalTags() *ListOfString { + if x != nil { + return x.OptionalTags + } + return nil +} + +func (x *BlogPostInput) GetCategories() []string { + if x != nil { + return x.Categories + } + return nil +} + +func (x *BlogPostInput) GetKeywords() *ListOfString { + if x != nil { + return x.Keywords + } + return nil +} + +func (x *BlogPostInput) GetViewCounts() []int32 { + if x != nil { + return x.ViewCounts + } + return nil +} + +func (x *BlogPostInput) GetRatings() *ListOfFloat { + if x != nil { + return x.Ratings + } + return nil +} + +func (x *BlogPostInput) GetIsPublished() *ListOfBoolean { + if x != nil { + return x.IsPublished + } + return nil +} + +func (x *BlogPostInput) GetTagGroups() *ListOfListOfString { + if x != nil { + return x.TagGroups + } + return nil +} + +func (x *BlogPostInput) GetRelatedTopics() *ListOfListOfString { + if x != nil { + return x.RelatedTopics + } + return nil +} + +func (x *BlogPostInput) GetCommentThreads() *ListOfListOfString { + if x != nil { + return x.CommentThreads + } + return nil +} + +func (x *BlogPostInput) GetSuggestions() *ListOfListOfString { + if x != nil { + return x.Suggestions + } + return nil +} + +func (x *BlogPostInput) GetRelatedCategories() *ListOfCategoryInput { + if x != nil { + return x.RelatedCategories + } + return nil +} + +func (x *BlogPostInput) GetContributors() *ListOfUserInput { + if x != nil { + return x.Contributors + } + return nil +} + +func (x *BlogPostInput) GetCategoryGroups() *ListOfListOfCategoryInput { + if x != nil { + return x.CategoryGroups + } + return nil +} + +type AuthorInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Email *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` + Skills []string `protobuf:"bytes,3,rep,name=skills,proto3" json:"skills,omitempty"` + Languages []string `protobuf:"bytes,4,rep,name=languages,proto3" json:"languages,omitempty"` + SocialLinks *ListOfString `protobuf:"bytes,5,opt,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty"` + TeamsByProject *ListOfListOfString `protobuf:"bytes,6,opt,name=teams_by_project,json=teamsByProject,proto3" json:"teams_by_project,omitempty"` + Collaborations *ListOfListOfString `protobuf:"bytes,7,opt,name=collaborations,proto3" json:"collaborations,omitempty"` + FavoriteCategories []*CategoryInput `protobuf:"bytes,8,rep,name=favorite_categories,json=favoriteCategories,proto3" json:"favorite_categories,omitempty"` + AuthorGroups *ListOfListOfUserInput `protobuf:"bytes,9,opt,name=author_groups,json=authorGroups,proto3" json:"author_groups,omitempty"` + ProjectTeams *ListOfListOfUserInput `protobuf:"bytes,10,opt,name=project_teams,json=projectTeams,proto3" json:"project_teams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AuthorInput) Reset() { + *x = AuthorInput{} + mi := &file_product_proto_msgTypes[299] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AuthorInput) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthorInput) ProtoMessage() {} + +func (x *AuthorInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[299] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthorInput.ProtoReflect.Descriptor instead. +func (*AuthorInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{299} +} + +func (x *AuthorInput) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AuthorInput) GetEmail() *wrapperspb.StringValue { + if x != nil { + return x.Email + } + return nil +} + +func (x *AuthorInput) GetSkills() []string { + if x != nil { + return x.Skills + } + return nil +} + +func (x *AuthorInput) GetLanguages() []string { + if x != nil { + return x.Languages + } + return nil +} + +func (x *AuthorInput) GetSocialLinks() *ListOfString { + if x != nil { + return x.SocialLinks + } + return nil +} + +func (x *AuthorInput) GetTeamsByProject() *ListOfListOfString { + if x != nil { + return x.TeamsByProject + } + return nil +} + +func (x *AuthorInput) GetCollaborations() *ListOfListOfString { + if x != nil { + return x.Collaborations + } + return nil +} + +func (x *AuthorInput) GetFavoriteCategories() []*CategoryInput { + if x != nil { + return x.FavoriteCategories + } + return nil +} + +func (x *AuthorInput) GetAuthorGroups() *ListOfListOfUserInput { + if x != nil { + return x.AuthorGroups + } + return nil +} + +func (x *AuthorInput) GetProjectTeams() *ListOfListOfUserInput { + if x != nil { + return x.ProjectTeams + } + return nil +} + +type ProductDetails struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + ReviewSummary *ActionResult `protobuf:"bytes,3,opt,name=review_summary,json=reviewSummary,proto3" json:"review_summary,omitempty"` + RecommendedPet *Animal `protobuf:"bytes,4,opt,name=recommended_pet,json=recommendedPet,proto3" json:"recommended_pet,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ProductDetails) Reset() { + *x = ProductDetails{} + mi := &file_product_proto_msgTypes[300] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ProductDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProductDetails) ProtoMessage() {} + +func (x *ProductDetails) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[300] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProductDetails.ProtoReflect.Descriptor instead. +func (*ProductDetails) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{300} +} + +func (x *ProductDetails) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ProductDetails) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ProductDetails) GetReviewSummary() *ActionResult { + if x != nil { + return x.ReviewSummary + } + return nil +} + +func (x *ProductDetails) GetRecommendedPet() *Animal { + if x != nil { + return x.RecommendedPet + } + return nil +} -type NullableFieldsInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - OptionalString *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=optional_string,json=optionalString,proto3" json:"optional_string,omitempty"` - OptionalInt *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=optional_int,json=optionalInt,proto3" json:"optional_int,omitempty"` - OptionalFloat *wrapperspb.DoubleValue `protobuf:"bytes,4,opt,name=optional_float,json=optionalFloat,proto3" json:"optional_float,omitempty"` - OptionalBoolean *wrapperspb.BoolValue `protobuf:"bytes,5,opt,name=optional_boolean,json=optionalBoolean,proto3" json:"optional_boolean,omitempty"` - RequiredString string `protobuf:"bytes,6,opt,name=required_string,json=requiredString,proto3" json:"required_string,omitempty"` - RequiredInt int32 `protobuf:"varint,7,opt,name=required_int,json=requiredInt,proto3" json:"required_int,omitempty"` +type RestockData struct { + state protoimpl.MessageState `protogen:"open.v1"` + LastRestockDate string `protobuf:"bytes,1,opt,name=last_restock_date,json=lastRestockDate,proto3" json:"last_restock_date,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *NullableFieldsInput) Reset() { - *x = NullableFieldsInput{} - mi := &file_product_proto_msgTypes[231] +func (x *RestockData) Reset() { + *x = RestockData{} + mi := &file_product_proto_msgTypes[301] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NullableFieldsInput) String() string { +func (x *RestockData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NullableFieldsInput) ProtoMessage() {} +func (*RestockData) ProtoMessage() {} -func (x *NullableFieldsInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[231] +func (x *RestockData) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[301] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11462,97 +14979,102 @@ func (x *NullableFieldsInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NullableFieldsInput.ProtoReflect.Descriptor instead. -func (*NullableFieldsInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{231} +// Deprecated: Use RestockData.ProtoReflect.Descriptor instead. +func (*RestockData) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{301} } -func (x *NullableFieldsInput) GetName() string { +func (x *RestockData) GetLastRestockDate() string { if x != nil { - return x.Name + return x.LastRestockDate } return "" } -func (x *NullableFieldsInput) GetOptionalString() *wrapperspb.StringValue { - if x != nil { - return x.OptionalString - } - return nil +type StorageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Capacity int32 `protobuf:"varint,1,opt,name=capacity,proto3" json:"capacity,omitempty"` + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` + Priority int32 `protobuf:"varint,3,opt,name=priority,proto3" json:"priority,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NullableFieldsInput) GetOptionalInt() *wrapperspb.Int32Value { - if x != nil { - return x.OptionalInt - } - return nil +func (x *StorageMetadata) Reset() { + *x = StorageMetadata{} + mi := &file_product_proto_msgTypes[302] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *NullableFieldsInput) GetOptionalFloat() *wrapperspb.DoubleValue { +func (x *StorageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageMetadata) ProtoMessage() {} + +func (x *StorageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[302] if x != nil { - return x.OptionalFloat + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *NullableFieldsInput) GetOptionalBoolean() *wrapperspb.BoolValue { +// Deprecated: Use StorageMetadata.ProtoReflect.Descriptor instead. +func (*StorageMetadata) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{302} +} + +func (x *StorageMetadata) GetCapacity() int32 { if x != nil { - return x.OptionalBoolean + return x.Capacity } - return nil + return 0 } -func (x *NullableFieldsInput) GetRequiredString() string { +func (x *StorageMetadata) GetZone() string { if x != nil { - return x.RequiredString + return x.Zone } return "" } -func (x *NullableFieldsInput) GetRequiredInt() int32 { +func (x *StorageMetadata) GetPriority() int32 { if x != nil { - return x.RequiredInt + return x.Priority } return 0 } -type BlogPostInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` - Tags []string `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"` - OptionalTags *ListOfString `protobuf:"bytes,4,opt,name=optional_tags,json=optionalTags,proto3" json:"optional_tags,omitempty"` - Categories []string `protobuf:"bytes,5,rep,name=categories,proto3" json:"categories,omitempty"` - Keywords *ListOfString `protobuf:"bytes,6,opt,name=keywords,proto3" json:"keywords,omitempty"` - ViewCounts []int32 `protobuf:"varint,7,rep,packed,name=view_counts,json=viewCounts,proto3" json:"view_counts,omitempty"` - Ratings *ListOfFloat `protobuf:"bytes,8,opt,name=ratings,proto3" json:"ratings,omitempty"` - IsPublished *ListOfBoolean `protobuf:"bytes,9,opt,name=is_published,json=isPublished,proto3" json:"is_published,omitempty"` - TagGroups *ListOfListOfString `protobuf:"bytes,10,opt,name=tag_groups,json=tagGroups,proto3" json:"tag_groups,omitempty"` - RelatedTopics *ListOfListOfString `protobuf:"bytes,11,opt,name=related_topics,json=relatedTopics,proto3" json:"related_topics,omitempty"` - CommentThreads *ListOfListOfString `protobuf:"bytes,12,opt,name=comment_threads,json=commentThreads,proto3" json:"comment_threads,omitempty"` - Suggestions *ListOfListOfString `protobuf:"bytes,13,opt,name=suggestions,proto3" json:"suggestions,omitempty"` - RelatedCategories *ListOfCategoryInput `protobuf:"bytes,14,opt,name=related_categories,json=relatedCategories,proto3" json:"related_categories,omitempty"` - Contributors *ListOfUserInput `protobuf:"bytes,15,opt,name=contributors,proto3" json:"contributors,omitempty"` - CategoryGroups *ListOfListOfCategoryInput `protobuf:"bytes,16,opt,name=category_groups,json=categoryGroups,proto3" json:"category_groups,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type NestedTypeB struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + C *NestedTypeC `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPostInput) Reset() { - *x = BlogPostInput{} - mi := &file_product_proto_msgTypes[232] +func (x *NestedTypeB) Reset() { + *x = NestedTypeB{} + mi := &file_product_proto_msgTypes[303] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *BlogPostInput) String() string { +func (x *NestedTypeB) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BlogPostInput) ProtoMessage() {} +func (*NestedTypeB) ProtoMessage() {} -func (x *BlogPostInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[232] +func (x *NestedTypeB) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[303] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11563,154 +15085,175 @@ func (x *BlogPostInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BlogPostInput.ProtoReflect.Descriptor instead. -func (*BlogPostInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{232} +// Deprecated: Use NestedTypeB.ProtoReflect.Descriptor instead. +func (*NestedTypeB) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{303} } -func (x *BlogPostInput) GetTitle() string { +func (x *NestedTypeB) GetId() string { if x != nil { - return x.Title + return x.Id } return "" } -func (x *BlogPostInput) GetContent() string { +func (x *NestedTypeB) GetName() string { if x != nil { - return x.Content + return x.Name } return "" } -func (x *BlogPostInput) GetTags() []string { +func (x *NestedTypeB) GetC() *NestedTypeC { if x != nil { - return x.Tags + return x.C } return nil } -func (x *BlogPostInput) GetOptionalTags() *ListOfString { - if x != nil { - return x.OptionalTags - } - return nil +type NestedTypeC struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPostInput) GetCategories() []string { - if x != nil { - return x.Categories - } - return nil +func (x *NestedTypeC) Reset() { + *x = NestedTypeC{} + mi := &file_product_proto_msgTypes[304] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BlogPostInput) GetKeywords() *ListOfString { - if x != nil { - return x.Keywords - } - return nil +func (x *NestedTypeC) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *BlogPostInput) GetViewCounts() []int32 { +func (*NestedTypeC) ProtoMessage() {} + +func (x *NestedTypeC) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[304] if x != nil { - return x.ViewCounts + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *BlogPostInput) GetRatings() *ListOfFloat { - if x != nil { - return x.Ratings - } - return nil +// Deprecated: Use NestedTypeC.ProtoReflect.Descriptor instead. +func (*NestedTypeC) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{304} } -func (x *BlogPostInput) GetIsPublished() *ListOfBoolean { +func (x *NestedTypeC) GetId() string { if x != nil { - return x.IsPublished + return x.Id } - return nil + return "" } -func (x *BlogPostInput) GetTagGroups() *ListOfListOfString { +func (x *NestedTypeC) GetName() string { if x != nil { - return x.TagGroups + return x.Name } - return nil + return "" } -func (x *BlogPostInput) GetRelatedTopics() *ListOfListOfString { - if x != nil { - return x.RelatedTopics - } - return nil +type FilterType struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + FilterField_1 string `protobuf:"bytes,2,opt,name=filter_field_1,json=filterField1,proto3" json:"filter_field_1,omitempty"` + FilterField_2 string `protobuf:"bytes,3,opt,name=filter_field_2,json=filterField2,proto3" json:"filter_field_2,omitempty"` + Pagination *Pagination `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BlogPostInput) GetCommentThreads() *ListOfListOfString { +func (x *FilterType) Reset() { + *x = FilterType{} + mi := &file_product_proto_msgTypes[305] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FilterType) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FilterType) ProtoMessage() {} + +func (x *FilterType) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[305] if x != nil { - return x.CommentThreads + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *BlogPostInput) GetSuggestions() *ListOfListOfString { +// Deprecated: Use FilterType.ProtoReflect.Descriptor instead. +func (*FilterType) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{305} +} + +func (x *FilterType) GetName() string { if x != nil { - return x.Suggestions + return x.Name } - return nil + return "" } -func (x *BlogPostInput) GetRelatedCategories() *ListOfCategoryInput { +func (x *FilterType) GetFilterField_1() string { if x != nil { - return x.RelatedCategories + return x.FilterField_1 } - return nil + return "" } -func (x *BlogPostInput) GetContributors() *ListOfUserInput { +func (x *FilterType) GetFilterField_2() string { if x != nil { - return x.Contributors + return x.FilterField_2 } - return nil + return "" } -func (x *BlogPostInput) GetCategoryGroups() *ListOfListOfCategoryInput { +func (x *FilterType) GetPagination() *Pagination { if x != nil { - return x.CategoryGroups + return x.Pagination } return nil } -type AuthorInput struct { - state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Email *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` - Skills []string `protobuf:"bytes,3,rep,name=skills,proto3" json:"skills,omitempty"` - Languages []string `protobuf:"bytes,4,rep,name=languages,proto3" json:"languages,omitempty"` - SocialLinks *ListOfString `protobuf:"bytes,5,opt,name=social_links,json=socialLinks,proto3" json:"social_links,omitempty"` - TeamsByProject *ListOfListOfString `protobuf:"bytes,6,opt,name=teams_by_project,json=teamsByProject,proto3" json:"teams_by_project,omitempty"` - Collaborations *ListOfListOfString `protobuf:"bytes,7,opt,name=collaborations,proto3" json:"collaborations,omitempty"` - FavoriteCategories []*CategoryInput `protobuf:"bytes,8,rep,name=favorite_categories,json=favoriteCategories,proto3" json:"favorite_categories,omitempty"` - AuthorGroups *ListOfListOfUserInput `protobuf:"bytes,9,opt,name=author_groups,json=authorGroups,proto3" json:"author_groups,omitempty"` - ProjectTeams *ListOfListOfUserInput `protobuf:"bytes,10,opt,name=project_teams,json=projectTeams,proto3" json:"project_teams,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type Pagination struct { + state protoimpl.MessageState `protogen:"open.v1"` + Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` + PerPage int32 `protobuf:"varint,2,opt,name=per_page,json=perPage,proto3" json:"per_page,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AuthorInput) Reset() { - *x = AuthorInput{} - mi := &file_product_proto_msgTypes[233] +func (x *Pagination) Reset() { + *x = Pagination{} + mi := &file_product_proto_msgTypes[306] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *AuthorInput) String() string { +func (x *Pagination) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AuthorInput) ProtoMessage() {} +func (*Pagination) ProtoMessage() {} -func (x *AuthorInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[233] +func (x *Pagination) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[306] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11721,106 +15264,109 @@ func (x *AuthorInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AuthorInput.ProtoReflect.Descriptor instead. -func (*AuthorInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{233} +// Deprecated: Use Pagination.ProtoReflect.Descriptor instead. +func (*Pagination) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{306} } -func (x *AuthorInput) GetName() string { +func (x *Pagination) GetPage() int32 { if x != nil { - return x.Name + return x.Page } - return "" + return 0 } -func (x *AuthorInput) GetEmail() *wrapperspb.StringValue { +func (x *Pagination) GetPerPage() int32 { if x != nil { - return x.Email + return x.PerPage } - return nil + return 0 } -func (x *AuthorInput) GetSkills() []string { - if x != nil { - return x.Skills - } - return nil +type OrderLineInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` + Modifiers *ListOfString `protobuf:"bytes,3,opt,name=modifiers,proto3" json:"modifiers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AuthorInput) GetLanguages() []string { - if x != nil { - return x.Languages - } - return nil +func (x *OrderLineInput) Reset() { + *x = OrderLineInput{} + mi := &file_product_proto_msgTypes[307] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AuthorInput) GetSocialLinks() *ListOfString { - if x != nil { - return x.SocialLinks - } - return nil +func (x *OrderLineInput) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *AuthorInput) GetTeamsByProject() *ListOfListOfString { +func (*OrderLineInput) ProtoMessage() {} + +func (x *OrderLineInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[307] if x != nil { - return x.TeamsByProject + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *AuthorInput) GetCollaborations() *ListOfListOfString { - if x != nil { - return x.Collaborations - } - return nil +// Deprecated: Use OrderLineInput.ProtoReflect.Descriptor instead. +func (*OrderLineInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{307} } -func (x *AuthorInput) GetFavoriteCategories() []*CategoryInput { +func (x *OrderLineInput) GetProductId() string { if x != nil { - return x.FavoriteCategories + return x.ProductId } - return nil + return "" } -func (x *AuthorInput) GetAuthorGroups() *ListOfListOfUserInput { +func (x *OrderLineInput) GetQuantity() int32 { if x != nil { - return x.AuthorGroups + return x.Quantity } - return nil + return 0 } -func (x *AuthorInput) GetProjectTeams() *ListOfListOfUserInput { +func (x *OrderLineInput) GetModifiers() *ListOfString { if x != nil { - return x.ProjectTeams + return x.Modifiers } return nil } -type ProductDetails struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - ReviewSummary *ActionResult `protobuf:"bytes,3,opt,name=review_summary,json=reviewSummary,proto3" json:"review_summary,omitempty"` - RecommendedPet *Animal `protobuf:"bytes,4,opt,name=recommended_pet,json=recommendedPet,proto3" json:"recommended_pet,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type OrderLine struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` + Modifiers *ListOfString `protobuf:"bytes,3,opt,name=modifiers,proto3" json:"modifiers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProductDetails) Reset() { - *x = ProductDetails{} - mi := &file_product_proto_msgTypes[234] +func (x *OrderLine) Reset() { + *x = OrderLine{} + mi := &file_product_proto_msgTypes[308] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ProductDetails) String() string { +func (x *OrderLine) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProductDetails) ProtoMessage() {} +func (*OrderLine) ProtoMessage() {} -func (x *ProductDetails) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[234] +func (x *OrderLine) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[308] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11831,63 +15377,57 @@ func (x *ProductDetails) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProductDetails.ProtoReflect.Descriptor instead. -func (*ProductDetails) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{234} -} - -func (x *ProductDetails) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use OrderLine.ProtoReflect.Descriptor instead. +func (*OrderLine) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{308} } -func (x *ProductDetails) GetDescription() string { +func (x *OrderLine) GetProductId() string { if x != nil { - return x.Description + return x.ProductId } return "" } -func (x *ProductDetails) GetReviewSummary() *ActionResult { +func (x *OrderLine) GetQuantity() int32 { if x != nil { - return x.ReviewSummary + return x.Quantity } - return nil + return 0 } -func (x *ProductDetails) GetRecommendedPet() *Animal { +func (x *OrderLine) GetModifiers() *ListOfString { if x != nil { - return x.RecommendedPet + return x.Modifiers } return nil } -type NestedTypeB struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - C *NestedTypeC `protobuf:"bytes,3,opt,name=c,proto3" json:"c,omitempty"` +type Subcategory struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + IsActive bool `protobuf:"varint,4,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *NestedTypeB) Reset() { - *x = NestedTypeB{} - mi := &file_product_proto_msgTypes[235] +func (x *Subcategory) Reset() { + *x = Subcategory{} + mi := &file_product_proto_msgTypes[309] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NestedTypeB) String() string { +func (x *Subcategory) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NestedTypeB) ProtoMessage() {} +func (*Subcategory) ProtoMessage() {} -func (x *NestedTypeB) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[235] +func (x *Subcategory) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[309] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11898,55 +15438,65 @@ func (x *NestedTypeB) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NestedTypeB.ProtoReflect.Descriptor instead. -func (*NestedTypeB) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{235} +// Deprecated: Use Subcategory.ProtoReflect.Descriptor instead. +func (*Subcategory) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{309} } -func (x *NestedTypeB) GetId() string { +func (x *Subcategory) GetId() string { if x != nil { return x.Id } return "" } -func (x *NestedTypeB) GetName() string { +func (x *Subcategory) GetName() string { if x != nil { return x.Name } return "" } -func (x *NestedTypeB) GetC() *NestedTypeC { +func (x *Subcategory) GetDescription() *wrapperspb.StringValue { if x != nil { - return x.C + return x.Description } return nil } -type NestedTypeC struct { +func (x *Subcategory) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +type CategoryMetrics struct { state protoimpl.MessageState `protogen:"open.v1"` Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + MetricType string `protobuf:"bytes,2,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + Value float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"` + Timestamp string `protobuf:"bytes,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + CategoryId string `protobuf:"bytes,5,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *NestedTypeC) Reset() { - *x = NestedTypeC{} - mi := &file_product_proto_msgTypes[236] +func (x *CategoryMetrics) Reset() { + *x = CategoryMetrics{} + mi := &file_product_proto_msgTypes[310] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *NestedTypeC) String() string { +func (x *CategoryMetrics) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NestedTypeC) ProtoMessage() {} +func (*CategoryMetrics) ProtoMessage() {} -func (x *NestedTypeC) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[236] +func (x *CategoryMetrics) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[310] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11957,50 +15507,73 @@ func (x *NestedTypeC) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NestedTypeC.ProtoReflect.Descriptor instead. -func (*NestedTypeC) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{236} +// Deprecated: Use CategoryMetrics.ProtoReflect.Descriptor instead. +func (*CategoryMetrics) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{310} } -func (x *NestedTypeC) GetId() string { +func (x *CategoryMetrics) GetId() string { if x != nil { return x.Id } return "" } -func (x *NestedTypeC) GetName() string { +func (x *CategoryMetrics) GetMetricType() string { if x != nil { - return x.Name + return x.MetricType } return "" } -type FilterType struct { +func (x *CategoryMetrics) GetValue() float64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *CategoryMetrics) GetTimestamp() string { + if x != nil { + return x.Timestamp + } + return "" +} + +func (x *CategoryMetrics) GetCategoryId() string { + if x != nil { + return x.CategoryId + } + return "" +} + +type Cat struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - FilterField_1 string `protobuf:"bytes,2,opt,name=filter_field_1,json=filterField1,proto3" json:"filter_field_1,omitempty"` - FilterField_2 string `protobuf:"bytes,3,opt,name=filter_field_2,json=filterField2,proto3" json:"filter_field_2,omitempty"` - Pagination *Pagination `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + MeowVolume int32 `protobuf:"varint,4,opt,name=meow_volume,json=meowVolume,proto3" json:"meow_volume,omitempty"` + Owner *Owner `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"` + Breed *CatBreed `protobuf:"bytes,6,opt,name=breed,proto3" json:"breed,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } - -func (x *FilterType) Reset() { - *x = FilterType{} - mi := &file_product_proto_msgTypes[237] + +func (x *Cat) Reset() { + *x = Cat{} + mi := &file_product_proto_msgTypes[311] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *FilterType) String() string { +func (x *Cat) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FilterType) ProtoMessage() {} +func (*Cat) ProtoMessage() {} -func (x *FilterType) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[237] +func (x *Cat) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[311] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12011,62 +15584,80 @@ func (x *FilterType) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FilterType.ProtoReflect.Descriptor instead. -func (*FilterType) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{237} +// Deprecated: Use Cat.ProtoReflect.Descriptor instead. +func (*Cat) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{311} } -func (x *FilterType) GetName() string { +func (x *Cat) GetId() string { if x != nil { - return x.Name + return x.Id } return "" } -func (x *FilterType) GetFilterField_1() string { +func (x *Cat) GetName() string { if x != nil { - return x.FilterField_1 + return x.Name } return "" } -func (x *FilterType) GetFilterField_2() string { +func (x *Cat) GetKind() string { if x != nil { - return x.FilterField_2 + return x.Kind } return "" } -func (x *FilterType) GetPagination() *Pagination { +func (x *Cat) GetMeowVolume() int32 { if x != nil { - return x.Pagination + return x.MeowVolume + } + return 0 +} + +func (x *Cat) GetOwner() *Owner { + if x != nil { + return x.Owner } return nil } -type Pagination struct { +func (x *Cat) GetBreed() *CatBreed { + if x != nil { + return x.Breed + } + return nil +} + +type Dog struct { state protoimpl.MessageState `protogen:"open.v1"` - Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` - PerPage int32 `protobuf:"varint,2,opt,name=per_page,json=perPage,proto3" json:"per_page,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` + BarkVolume int32 `protobuf:"varint,4,opt,name=bark_volume,json=barkVolume,proto3" json:"bark_volume,omitempty"` + Owner *Owner `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"` + Breed *DogBreed `protobuf:"bytes,6,opt,name=breed,proto3" json:"breed,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Pagination) Reset() { - *x = Pagination{} - mi := &file_product_proto_msgTypes[238] +func (x *Dog) Reset() { + *x = Dog{} + mi := &file_product_proto_msgTypes[312] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Pagination) String() string { +func (x *Dog) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Pagination) ProtoMessage() {} +func (*Dog) ProtoMessage() {} -func (x *Pagination) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[238] +func (x *Dog) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[312] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12077,49 +15668,78 @@ func (x *Pagination) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Pagination.ProtoReflect.Descriptor instead. -func (*Pagination) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{238} +// Deprecated: Use Dog.ProtoReflect.Descriptor instead. +func (*Dog) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{312} } -func (x *Pagination) GetPage() int32 { +func (x *Dog) GetId() string { if x != nil { - return x.Page + return x.Id } - return 0 + return "" } -func (x *Pagination) GetPerPage() int32 { +func (x *Dog) GetName() string { if x != nil { - return x.PerPage + return x.Name + } + return "" +} + +func (x *Dog) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *Dog) GetBarkVolume() int32 { + if x != nil { + return x.BarkVolume } return 0 } -type OrderLineInput struct { +func (x *Dog) GetOwner() *Owner { + if x != nil { + return x.Owner + } + return nil +} + +func (x *Dog) GetBreed() *DogBreed { + if x != nil { + return x.Breed + } + return nil +} + +type Owner struct { state protoimpl.MessageState `protogen:"open.v1"` - ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` - Modifiers *ListOfString `protobuf:"bytes,3,opt,name=modifiers,proto3" json:"modifiers,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Contact *ContactInfo `protobuf:"bytes,3,opt,name=contact,proto3" json:"contact,omitempty"` + Pet *Animal `protobuf:"bytes,4,opt,name=pet,proto3" json:"pet,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *OrderLineInput) Reset() { - *x = OrderLineInput{} - mi := &file_product_proto_msgTypes[239] +func (x *Owner) Reset() { + *x = Owner{} + mi := &file_product_proto_msgTypes[313] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *OrderLineInput) String() string { +func (x *Owner) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OrderLineInput) ProtoMessage() {} +func (*Owner) ProtoMessage() {} -func (x *OrderLineInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[239] +func (x *Owner) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[313] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12130,56 +15750,63 @@ func (x *OrderLineInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OrderLineInput.ProtoReflect.Descriptor instead. -func (*OrderLineInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{239} +// Deprecated: Use Owner.ProtoReflect.Descriptor instead. +func (*Owner) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{313} } -func (x *OrderLineInput) GetProductId() string { +func (x *Owner) GetId() string { if x != nil { - return x.ProductId + return x.Id } return "" } -func (x *OrderLineInput) GetQuantity() int32 { +func (x *Owner) GetName() string { if x != nil { - return x.Quantity + return x.Name } - return 0 + return "" } -func (x *OrderLineInput) GetModifiers() *ListOfString { +func (x *Owner) GetContact() *ContactInfo { if x != nil { - return x.Modifiers + return x.Contact } return nil } -type OrderLine struct { +func (x *Owner) GetPet() *Animal { + if x != nil { + return x.Pet + } + return nil +} + +type ContactInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` - Quantity int32 `protobuf:"varint,2,opt,name=quantity,proto3" json:"quantity,omitempty"` - Modifiers *ListOfString `protobuf:"bytes,3,opt,name=modifiers,proto3" json:"modifiers,omitempty"` + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + Phone string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"` + Address *Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *OrderLine) Reset() { - *x = OrderLine{} - mi := &file_product_proto_msgTypes[240] +func (x *ContactInfo) Reset() { + *x = ContactInfo{} + mi := &file_product_proto_msgTypes[314] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *OrderLine) String() string { +func (x *ContactInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OrderLine) ProtoMessage() {} +func (*ContactInfo) ProtoMessage() {} -func (x *OrderLine) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[240] +func (x *ContactInfo) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[314] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12190,57 +15817,57 @@ func (x *OrderLine) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OrderLine.ProtoReflect.Descriptor instead. -func (*OrderLine) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{240} +// Deprecated: Use ContactInfo.ProtoReflect.Descriptor instead. +func (*ContactInfo) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{314} } -func (x *OrderLine) GetProductId() string { +func (x *ContactInfo) GetEmail() string { if x != nil { - return x.ProductId + return x.Email } return "" } -func (x *OrderLine) GetQuantity() int32 { +func (x *ContactInfo) GetPhone() string { if x != nil { - return x.Quantity + return x.Phone } - return 0 + return "" } -func (x *OrderLine) GetModifiers() *ListOfString { +func (x *ContactInfo) GetAddress() *Address { if x != nil { - return x.Modifiers + return x.Address } return nil } -type Subcategory struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Description *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - IsActive bool `protobuf:"varint,4,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` +type Address struct { + state protoimpl.MessageState `protogen:"open.v1"` + Street string `protobuf:"bytes,1,opt,name=street,proto3" json:"street,omitempty"` + City string `protobuf:"bytes,2,opt,name=city,proto3" json:"city,omitempty"` + Country string `protobuf:"bytes,3,opt,name=country,proto3" json:"country,omitempty"` + ZipCode string `protobuf:"bytes,4,opt,name=zip_code,json=zipCode,proto3" json:"zip_code,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Subcategory) Reset() { - *x = Subcategory{} - mi := &file_product_proto_msgTypes[241] +func (x *Address) Reset() { + *x = Address{} + mi := &file_product_proto_msgTypes[315] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Subcategory) String() string { +func (x *Address) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Subcategory) ProtoMessage() {} +func (*Address) ProtoMessage() {} -func (x *Subcategory) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[241] +func (x *Address) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[315] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12251,65 +15878,64 @@ func (x *Subcategory) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Subcategory.ProtoReflect.Descriptor instead. -func (*Subcategory) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{241} +// Deprecated: Use Address.ProtoReflect.Descriptor instead. +func (*Address) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{315} } -func (x *Subcategory) GetId() string { +func (x *Address) GetStreet() string { if x != nil { - return x.Id + return x.Street } return "" } -func (x *Subcategory) GetName() string { +func (x *Address) GetCity() string { if x != nil { - return x.Name + return x.City } return "" } -func (x *Subcategory) GetDescription() *wrapperspb.StringValue { +func (x *Address) GetCountry() string { if x != nil { - return x.Description + return x.Country } - return nil + return "" } -func (x *Subcategory) GetIsActive() bool { +func (x *Address) GetZipCode() string { if x != nil { - return x.IsActive - } - return false -} - -type CategoryMetrics struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - MetricType string `protobuf:"bytes,2,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` - Value float64 `protobuf:"fixed64,3,opt,name=value,proto3" json:"value,omitempty"` - Timestamp string `protobuf:"bytes,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - CategoryId string `protobuf:"bytes,5,opt,name=category_id,json=categoryId,proto3" json:"category_id,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + return x.ZipCode + } + return "" } -func (x *CategoryMetrics) Reset() { - *x = CategoryMetrics{} - mi := &file_product_proto_msgTypes[242] +type CatBreed struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Origin string `protobuf:"bytes,3,opt,name=origin,proto3" json:"origin,omitempty"` + Characteristics *BreedCharacteristics `protobuf:"bytes,4,opt,name=characteristics,proto3" json:"characteristics,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CatBreed) Reset() { + *x = CatBreed{} + mi := &file_product_proto_msgTypes[316] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *CategoryMetrics) String() string { +func (x *CatBreed) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CategoryMetrics) ProtoMessage() {} +func (*CatBreed) ProtoMessage() {} -func (x *CategoryMetrics) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[242] +func (x *CatBreed) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[316] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12320,73 +15946,64 @@ func (x *CategoryMetrics) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CategoryMetrics.ProtoReflect.Descriptor instead. -func (*CategoryMetrics) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{242} +// Deprecated: Use CatBreed.ProtoReflect.Descriptor instead. +func (*CatBreed) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{316} } -func (x *CategoryMetrics) GetId() string { +func (x *CatBreed) GetId() string { if x != nil { return x.Id } return "" } -func (x *CategoryMetrics) GetMetricType() string { +func (x *CatBreed) GetName() string { if x != nil { - return x.MetricType + return x.Name } return "" } -func (x *CategoryMetrics) GetValue() float64 { - if x != nil { - return x.Value - } - return 0 -} - -func (x *CategoryMetrics) GetTimestamp() string { +func (x *CatBreed) GetOrigin() string { if x != nil { - return x.Timestamp + return x.Origin } return "" } -func (x *CategoryMetrics) GetCategoryId() string { +func (x *CatBreed) GetCharacteristics() *BreedCharacteristics { if x != nil { - return x.CategoryId + return x.Characteristics } - return "" + return nil } -type Cat struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - MeowVolume int32 `protobuf:"varint,4,opt,name=meow_volume,json=meowVolume,proto3" json:"meow_volume,omitempty"` - Owner *Owner `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"` - Breed *CatBreed `protobuf:"bytes,6,opt,name=breed,proto3" json:"breed,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type DogBreed struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Origin string `protobuf:"bytes,3,opt,name=origin,proto3" json:"origin,omitempty"` + Characteristics *BreedCharacteristics `protobuf:"bytes,4,opt,name=characteristics,proto3" json:"characteristics,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Cat) Reset() { - *x = Cat{} - mi := &file_product_proto_msgTypes[243] +func (x *DogBreed) Reset() { + *x = DogBreed{} + mi := &file_product_proto_msgTypes[317] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Cat) String() string { +func (x *DogBreed) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Cat) ProtoMessage() {} +func (*DogBreed) ProtoMessage() {} -func (x *Cat) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[243] +func (x *DogBreed) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[317] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12397,80 +16014,63 @@ func (x *Cat) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Cat.ProtoReflect.Descriptor instead. -func (*Cat) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{243} +// Deprecated: Use DogBreed.ProtoReflect.Descriptor instead. +func (*DogBreed) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{317} } -func (x *Cat) GetId() string { +func (x *DogBreed) GetId() string { if x != nil { return x.Id } return "" } -func (x *Cat) GetName() string { +func (x *DogBreed) GetName() string { if x != nil { return x.Name } return "" } -func (x *Cat) GetKind() string { +func (x *DogBreed) GetOrigin() string { if x != nil { - return x.Kind + return x.Origin } return "" } -func (x *Cat) GetMeowVolume() int32 { - if x != nil { - return x.MeowVolume - } - return 0 -} - -func (x *Cat) GetOwner() *Owner { - if x != nil { - return x.Owner - } - return nil -} - -func (x *Cat) GetBreed() *CatBreed { +func (x *DogBreed) GetCharacteristics() *BreedCharacteristics { if x != nil { - return x.Breed + return x.Characteristics } return nil } -type Dog struct { +type BreedCharacteristics struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` - BarkVolume int32 `protobuf:"varint,4,opt,name=bark_volume,json=barkVolume,proto3" json:"bark_volume,omitempty"` - Owner *Owner `protobuf:"bytes,5,opt,name=owner,proto3" json:"owner,omitempty"` - Breed *DogBreed `protobuf:"bytes,6,opt,name=breed,proto3" json:"breed,omitempty"` + Size string `protobuf:"bytes,1,opt,name=size,proto3" json:"size,omitempty"` + Temperament string `protobuf:"bytes,2,opt,name=temperament,proto3" json:"temperament,omitempty"` + Lifespan string `protobuf:"bytes,3,opt,name=lifespan,proto3" json:"lifespan,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Dog) Reset() { - *x = Dog{} - mi := &file_product_proto_msgTypes[244] +func (x *BreedCharacteristics) Reset() { + *x = BreedCharacteristics{} + mi := &file_product_proto_msgTypes[318] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Dog) String() string { +func (x *BreedCharacteristics) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Dog) ProtoMessage() {} +func (*BreedCharacteristics) ProtoMessage() {} -func (x *Dog) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[244] +func (x *BreedCharacteristics) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[318] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12481,78 +16081,55 @@ func (x *Dog) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Dog.ProtoReflect.Descriptor instead. -func (*Dog) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{244} +// Deprecated: Use BreedCharacteristics.ProtoReflect.Descriptor instead. +func (*BreedCharacteristics) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{318} } -func (x *Dog) GetId() string { +func (x *BreedCharacteristics) GetSize() string { if x != nil { - return x.Id + return x.Size } return "" } -func (x *Dog) GetName() string { +func (x *BreedCharacteristics) GetTemperament() string { if x != nil { - return x.Name + return x.Temperament } return "" } -func (x *Dog) GetKind() string { +func (x *BreedCharacteristics) GetLifespan() string { if x != nil { - return x.Kind + return x.Lifespan } return "" } -func (x *Dog) GetBarkVolume() int32 { - if x != nil { - return x.BarkVolume - } - return 0 -} - -func (x *Dog) GetOwner() *Owner { - if x != nil { - return x.Owner - } - return nil -} - -func (x *Dog) GetBreed() *DogBreed { - if x != nil { - return x.Breed - } - return nil -} - -type Owner struct { +type ActionSuccess struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Contact *ContactInfo `protobuf:"bytes,3,opt,name=contact,proto3" json:"contact,omitempty"` - Pet *Animal `protobuf:"bytes,4,opt,name=pet,proto3" json:"pet,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Timestamp string `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Owner) Reset() { - *x = Owner{} - mi := &file_product_proto_msgTypes[245] +func (x *ActionSuccess) Reset() { + *x = ActionSuccess{} + mi := &file_product_proto_msgTypes[319] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Owner) String() string { +func (x *ActionSuccess) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Owner) ProtoMessage() {} +func (*ActionSuccess) ProtoMessage() {} -func (x *Owner) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[245] +func (x *ActionSuccess) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[319] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12563,63 +16140,48 @@ func (x *Owner) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Owner.ProtoReflect.Descriptor instead. -func (*Owner) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{245} +// Deprecated: Use ActionSuccess.ProtoReflect.Descriptor instead. +func (*ActionSuccess) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{319} } -func (x *Owner) GetId() string { +func (x *ActionSuccess) GetMessage() string { if x != nil { - return x.Id + return x.Message } return "" } -func (x *Owner) GetName() string { +func (x *ActionSuccess) GetTimestamp() string { if x != nil { - return x.Name + return x.Timestamp } return "" } -func (x *Owner) GetContact() *ContactInfo { - if x != nil { - return x.Contact - } - return nil -} - -func (x *Owner) GetPet() *Animal { - if x != nil { - return x.Pet - } - return nil -} - -type ContactInfo struct { +type ActionError struct { state protoimpl.MessageState `protogen:"open.v1"` - Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` - Phone string `protobuf:"bytes,2,opt,name=phone,proto3" json:"phone,omitempty"` - Address *Address `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ContactInfo) Reset() { - *x = ContactInfo{} - mi := &file_product_proto_msgTypes[246] +func (x *ActionError) Reset() { + *x = ActionError{} + mi := &file_product_proto_msgTypes[320] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ContactInfo) String() string { +func (x *ActionError) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContactInfo) ProtoMessage() {} +func (*ActionError) ProtoMessage() {} -func (x *ContactInfo) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[246] +func (x *ActionError) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[320] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12630,57 +16192,50 @@ func (x *ContactInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContactInfo.ProtoReflect.Descriptor instead. -func (*ContactInfo) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{246} -} - -func (x *ContactInfo) GetEmail() string { - if x != nil { - return x.Email - } - return "" +// Deprecated: Use ActionError.ProtoReflect.Descriptor instead. +func (*ActionError) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{320} } -func (x *ContactInfo) GetPhone() string { +func (x *ActionError) GetMessage() string { if x != nil { - return x.Phone + return x.Message } return "" } -func (x *ContactInfo) GetAddress() *Address { +func (x *ActionError) GetCode() string { if x != nil { - return x.Address + return x.Code } - return nil + return "" } -type Address struct { +type TestDetails struct { state protoimpl.MessageState `protogen:"open.v1"` - Street string `protobuf:"bytes,1,opt,name=street,proto3" json:"street,omitempty"` - City string `protobuf:"bytes,2,opt,name=city,proto3" json:"city,omitempty"` - Country string `protobuf:"bytes,3,opt,name=country,proto3" json:"country,omitempty"` - ZipCode string `protobuf:"bytes,4,opt,name=zip_code,json=zipCode,proto3" json:"zip_code,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + Pet *Animal `protobuf:"bytes,3,opt,name=pet,proto3" json:"pet,omitempty"` + Status *ActionResult `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *Address) Reset() { - *x = Address{} - mi := &file_product_proto_msgTypes[247] +func (x *TestDetails) Reset() { + *x = TestDetails{} + mi := &file_product_proto_msgTypes[321] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *Address) String() string { +func (x *TestDetails) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Address) ProtoMessage() {} +func (*TestDetails) ProtoMessage() {} -func (x *Address) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[247] +func (x *TestDetails) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[321] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12691,64 +16246,62 @@ func (x *Address) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Address.ProtoReflect.Descriptor instead. -func (*Address) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{247} +// Deprecated: Use TestDetails.ProtoReflect.Descriptor instead. +func (*TestDetails) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{321} } -func (x *Address) GetStreet() string { +func (x *TestDetails) GetId() string { if x != nil { - return x.Street + return x.Id } return "" } -func (x *Address) GetCity() string { +func (x *TestDetails) GetSummary() string { if x != nil { - return x.City + return x.Summary } return "" } -func (x *Address) GetCountry() string { +func (x *TestDetails) GetPet() *Animal { if x != nil { - return x.Country + return x.Pet } - return "" + return nil } -func (x *Address) GetZipCode() string { +func (x *TestDetails) GetStatus() *ActionResult { if x != nil { - return x.ZipCode + return x.Status } - return "" + return nil } -type CatBreed struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Origin string `protobuf:"bytes,3,opt,name=origin,proto3" json:"origin,omitempty"` - Characteristics *BreedCharacteristics `protobuf:"bytes,4,opt,name=characteristics,proto3" json:"characteristics,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type CategoryInput struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Kind CategoryKind `protobuf:"varint,2,opt,name=kind,proto3,enum=productv1.CategoryKind" json:"kind,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *CatBreed) Reset() { - *x = CatBreed{} - mi := &file_product_proto_msgTypes[248] +func (x *CategoryInput) Reset() { + *x = CategoryInput{} + mi := &file_product_proto_msgTypes[322] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *CatBreed) String() string { +func (x *CategoryInput) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CatBreed) ProtoMessage() {} +func (*CategoryInput) ProtoMessage() {} -func (x *CatBreed) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[248] +func (x *CategoryInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[322] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12759,64 +16312,50 @@ func (x *CatBreed) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CatBreed.ProtoReflect.Descriptor instead. -func (*CatBreed) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{248} -} - -func (x *CatBreed) GetId() string { - if x != nil { - return x.Id - } - return "" +// Deprecated: Use CategoryInput.ProtoReflect.Descriptor instead. +func (*CategoryInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{322} } -func (x *CatBreed) GetName() string { +func (x *CategoryInput) GetName() string { if x != nil { return x.Name } return "" } -func (x *CatBreed) GetOrigin() string { - if x != nil { - return x.Origin - } - return "" -} - -func (x *CatBreed) GetCharacteristics() *BreedCharacteristics { +func (x *CategoryInput) GetKind() CategoryKind { if x != nil { - return x.Characteristics + return x.Kind } - return nil + return CategoryKind_CATEGORY_KIND_UNSPECIFIED } -type DogBreed struct { - state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Origin string `protobuf:"bytes,3,opt,name=origin,proto3" json:"origin,omitempty"` - Characteristics *BreedCharacteristics `protobuf:"bytes,4,opt,name=characteristics,proto3" json:"characteristics,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type ProductCountFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + MinPrice *wrapperspb.DoubleValue `protobuf:"bytes,1,opt,name=min_price,json=minPrice,proto3" json:"min_price,omitempty"` + MaxPrice *wrapperspb.DoubleValue `protobuf:"bytes,2,opt,name=max_price,json=maxPrice,proto3" json:"max_price,omitempty"` + InStock *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=in_stock,json=inStock,proto3" json:"in_stock,omitempty"` + SearchTerm *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DogBreed) Reset() { - *x = DogBreed{} - mi := &file_product_proto_msgTypes[249] +func (x *ProductCountFilter) Reset() { + *x = ProductCountFilter{} + mi := &file_product_proto_msgTypes[323] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *DogBreed) String() string { +func (x *ProductCountFilter) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DogBreed) ProtoMessage() {} +func (*ProductCountFilter) ProtoMessage() {} -func (x *DogBreed) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[249] +func (x *ProductCountFilter) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[323] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12827,63 +16366,65 @@ func (x *DogBreed) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DogBreed.ProtoReflect.Descriptor instead. -func (*DogBreed) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{249} +// Deprecated: Use ProductCountFilter.ProtoReflect.Descriptor instead. +func (*ProductCountFilter) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{323} } -func (x *DogBreed) GetId() string { +func (x *ProductCountFilter) GetMinPrice() *wrapperspb.DoubleValue { if x != nil { - return x.Id + return x.MinPrice } - return "" + return nil } -func (x *DogBreed) GetName() string { +func (x *ProductCountFilter) GetMaxPrice() *wrapperspb.DoubleValue { if x != nil { - return x.Name + return x.MaxPrice } - return "" + return nil } -func (x *DogBreed) GetOrigin() string { +func (x *ProductCountFilter) GetInStock() *wrapperspb.BoolValue { if x != nil { - return x.Origin + return x.InStock } - return "" + return nil } -func (x *DogBreed) GetCharacteristics() *BreedCharacteristics { +func (x *ProductCountFilter) GetSearchTerm() *wrapperspb.StringValue { if x != nil { - return x.Characteristics + return x.SearchTerm } return nil } -type BreedCharacteristics struct { - state protoimpl.MessageState `protogen:"open.v1"` - Size string `protobuf:"bytes,1,opt,name=size,proto3" json:"size,omitempty"` - Temperament string `protobuf:"bytes,2,opt,name=temperament,proto3" json:"temperament,omitempty"` - Lifespan string `protobuf:"bytes,3,opt,name=lifespan,proto3" json:"lifespan,omitempty"` +type SubcategoryItemFilter struct { + state protoimpl.MessageState `protogen:"open.v1"` + MinPrice *wrapperspb.DoubleValue `protobuf:"bytes,1,opt,name=min_price,json=minPrice,proto3" json:"min_price,omitempty"` + MaxPrice *wrapperspb.DoubleValue `protobuf:"bytes,2,opt,name=max_price,json=maxPrice,proto3" json:"max_price,omitempty"` + InStock *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=in_stock,json=inStock,proto3" json:"in_stock,omitempty"` + IsActive *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + SearchTerm *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *BreedCharacteristics) Reset() { - *x = BreedCharacteristics{} - mi := &file_product_proto_msgTypes[250] +func (x *SubcategoryItemFilter) Reset() { + *x = SubcategoryItemFilter{} + mi := &file_product_proto_msgTypes[324] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *BreedCharacteristics) String() string { +func (x *SubcategoryItemFilter) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BreedCharacteristics) ProtoMessage() {} +func (*SubcategoryItemFilter) ProtoMessage() {} -func (x *BreedCharacteristics) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[250] +func (x *SubcategoryItemFilter) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[324] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12894,55 +16435,70 @@ func (x *BreedCharacteristics) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BreedCharacteristics.ProtoReflect.Descriptor instead. -func (*BreedCharacteristics) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{250} +// Deprecated: Use SubcategoryItemFilter.ProtoReflect.Descriptor instead. +func (*SubcategoryItemFilter) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{324} } -func (x *BreedCharacteristics) GetSize() string { +func (x *SubcategoryItemFilter) GetMinPrice() *wrapperspb.DoubleValue { if x != nil { - return x.Size + return x.MinPrice } - return "" + return nil } -func (x *BreedCharacteristics) GetTemperament() string { +func (x *SubcategoryItemFilter) GetMaxPrice() *wrapperspb.DoubleValue { if x != nil { - return x.Temperament + return x.MaxPrice } - return "" + return nil } -func (x *BreedCharacteristics) GetLifespan() string { +func (x *SubcategoryItemFilter) GetInStock() *wrapperspb.BoolValue { if x != nil { - return x.Lifespan + return x.InStock } - return "" + return nil } -type ActionSuccess struct { +func (x *SubcategoryItemFilter) GetIsActive() *wrapperspb.BoolValue { + if x != nil { + return x.IsActive + } + return nil +} + +func (x *SubcategoryItemFilter) GetSearchTerm() *wrapperspb.StringValue { + if x != nil { + return x.SearchTerm + } + return nil +} + +type ShippingEstimateInput struct { state protoimpl.MessageState `protogen:"open.v1"` - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Timestamp string `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + Destination ShippingDestination `protobuf:"varint,1,opt,name=destination,proto3,enum=productv1.ShippingDestination" json:"destination,omitempty"` + Weight float64 `protobuf:"fixed64,2,opt,name=weight,proto3" json:"weight,omitempty"` + Expedited *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=expedited,proto3" json:"expedited,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ActionSuccess) Reset() { - *x = ActionSuccess{} - mi := &file_product_proto_msgTypes[251] +func (x *ShippingEstimateInput) Reset() { + *x = ShippingEstimateInput{} + mi := &file_product_proto_msgTypes[325] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ActionSuccess) String() string { +func (x *ShippingEstimateInput) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ActionSuccess) ProtoMessage() {} +func (*ShippingEstimateInput) ProtoMessage() {} -func (x *ActionSuccess) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[251] +func (x *ShippingEstimateInput) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[325] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12953,48 +16509,54 @@ func (x *ActionSuccess) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ActionSuccess.ProtoReflect.Descriptor instead. -func (*ActionSuccess) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{251} +// Deprecated: Use ShippingEstimateInput.ProtoReflect.Descriptor instead. +func (*ShippingEstimateInput) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{325} } -func (x *ActionSuccess) GetMessage() string { +func (x *ShippingEstimateInput) GetDestination() ShippingDestination { if x != nil { - return x.Message + return x.Destination + } + return ShippingDestination_SHIPPING_DESTINATION_UNSPECIFIED +} + +func (x *ShippingEstimateInput) GetWeight() float64 { + if x != nil { + return x.Weight } - return "" + return 0 } -func (x *ActionSuccess) GetTimestamp() string { +func (x *ShippingEstimateInput) GetExpedited() *wrapperspb.BoolValue { if x != nil { - return x.Timestamp + return x.Expedited } - return "" + return nil } -type ActionError struct { +type ListOfAuthorFilter_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` - Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Items []*AuthorFilter `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ActionError) Reset() { - *x = ActionError{} - mi := &file_product_proto_msgTypes[252] +func (x *ListOfAuthorFilter_List) Reset() { + *x = ListOfAuthorFilter_List{} + mi := &file_product_proto_msgTypes[326] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ActionError) String() string { +func (x *ListOfAuthorFilter_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ActionError) ProtoMessage() {} +func (*ListOfAuthorFilter_List) ProtoMessage() {} -func (x *ActionError) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[252] +func (x *ListOfAuthorFilter_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[326] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13005,50 +16567,40 @@ func (x *ActionError) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ActionError.ProtoReflect.Descriptor instead. -func (*ActionError) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{252} -} - -func (x *ActionError) GetMessage() string { - if x != nil { - return x.Message - } - return "" +// Deprecated: Use ListOfAuthorFilter_List.ProtoReflect.Descriptor instead. +func (*ListOfAuthorFilter_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{0, 0} } -func (x *ActionError) GetCode() string { +func (x *ListOfAuthorFilter_List) GetItems() []*AuthorFilter { if x != nil { - return x.Code + return x.Items } - return "" + return nil } -type TestDetails struct { +type ListOfAuthorInput_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - Pet *Animal `protobuf:"bytes,3,opt,name=pet,proto3" json:"pet,omitempty"` - Status *ActionResult `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` + Items []*AuthorInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *TestDetails) Reset() { - *x = TestDetails{} - mi := &file_product_proto_msgTypes[253] +func (x *ListOfAuthorInput_List) Reset() { + *x = ListOfAuthorInput_List{} + mi := &file_product_proto_msgTypes[327] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TestDetails) String() string { +func (x *ListOfAuthorInput_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TestDetails) ProtoMessage() {} +func (*ListOfAuthorInput_List) ProtoMessage() {} -func (x *TestDetails) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[253] +func (x *ListOfAuthorInput_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[327] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13059,62 +16611,40 @@ func (x *TestDetails) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TestDetails.ProtoReflect.Descriptor instead. -func (*TestDetails) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{253} -} - -func (x *TestDetails) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *TestDetails) GetSummary() string { - if x != nil { - return x.Summary - } - return "" -} - -func (x *TestDetails) GetPet() *Animal { - if x != nil { - return x.Pet - } - return nil +// Deprecated: Use ListOfAuthorInput_List.ProtoReflect.Descriptor instead. +func (*ListOfAuthorInput_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{1, 0} } -func (x *TestDetails) GetStatus() *ActionResult { +func (x *ListOfAuthorInput_List) GetItems() []*AuthorInput { if x != nil { - return x.Status + return x.Items } return nil } -type CategoryInput struct { +type ListOfBlogPost_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Kind CategoryKind `protobuf:"varint,2,opt,name=kind,proto3,enum=productv1.CategoryKind" json:"kind,omitempty"` + Items []*BlogPost `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *CategoryInput) Reset() { - *x = CategoryInput{} - mi := &file_product_proto_msgTypes[254] +func (x *ListOfBlogPost_List) Reset() { + *x = ListOfBlogPost_List{} + mi := &file_product_proto_msgTypes[328] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *CategoryInput) String() string { +func (x *ListOfBlogPost_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CategoryInput) ProtoMessage() {} +func (*ListOfBlogPost_List) ProtoMessage() {} -func (x *CategoryInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[254] +func (x *ListOfBlogPost_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[328] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13125,50 +16655,40 @@ func (x *CategoryInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CategoryInput.ProtoReflect.Descriptor instead. -func (*CategoryInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{254} -} - -func (x *CategoryInput) GetName() string { - if x != nil { - return x.Name - } - return "" +// Deprecated: Use ListOfBlogPost_List.ProtoReflect.Descriptor instead. +func (*ListOfBlogPost_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{2, 0} } -func (x *CategoryInput) GetKind() CategoryKind { +func (x *ListOfBlogPost_List) GetItems() []*BlogPost { if x != nil { - return x.Kind + return x.Items } - return CategoryKind_CATEGORY_KIND_UNSPECIFIED + return nil } -type ProductCountFilter struct { - state protoimpl.MessageState `protogen:"open.v1"` - MinPrice *wrapperspb.DoubleValue `protobuf:"bytes,1,opt,name=min_price,json=minPrice,proto3" json:"min_price,omitempty"` - MaxPrice *wrapperspb.DoubleValue `protobuf:"bytes,2,opt,name=max_price,json=maxPrice,proto3" json:"max_price,omitempty"` - InStock *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=in_stock,json=inStock,proto3" json:"in_stock,omitempty"` - SearchTerm *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"` +type ListOfBlogPostFilter_List struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*BlogPostFilter `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ProductCountFilter) Reset() { - *x = ProductCountFilter{} - mi := &file_product_proto_msgTypes[255] +func (x *ListOfBlogPostFilter_List) Reset() { + *x = ListOfBlogPostFilter_List{} + mi := &file_product_proto_msgTypes[329] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ProductCountFilter) String() string { +func (x *ListOfBlogPostFilter_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProductCountFilter) ProtoMessage() {} +func (*ListOfBlogPostFilter_List) ProtoMessage() {} -func (x *ProductCountFilter) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[255] +func (x *ListOfBlogPostFilter_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[329] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13179,65 +16699,40 @@ func (x *ProductCountFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProductCountFilter.ProtoReflect.Descriptor instead. -func (*ProductCountFilter) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{255} -} - -func (x *ProductCountFilter) GetMinPrice() *wrapperspb.DoubleValue { - if x != nil { - return x.MinPrice - } - return nil -} - -func (x *ProductCountFilter) GetMaxPrice() *wrapperspb.DoubleValue { - if x != nil { - return x.MaxPrice - } - return nil -} - -func (x *ProductCountFilter) GetInStock() *wrapperspb.BoolValue { - if x != nil { - return x.InStock - } - return nil +// Deprecated: Use ListOfBlogPostFilter_List.ProtoReflect.Descriptor instead. +func (*ListOfBlogPostFilter_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{3, 0} } -func (x *ProductCountFilter) GetSearchTerm() *wrapperspb.StringValue { +func (x *ListOfBlogPostFilter_List) GetItems() []*BlogPostFilter { if x != nil { - return x.SearchTerm + return x.Items } return nil } -type SubcategoryItemFilter struct { - state protoimpl.MessageState `protogen:"open.v1"` - MinPrice *wrapperspb.DoubleValue `protobuf:"bytes,1,opt,name=min_price,json=minPrice,proto3" json:"min_price,omitempty"` - MaxPrice *wrapperspb.DoubleValue `protobuf:"bytes,2,opt,name=max_price,json=maxPrice,proto3" json:"max_price,omitempty"` - InStock *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=in_stock,json=inStock,proto3" json:"in_stock,omitempty"` - IsActive *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` - SearchTerm *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=search_term,json=searchTerm,proto3" json:"search_term,omitempty"` +type ListOfBlogPostInput_List struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []*BlogPostInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *SubcategoryItemFilter) Reset() { - *x = SubcategoryItemFilter{} - mi := &file_product_proto_msgTypes[256] +func (x *ListOfBlogPostInput_List) Reset() { + *x = ListOfBlogPostInput_List{} + mi := &file_product_proto_msgTypes[330] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *SubcategoryItemFilter) String() string { +func (x *ListOfBlogPostInput_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SubcategoryItemFilter) ProtoMessage() {} +func (*ListOfBlogPostInput_List) ProtoMessage() {} -func (x *SubcategoryItemFilter) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[256] +func (x *ListOfBlogPostInput_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[330] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13248,70 +16743,84 @@ func (x *SubcategoryItemFilter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SubcategoryItemFilter.ProtoReflect.Descriptor instead. -func (*SubcategoryItemFilter) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{256} +// Deprecated: Use ListOfBlogPostInput_List.ProtoReflect.Descriptor instead. +func (*ListOfBlogPostInput_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{4, 0} } -func (x *SubcategoryItemFilter) GetMinPrice() *wrapperspb.DoubleValue { +func (x *ListOfBlogPostInput_List) GetItems() []*BlogPostInput { if x != nil { - return x.MinPrice + return x.Items } return nil } -func (x *SubcategoryItemFilter) GetMaxPrice() *wrapperspb.DoubleValue { - if x != nil { - return x.MaxPrice - } - return nil +type ListOfBoolean_List struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []bool `protobuf:"varint,1,rep,packed,name=items,proto3" json:"items,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *SubcategoryItemFilter) GetInStock() *wrapperspb.BoolValue { - if x != nil { - return x.InStock - } - return nil +func (x *ListOfBoolean_List) Reset() { + *x = ListOfBoolean_List{} + mi := &file_product_proto_msgTypes[331] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SubcategoryItemFilter) GetIsActive() *wrapperspb.BoolValue { +func (x *ListOfBoolean_List) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListOfBoolean_List) ProtoMessage() {} + +func (x *ListOfBoolean_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[331] if x != nil { - return x.IsActive + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *SubcategoryItemFilter) GetSearchTerm() *wrapperspb.StringValue { +// Deprecated: Use ListOfBoolean_List.ProtoReflect.Descriptor instead. +func (*ListOfBoolean_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{5, 0} +} + +func (x *ListOfBoolean_List) GetItems() []bool { if x != nil { - return x.SearchTerm + return x.Items } return nil } -type ShippingEstimateInput struct { +type ListOfCategory_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Destination ShippingDestination `protobuf:"varint,1,opt,name=destination,proto3,enum=productv1.ShippingDestination" json:"destination,omitempty"` - Weight float64 `protobuf:"fixed64,2,opt,name=weight,proto3" json:"weight,omitempty"` - Expedited *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=expedited,proto3" json:"expedited,omitempty"` + Items []*Category `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ShippingEstimateInput) Reset() { - *x = ShippingEstimateInput{} - mi := &file_product_proto_msgTypes[257] +func (x *ListOfCategory_List) Reset() { + *x = ListOfCategory_List{} + mi := &file_product_proto_msgTypes[332] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ShippingEstimateInput) String() string { +func (x *ListOfCategory_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ShippingEstimateInput) ProtoMessage() {} +func (*ListOfCategory_List) ProtoMessage() {} -func (x *ShippingEstimateInput) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[257] +func (x *ListOfCategory_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[332] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13322,54 +16831,40 @@ func (x *ShippingEstimateInput) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ShippingEstimateInput.ProtoReflect.Descriptor instead. -func (*ShippingEstimateInput) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{257} -} - -func (x *ShippingEstimateInput) GetDestination() ShippingDestination { - if x != nil { - return x.Destination - } - return ShippingDestination_SHIPPING_DESTINATION_UNSPECIFIED -} - -func (x *ShippingEstimateInput) GetWeight() float64 { - if x != nil { - return x.Weight - } - return 0 +// Deprecated: Use ListOfCategory_List.ProtoReflect.Descriptor instead. +func (*ListOfCategory_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{6, 0} } -func (x *ShippingEstimateInput) GetExpedited() *wrapperspb.BoolValue { +func (x *ListOfCategory_List) GetItems() []*Category { if x != nil { - return x.Expedited + return x.Items } return nil } -type ListOfAuthorFilter_List struct { +type ListOfCategoryInput_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*AuthorFilter `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*CategoryInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfAuthorFilter_List) Reset() { - *x = ListOfAuthorFilter_List{} - mi := &file_product_proto_msgTypes[258] +func (x *ListOfCategoryInput_List) Reset() { + *x = ListOfCategoryInput_List{} + mi := &file_product_proto_msgTypes[333] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfAuthorFilter_List) String() string { +func (x *ListOfCategoryInput_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfAuthorFilter_List) ProtoMessage() {} +func (*ListOfCategoryInput_List) ProtoMessage() {} -func (x *ListOfAuthorFilter_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[258] +func (x *ListOfCategoryInput_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[333] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13380,40 +16875,40 @@ func (x *ListOfAuthorFilter_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfAuthorFilter_List.ProtoReflect.Descriptor instead. -func (*ListOfAuthorFilter_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{0, 0} +// Deprecated: Use ListOfCategoryInput_List.ProtoReflect.Descriptor instead. +func (*ListOfCategoryInput_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{7, 0} } -func (x *ListOfAuthorFilter_List) GetItems() []*AuthorFilter { +func (x *ListOfCategoryInput_List) GetItems() []*CategoryInput { if x != nil { return x.Items } return nil } -type ListOfAuthorInput_List struct { +type ListOfFloat_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*AuthorInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []float64 `protobuf:"fixed64,1,rep,packed,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfAuthorInput_List) Reset() { - *x = ListOfAuthorInput_List{} - mi := &file_product_proto_msgTypes[259] +func (x *ListOfFloat_List) Reset() { + *x = ListOfFloat_List{} + mi := &file_product_proto_msgTypes[334] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfAuthorInput_List) String() string { +func (x *ListOfFloat_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfAuthorInput_List) ProtoMessage() {} +func (*ListOfFloat_List) ProtoMessage() {} -func (x *ListOfAuthorInput_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[259] +func (x *ListOfFloat_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[334] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13424,40 +16919,40 @@ func (x *ListOfAuthorInput_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfAuthorInput_List.ProtoReflect.Descriptor instead. -func (*ListOfAuthorInput_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{1, 0} +// Deprecated: Use ListOfFloat_List.ProtoReflect.Descriptor instead. +func (*ListOfFloat_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{8, 0} } -func (x *ListOfAuthorInput_List) GetItems() []*AuthorInput { +func (x *ListOfFloat_List) GetItems() []float64 { if x != nil { return x.Items } return nil } -type ListOfBlogPost_List struct { +type ListOfListOfCategory_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*BlogPost `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*ListOfCategory `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfBlogPost_List) Reset() { - *x = ListOfBlogPost_List{} - mi := &file_product_proto_msgTypes[260] +func (x *ListOfListOfCategory_List) Reset() { + *x = ListOfListOfCategory_List{} + mi := &file_product_proto_msgTypes[335] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfBlogPost_List) String() string { +func (x *ListOfListOfCategory_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfBlogPost_List) ProtoMessage() {} +func (*ListOfListOfCategory_List) ProtoMessage() {} -func (x *ListOfBlogPost_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[260] +func (x *ListOfListOfCategory_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[335] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13468,40 +16963,40 @@ func (x *ListOfBlogPost_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfBlogPost_List.ProtoReflect.Descriptor instead. -func (*ListOfBlogPost_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{2, 0} +// Deprecated: Use ListOfListOfCategory_List.ProtoReflect.Descriptor instead. +func (*ListOfListOfCategory_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{9, 0} } -func (x *ListOfBlogPost_List) GetItems() []*BlogPost { +func (x *ListOfListOfCategory_List) GetItems() []*ListOfCategory { if x != nil { return x.Items } return nil } -type ListOfBlogPostFilter_List struct { +type ListOfListOfCategoryInput_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*BlogPostFilter `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*ListOfCategoryInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfBlogPostFilter_List) Reset() { - *x = ListOfBlogPostFilter_List{} - mi := &file_product_proto_msgTypes[261] +func (x *ListOfListOfCategoryInput_List) Reset() { + *x = ListOfListOfCategoryInput_List{} + mi := &file_product_proto_msgTypes[336] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfBlogPostFilter_List) String() string { +func (x *ListOfListOfCategoryInput_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfBlogPostFilter_List) ProtoMessage() {} +func (*ListOfListOfCategoryInput_List) ProtoMessage() {} -func (x *ListOfBlogPostFilter_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[261] +func (x *ListOfListOfCategoryInput_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[336] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13512,40 +17007,40 @@ func (x *ListOfBlogPostFilter_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfBlogPostFilter_List.ProtoReflect.Descriptor instead. -func (*ListOfBlogPostFilter_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{3, 0} +// Deprecated: Use ListOfListOfCategoryInput_List.ProtoReflect.Descriptor instead. +func (*ListOfListOfCategoryInput_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{10, 0} } -func (x *ListOfBlogPostFilter_List) GetItems() []*BlogPostFilter { +func (x *ListOfListOfCategoryInput_List) GetItems() []*ListOfCategoryInput { if x != nil { return x.Items } return nil } -type ListOfBlogPostInput_List struct { +type ListOfListOfString_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*BlogPostInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*ListOfString `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfBlogPostInput_List) Reset() { - *x = ListOfBlogPostInput_List{} - mi := &file_product_proto_msgTypes[262] +func (x *ListOfListOfString_List) Reset() { + *x = ListOfListOfString_List{} + mi := &file_product_proto_msgTypes[337] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfBlogPostInput_List) String() string { +func (x *ListOfListOfString_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfBlogPostInput_List) ProtoMessage() {} +func (*ListOfListOfString_List) ProtoMessage() {} -func (x *ListOfBlogPostInput_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[262] +func (x *ListOfListOfString_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[337] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13556,40 +17051,40 @@ func (x *ListOfBlogPostInput_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfBlogPostInput_List.ProtoReflect.Descriptor instead. -func (*ListOfBlogPostInput_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{4, 0} +// Deprecated: Use ListOfListOfString_List.ProtoReflect.Descriptor instead. +func (*ListOfListOfString_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{11, 0} } -func (x *ListOfBlogPostInput_List) GetItems() []*BlogPostInput { +func (x *ListOfListOfString_List) GetItems() []*ListOfString { if x != nil { return x.Items } return nil } -type ListOfBoolean_List struct { +type ListOfListOfUser_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []bool `protobuf:"varint,1,rep,packed,name=items,proto3" json:"items,omitempty"` + Items []*ListOfUser `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfBoolean_List) Reset() { - *x = ListOfBoolean_List{} - mi := &file_product_proto_msgTypes[263] +func (x *ListOfListOfUser_List) Reset() { + *x = ListOfListOfUser_List{} + mi := &file_product_proto_msgTypes[338] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfBoolean_List) String() string { +func (x *ListOfListOfUser_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfBoolean_List) ProtoMessage() {} +func (*ListOfListOfUser_List) ProtoMessage() {} -func (x *ListOfBoolean_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[263] +func (x *ListOfListOfUser_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[338] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13600,40 +17095,40 @@ func (x *ListOfBoolean_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfBoolean_List.ProtoReflect.Descriptor instead. -func (*ListOfBoolean_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{5, 0} +// Deprecated: Use ListOfListOfUser_List.ProtoReflect.Descriptor instead. +func (*ListOfListOfUser_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{12, 0} } -func (x *ListOfBoolean_List) GetItems() []bool { +func (x *ListOfListOfUser_List) GetItems() []*ListOfUser { if x != nil { return x.Items } return nil } -type ListOfCategory_List struct { +type ListOfListOfUserInput_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*Category `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*ListOfUserInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfCategory_List) Reset() { - *x = ListOfCategory_List{} - mi := &file_product_proto_msgTypes[264] +func (x *ListOfListOfUserInput_List) Reset() { + *x = ListOfListOfUserInput_List{} + mi := &file_product_proto_msgTypes[339] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfCategory_List) String() string { +func (x *ListOfListOfUserInput_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfCategory_List) ProtoMessage() {} +func (*ListOfListOfUserInput_List) ProtoMessage() {} -func (x *ListOfCategory_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[264] +func (x *ListOfListOfUserInput_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[339] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13644,40 +17139,40 @@ func (x *ListOfCategory_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfCategory_List.ProtoReflect.Descriptor instead. -func (*ListOfCategory_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use ListOfListOfUserInput_List.ProtoReflect.Descriptor instead. +func (*ListOfListOfUserInput_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{13, 0} } -func (x *ListOfCategory_List) GetItems() []*Category { +func (x *ListOfListOfUserInput_List) GetItems() []*ListOfUserInput { if x != nil { return x.Items } return nil } -type ListOfCategoryInput_List struct { +type ListOfOrderLine_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*CategoryInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*OrderLine `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfCategoryInput_List) Reset() { - *x = ListOfCategoryInput_List{} - mi := &file_product_proto_msgTypes[265] +func (x *ListOfOrderLine_List) Reset() { + *x = ListOfOrderLine_List{} + mi := &file_product_proto_msgTypes[340] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfCategoryInput_List) String() string { +func (x *ListOfOrderLine_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfCategoryInput_List) ProtoMessage() {} +func (*ListOfOrderLine_List) ProtoMessage() {} -func (x *ListOfCategoryInput_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[265] +func (x *ListOfOrderLine_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[340] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13688,40 +17183,40 @@ func (x *ListOfCategoryInput_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfCategoryInput_List.ProtoReflect.Descriptor instead. -func (*ListOfCategoryInput_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{7, 0} +// Deprecated: Use ListOfOrderLine_List.ProtoReflect.Descriptor instead. +func (*ListOfOrderLine_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{14, 0} } -func (x *ListOfCategoryInput_List) GetItems() []*CategoryInput { +func (x *ListOfOrderLine_List) GetItems() []*OrderLine { if x != nil { return x.Items } return nil } -type ListOfFloat_List struct { +type ListOfProduct_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []float64 `protobuf:"fixed64,1,rep,packed,name=items,proto3" json:"items,omitempty"` + Items []*Product `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfFloat_List) Reset() { - *x = ListOfFloat_List{} - mi := &file_product_proto_msgTypes[266] +func (x *ListOfProduct_List) Reset() { + *x = ListOfProduct_List{} + mi := &file_product_proto_msgTypes[341] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfFloat_List) String() string { +func (x *ListOfProduct_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfFloat_List) ProtoMessage() {} +func (*ListOfProduct_List) ProtoMessage() {} -func (x *ListOfFloat_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[266] +func (x *ListOfProduct_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[341] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13732,40 +17227,40 @@ func (x *ListOfFloat_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfFloat_List.ProtoReflect.Descriptor instead. -func (*ListOfFloat_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{8, 0} +// Deprecated: Use ListOfProduct_List.ProtoReflect.Descriptor instead. +func (*ListOfProduct_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{15, 0} } -func (x *ListOfFloat_List) GetItems() []float64 { +func (x *ListOfProduct_List) GetItems() []*Product { if x != nil { return x.Items } return nil } -type ListOfListOfCategory_List struct { +type ListOfStorage_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ListOfCategory `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*Storage `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfListOfCategory_List) Reset() { - *x = ListOfListOfCategory_List{} - mi := &file_product_proto_msgTypes[267] +func (x *ListOfStorage_List) Reset() { + *x = ListOfStorage_List{} + mi := &file_product_proto_msgTypes[342] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfListOfCategory_List) String() string { +func (x *ListOfStorage_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfListOfCategory_List) ProtoMessage() {} +func (*ListOfStorage_List) ProtoMessage() {} -func (x *ListOfListOfCategory_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[267] +func (x *ListOfStorage_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[342] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13776,40 +17271,40 @@ func (x *ListOfListOfCategory_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfListOfCategory_List.ProtoReflect.Descriptor instead. -func (*ListOfListOfCategory_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{9, 0} +// Deprecated: Use ListOfStorage_List.ProtoReflect.Descriptor instead. +func (*ListOfStorage_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{16, 0} } -func (x *ListOfListOfCategory_List) GetItems() []*ListOfCategory { +func (x *ListOfStorage_List) GetItems() []*Storage { if x != nil { return x.Items } return nil } -type ListOfListOfCategoryInput_List struct { +type ListOfString_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ListOfCategoryInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []string `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfListOfCategoryInput_List) Reset() { - *x = ListOfListOfCategoryInput_List{} - mi := &file_product_proto_msgTypes[268] +func (x *ListOfString_List) Reset() { + *x = ListOfString_List{} + mi := &file_product_proto_msgTypes[343] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfListOfCategoryInput_List) String() string { +func (x *ListOfString_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfListOfCategoryInput_List) ProtoMessage() {} +func (*ListOfString_List) ProtoMessage() {} -func (x *ListOfListOfCategoryInput_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[268] +func (x *ListOfString_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[343] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13820,40 +17315,40 @@ func (x *ListOfListOfCategoryInput_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfListOfCategoryInput_List.ProtoReflect.Descriptor instead. -func (*ListOfListOfCategoryInput_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{10, 0} +// Deprecated: Use ListOfString_List.ProtoReflect.Descriptor instead. +func (*ListOfString_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{17, 0} } -func (x *ListOfListOfCategoryInput_List) GetItems() []*ListOfCategoryInput { +func (x *ListOfString_List) GetItems() []string { if x != nil { return x.Items } return nil } -type ListOfListOfString_List struct { +type ListOfSubcategory_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ListOfString `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*Subcategory `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfListOfString_List) Reset() { - *x = ListOfListOfString_List{} - mi := &file_product_proto_msgTypes[269] +func (x *ListOfSubcategory_List) Reset() { + *x = ListOfSubcategory_List{} + mi := &file_product_proto_msgTypes[344] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfListOfString_List) String() string { +func (x *ListOfSubcategory_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfListOfString_List) ProtoMessage() {} +func (*ListOfSubcategory_List) ProtoMessage() {} -func (x *ListOfListOfString_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[269] +func (x *ListOfSubcategory_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[344] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13864,40 +17359,40 @@ func (x *ListOfListOfString_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfListOfString_List.ProtoReflect.Descriptor instead. -func (*ListOfListOfString_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{11, 0} +// Deprecated: Use ListOfSubcategory_List.ProtoReflect.Descriptor instead. +func (*ListOfSubcategory_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{18, 0} } -func (x *ListOfListOfString_List) GetItems() []*ListOfString { +func (x *ListOfSubcategory_List) GetItems() []*Subcategory { if x != nil { return x.Items } return nil } -type ListOfListOfUser_List struct { +type ListOfUser_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ListOfUser `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*User `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfListOfUser_List) Reset() { - *x = ListOfListOfUser_List{} - mi := &file_product_proto_msgTypes[270] +func (x *ListOfUser_List) Reset() { + *x = ListOfUser_List{} + mi := &file_product_proto_msgTypes[345] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfListOfUser_List) String() string { +func (x *ListOfUser_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfListOfUser_List) ProtoMessage() {} +func (*ListOfUser_List) ProtoMessage() {} -func (x *ListOfListOfUser_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[270] +func (x *ListOfUser_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[345] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13908,40 +17403,40 @@ func (x *ListOfListOfUser_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfListOfUser_List.ProtoReflect.Descriptor instead. -func (*ListOfListOfUser_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{12, 0} +// Deprecated: Use ListOfUser_List.ProtoReflect.Descriptor instead. +func (*ListOfUser_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{19, 0} } -func (x *ListOfListOfUser_List) GetItems() []*ListOfUser { +func (x *ListOfUser_List) GetItems() []*User { if x != nil { return x.Items } return nil } -type ListOfListOfUserInput_List struct { +type ListOfUserInput_List struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*ListOfUserInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Items []*UserInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfListOfUserInput_List) Reset() { - *x = ListOfListOfUserInput_List{} - mi := &file_product_proto_msgTypes[271] +func (x *ListOfUserInput_List) Reset() { + *x = ListOfUserInput_List{} + mi := &file_product_proto_msgTypes[346] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfListOfUserInput_List) String() string { +func (x *ListOfUserInput_List) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfListOfUserInput_List) ProtoMessage() {} +func (*ListOfUserInput_List) ProtoMessage() {} -func (x *ListOfListOfUserInput_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[271] +func (x *ListOfUserInput_List) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[346] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13952,40 +17447,40 @@ func (x *ListOfListOfUserInput_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfListOfUserInput_List.ProtoReflect.Descriptor instead. -func (*ListOfListOfUserInput_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{13, 0} +// Deprecated: Use ListOfUserInput_List.ProtoReflect.Descriptor instead. +func (*ListOfUserInput_List) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{20, 0} } -func (x *ListOfListOfUserInput_List) GetItems() []*ListOfUserInput { +func (x *ListOfUserInput_List) GetItems() []*UserInput { if x != nil { return x.Items } return nil } -type ListOfOrderLine_List struct { - state protoimpl.MessageState `protogen:"open.v1"` - Items []*OrderLine `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type RequireStorageStockHealthScoreByIdFields_RestockData struct { + state protoimpl.MessageState `protogen:"open.v1"` + LastRestockDate string `protobuf:"bytes,1,opt,name=last_restock_date,json=lastRestockDate,proto3" json:"last_restock_date,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListOfOrderLine_List) Reset() { - *x = ListOfOrderLine_List{} - mi := &file_product_proto_msgTypes[272] +func (x *RequireStorageStockHealthScoreByIdFields_RestockData) Reset() { + *x = RequireStorageStockHealthScoreByIdFields_RestockData{} + mi := &file_product_proto_msgTypes[347] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfOrderLine_List) String() string { +func (x *RequireStorageStockHealthScoreByIdFields_RestockData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfOrderLine_List) ProtoMessage() {} +func (*RequireStorageStockHealthScoreByIdFields_RestockData) ProtoMessage() {} -func (x *ListOfOrderLine_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[272] +func (x *RequireStorageStockHealthScoreByIdFields_RestockData) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[347] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13996,40 +17491,41 @@ func (x *ListOfOrderLine_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfOrderLine_List.ProtoReflect.Descriptor instead. -func (*ListOfOrderLine_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{14, 0} +// Deprecated: Use RequireStorageStockHealthScoreByIdFields_RestockData.ProtoReflect.Descriptor instead. +func (*RequireStorageStockHealthScoreByIdFields_RestockData) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{224, 0} } -func (x *ListOfOrderLine_List) GetItems() []*OrderLine { +func (x *RequireStorageStockHealthScoreByIdFields_RestockData) GetLastRestockDate() string { if x != nil { - return x.Items + return x.LastRestockDate } - return nil + return "" } -type ListOfProduct_List struct { +type RequireStorageMetadataScoreByIdFields_StorageMetadata struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*Product `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Capacity int32 `protobuf:"varint,1,opt,name=capacity,proto3" json:"capacity,omitempty"` + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfProduct_List) Reset() { - *x = ListOfProduct_List{} - mi := &file_product_proto_msgTypes[273] +func (x *RequireStorageMetadataScoreByIdFields_StorageMetadata) Reset() { + *x = RequireStorageMetadataScoreByIdFields_StorageMetadata{} + mi := &file_product_proto_msgTypes[348] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfProduct_List) String() string { +func (x *RequireStorageMetadataScoreByIdFields_StorageMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfProduct_List) ProtoMessage() {} +func (*RequireStorageMetadataScoreByIdFields_StorageMetadata) ProtoMessage() {} -func (x *ListOfProduct_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[273] +func (x *RequireStorageMetadataScoreByIdFields_StorageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[348] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14040,40 +17536,49 @@ func (x *ListOfProduct_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfProduct_List.ProtoReflect.Descriptor instead. -func (*ListOfProduct_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{15, 0} +// Deprecated: Use RequireStorageMetadataScoreByIdFields_StorageMetadata.ProtoReflect.Descriptor instead. +func (*RequireStorageMetadataScoreByIdFields_StorageMetadata) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{239, 0} } -func (x *ListOfProduct_List) GetItems() []*Product { +func (x *RequireStorageMetadataScoreByIdFields_StorageMetadata) GetCapacity() int32 { if x != nil { - return x.Items + return x.Capacity } - return nil + return 0 } -type ListOfString_List struct { +func (x *RequireStorageMetadataScoreByIdFields_StorageMetadata) GetZone() string { + if x != nil { + return x.Zone + } + return "" +} + +type RequireStorageProcessedMetadataByIdFields_StorageMetadata struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []string `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Capacity int32 `protobuf:"varint,1,opt,name=capacity,proto3" json:"capacity,omitempty"` + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` + Priority int32 `protobuf:"varint,3,opt,name=priority,proto3" json:"priority,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfString_List) Reset() { - *x = ListOfString_List{} - mi := &file_product_proto_msgTypes[274] +func (x *RequireStorageProcessedMetadataByIdFields_StorageMetadata) Reset() { + *x = RequireStorageProcessedMetadataByIdFields_StorageMetadata{} + mi := &file_product_proto_msgTypes[349] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfString_List) String() string { +func (x *RequireStorageProcessedMetadataByIdFields_StorageMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfString_List) ProtoMessage() {} +func (*RequireStorageProcessedMetadataByIdFields_StorageMetadata) ProtoMessage() {} -func (x *ListOfString_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[274] +func (x *RequireStorageProcessedMetadataByIdFields_StorageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[349] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14084,40 +17589,55 @@ func (x *ListOfString_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfString_List.ProtoReflect.Descriptor instead. -func (*ListOfString_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{16, 0} +// Deprecated: Use RequireStorageProcessedMetadataByIdFields_StorageMetadata.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataByIdFields_StorageMetadata) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{244, 0} } -func (x *ListOfString_List) GetItems() []string { +func (x *RequireStorageProcessedMetadataByIdFields_StorageMetadata) GetCapacity() int32 { if x != nil { - return x.Items + return x.Capacity } - return nil + return 0 } -type ListOfSubcategory_List struct { +func (x *RequireStorageProcessedMetadataByIdFields_StorageMetadata) GetZone() string { + if x != nil { + return x.Zone + } + return "" +} + +func (x *RequireStorageProcessedMetadataByIdFields_StorageMetadata) GetPriority() int32 { + if x != nil { + return x.Priority + } + return 0 +} + +type RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*Subcategory `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Capacity int32 `protobuf:"varint,1,opt,name=capacity,proto3" json:"capacity,omitempty"` + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfSubcategory_List) Reset() { - *x = ListOfSubcategory_List{} - mi := &file_product_proto_msgTypes[275] +func (x *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) Reset() { + *x = RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata{} + mi := &file_product_proto_msgTypes[350] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfSubcategory_List) String() string { +func (x *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfSubcategory_List) ProtoMessage() {} +func (*RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) ProtoMessage() {} -func (x *ListOfSubcategory_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[275] +func (x *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[350] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14128,40 +17648,48 @@ func (x *ListOfSubcategory_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfSubcategory_List.ProtoReflect.Descriptor instead. -func (*ListOfSubcategory_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{17, 0} +// Deprecated: Use RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata.ProtoReflect.Descriptor instead. +func (*RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{249, 0} } -func (x *ListOfSubcategory_List) GetItems() []*Subcategory { +func (x *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) GetCapacity() int32 { if x != nil { - return x.Items + return x.Capacity } - return nil + return 0 } -type ListOfUser_List struct { +func (x *RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata) GetZone() string { + if x != nil { + return x.Zone + } + return "" +} + +type RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata struct { state protoimpl.MessageState `protogen:"open.v1"` - Items []*User `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + Capacity int32 `protobuf:"varint,1,opt,name=capacity,proto3" json:"capacity,omitempty"` + Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *ListOfUser_List) Reset() { - *x = ListOfUser_List{} - mi := &file_product_proto_msgTypes[276] +func (x *RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) Reset() { + *x = RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata{} + mi := &file_product_proto_msgTypes[351] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfUser_List) String() string { +func (x *RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfUser_List) ProtoMessage() {} +func (*RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) ProtoMessage() {} -func (x *ListOfUser_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[276] +func (x *RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[351] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14172,40 +17700,47 @@ func (x *ListOfUser_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfUser_List.ProtoReflect.Descriptor instead. -func (*ListOfUser_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{18, 0} +// Deprecated: Use RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata.ProtoReflect.Descriptor instead. +func (*RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{264, 0} } -func (x *ListOfUser_List) GetItems() []*User { +func (x *RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) GetCapacity() int32 { if x != nil { - return x.Items + return x.Capacity } - return nil + return 0 } -type ListOfUserInput_List struct { - state protoimpl.MessageState `protogen:"open.v1"` - Items []*UserInput `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +func (x *RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata) GetZone() string { + if x != nil { + return x.Zone + } + return "" } -func (x *ListOfUserInput_List) Reset() { - *x = ListOfUserInput_List{} - mi := &file_product_proto_msgTypes[277] +type RequireWarehouseStockHealthScoreByIdFields_RestockData struct { + state protoimpl.MessageState `protogen:"open.v1"` + LastRestockDate string `protobuf:"bytes,1,opt,name=last_restock_date,json=lastRestockDate,proto3" json:"last_restock_date,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RequireWarehouseStockHealthScoreByIdFields_RestockData) Reset() { + *x = RequireWarehouseStockHealthScoreByIdFields_RestockData{} + mi := &file_product_proto_msgTypes[352] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *ListOfUserInput_List) String() string { +func (x *RequireWarehouseStockHealthScoreByIdFields_RestockData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListOfUserInput_List) ProtoMessage() {} +func (*RequireWarehouseStockHealthScoreByIdFields_RestockData) ProtoMessage() {} -func (x *ListOfUserInput_List) ProtoReflect() protoreflect.Message { - mi := &file_product_proto_msgTypes[277] +func (x *RequireWarehouseStockHealthScoreByIdFields_RestockData) ProtoReflect() protoreflect.Message { + mi := &file_product_proto_msgTypes[352] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -14216,16 +17751,16 @@ func (x *ListOfUserInput_List) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListOfUserInput_List.ProtoReflect.Descriptor instead. -func (*ListOfUserInput_List) Descriptor() ([]byte, []int) { - return file_product_proto_rawDescGZIP(), []int{19, 0} +// Deprecated: Use RequireWarehouseStockHealthScoreByIdFields_RestockData.ProtoReflect.Descriptor instead. +func (*RequireWarehouseStockHealthScoreByIdFields_RestockData) Descriptor() ([]byte, []int) { + return file_product_proto_rawDescGZIP(), []int{269, 0} } -func (x *ListOfUserInput_List) GetItems() []*UserInput { +func (x *RequireWarehouseStockHealthScoreByIdFields_RestockData) GetLastRestockDate() string { if x != nil { - return x.Items + return x.LastRestockDate } - return nil + return "" } var File_product_proto protoreflect.FileDescriptor @@ -14296,7 +17831,11 @@ const file_product_proto_rawDesc = "" + "\rListOfProduct\x121\n" + "\x04list\x18\x01 \x01(\v2\x1d.productv1.ListOfProduct.ListR\x04list\x1a0\n" + "\x04List\x12(\n" + - "\x05items\x18\x01 \x03(\v2\x12.productv1.ProductR\x05items\"^\n" + + "\x05items\x18\x01 \x03(\v2\x12.productv1.ProductR\x05items\"t\n" + + "\rListOfStorage\x121\n" + + "\x04list\x18\x01 \x01(\v2\x1d.productv1.ListOfStorage.ListR\x04list\x1a0\n" + + "\x04List\x12(\n" + + "\x05items\x18\x01 \x03(\v2\x12.productv1.StorageR\x05items\"^\n" + "\fListOfString\x120\n" + "\x04list\x18\x01 \x01(\v2\x1c.productv1.ListOfString.ListR\x04list\x1a\x1c\n" + "\x04List\x12\x14\n" + @@ -14578,7 +18117,47 @@ const file_product_proto_rawDesc = "" + "\"ResolveProductProductDetailsResult\x12B\n" + "\x0fproduct_details\x18\x01 \x01(\v2\x19.productv1.ProductDetailsR\x0eproductDetails\"m\n" + "$ResolveProductProductDetailsResponse\x12E\n" + - "\x06result\x18\x01 \x03(\v2-.productv1.ResolveProductProductDetailsResultR\x06result\"Z\n" + + "\x06result\x18\x01 \x03(\v2-.productv1.ResolveProductProductDetailsResultR\x06result\"D\n" + + "\x1fResolveStorageStorageStatusArgs\x12!\n" + + "\fcheck_health\x18\x01 \x01(\bR\vcheckHealth\"H\n" + + "\"ResolveStorageStorageStatusContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"\xb8\x01\n" + + "\"ResolveStorageStorageStatusRequest\x12G\n" + + "\acontext\x18\x01 \x03(\v2-.productv1.ResolveStorageStorageStatusContextR\acontext\x12I\n" + + "\n" + + "field_args\x18\x02 \x01(\v2*.productv1.ResolveStorageStorageStatusArgsR\tfieldArgs\"c\n" + + "!ResolveStorageStorageStatusResult\x12>\n" + + "\x0estorage_status\x18\x01 \x01(\v2\x17.productv1.ActionResultR\rstorageStatus\"k\n" + + "#ResolveStorageStorageStatusResponse\x12D\n" + + "\x06result\x18\x01 \x03(\v2,.productv1.ResolveStorageStorageStatusResultR\x06result\"8\n" + + " ResolveStorageLinkedStoragesArgs\x12\x14\n" + + "\x05depth\x18\x01 \x01(\x05R\x05depth\"e\n" + + "#ResolveStorageLinkedStoragesContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n" + + "\blocation\x18\x03 \x01(\tR\blocation\"\xbb\x01\n" + + "#ResolveStorageLinkedStoragesRequest\x12H\n" + + "\acontext\x18\x01 \x03(\v2..productv1.ResolveStorageLinkedStoragesContextR\acontext\x12J\n" + + "\n" + + "field_args\x18\x02 \x01(\v2+.productv1.ResolveStorageLinkedStoragesArgsR\tfieldArgs\"a\n" + + "\"ResolveStorageLinkedStoragesResult\x12;\n" + + "\x0flinked_storages\x18\x01 \x03(\v2\x12.productv1.StorageR\x0elinkedStorages\"m\n" + + "$ResolveStorageLinkedStoragesResponse\x12E\n" + + "\x06result\x18\x01 \x03(\v2-.productv1.ResolveStorageLinkedStoragesResultR\x06result\"W\n" + + " ResolveStorageNearbyStoragesArgs\x123\n" + + "\x06radius\x18\x01 \x01(\v2\x1b.google.protobuf.Int32ValueR\x06radius\"Q\n" + + "#ResolveStorageNearbyStoragesContext\x12\x0e\n" + + "\x02id\x18\x01 \x01(\tR\x02id\x12\x1a\n" + + "\blocation\x18\x02 \x01(\tR\blocation\"\xbb\x01\n" + + "#ResolveStorageNearbyStoragesRequest\x12H\n" + + "\acontext\x18\x01 \x03(\v2..productv1.ResolveStorageNearbyStoragesContextR\acontext\x12J\n" + + "\n" + + "field_args\x18\x02 \x01(\v2+.productv1.ResolveStorageNearbyStoragesArgsR\tfieldArgs\"g\n" + + "\"ResolveStorageNearbyStoragesResult\x12A\n" + + "\x0fnearby_storages\x18\x01 \x01(\v2\x18.productv1.ListOfStorageR\x0enearbyStorages\"m\n" + + "$ResolveStorageNearbyStoragesResponse\x12E\n" + + "\x06result\x18\x01 \x03(\v2-.productv1.ResolveStorageNearbyStoragesResultR\x06result\"Z\n" + "\x1fResolveCategoryProductCountArgs\x127\n" + "\afilters\x18\x01 \x01(\v2\x1d.productv1.ProductCountFilterR\afilters\"H\n" + "\"ResolveCategoryProductCountContext\x12\x0e\n" + @@ -14735,7 +18314,138 @@ const file_product_proto_rawDesc = "" + "!ResolveTestContainerDetailsResult\x120\n" + "\adetails\x18\x01 \x01(\v2\x16.productv1.TestDetailsR\adetails\"k\n" + "#ResolveTestContainerDetailsResponse\x12D\n" + - "\x06result\x18\x01 \x03(\v2,.productv1.ResolveTestContainerDetailsResultR\x06result\"C\n" + + "\x06result\x18\x01 \x03(\v2,.productv1.ResolveTestContainerDetailsResultR\x06result\"{\n" + + ")RequireStorageStockHealthScoreByIdRequest\x12N\n" + + "\acontext\x18\x01 \x03(\v24.productv1.RequireStorageStockHealthScoreByIdContextR\acontext\"\xb2\x01\n" + + ")RequireStorageStockHealthScoreByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12K\n" + + "\x06fields\x18\x02 \x01(\v23.productv1.RequireStorageStockHealthScoreByIdFieldsR\x06fields\"y\n" + + "*RequireStorageStockHealthScoreByIdResponse\x12K\n" + + "\x06result\x18\x01 \x03(\v23.productv1.RequireStorageStockHealthScoreByIdResultR\x06result\"X\n" + + "(RequireStorageStockHealthScoreByIdResult\x12,\n" + + "\x12stock_health_score\x18\x01 \x01(\x01R\x10stockHealthScore\"\xe8\x01\n" + + "(RequireStorageStockHealthScoreByIdFields\x12\x1d\n" + + "\n" + + "item_count\x18\x01 \x01(\x05R\titemCount\x12b\n" + + "\frestock_data\x18\x02 \x01(\v2?.productv1.RequireStorageStockHealthScoreByIdFields.RestockDataR\vrestockData\x1a9\n" + + "\vRestockData\x12*\n" + + "\x11last_restock_date\x18\x01 \x01(\tR\x0flastRestockDate\"o\n" + + "#RequireStorageTagSummaryByIdRequest\x12H\n" + + "\acontext\x18\x01 \x03(\v2..productv1.RequireStorageTagSummaryByIdContextR\acontext\"\xa6\x01\n" + + "#RequireStorageTagSummaryByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12E\n" + + "\x06fields\x18\x02 \x01(\v2-.productv1.RequireStorageTagSummaryByIdFieldsR\x06fields\"m\n" + + "$RequireStorageTagSummaryByIdResponse\x12E\n" + + "\x06result\x18\x01 \x03(\v2-.productv1.RequireStorageTagSummaryByIdResultR\x06result\"E\n" + + "\"RequireStorageTagSummaryByIdResult\x12\x1f\n" + + "\vtag_summary\x18\x01 \x01(\tR\n" + + "tagSummary\"8\n" + + "\"RequireStorageTagSummaryByIdFields\x12\x12\n" + + "\x04tags\x18\x01 \x03(\tR\x04tags\"\x7f\n" + + "+RequireStorageOptionalTagSummaryByIdRequest\x12P\n" + + "\acontext\x18\x01 \x03(\v26.productv1.RequireStorageOptionalTagSummaryByIdContextR\acontext\"\xb6\x01\n" + + "+RequireStorageOptionalTagSummaryByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12M\n" + + "\x06fields\x18\x02 \x01(\v25.productv1.RequireStorageOptionalTagSummaryByIdFieldsR\x06fields\"}\n" + + ",RequireStorageOptionalTagSummaryByIdResponse\x12M\n" + + "\x06result\x18\x01 \x03(\v25.productv1.RequireStorageOptionalTagSummaryByIdResultR\x06result\"|\n" + + "*RequireStorageOptionalTagSummaryByIdResult\x12N\n" + + "\x14optional_tag_summary\x18\x01 \x01(\v2\x1c.google.protobuf.StringValueR\x12optionalTagSummary\"j\n" + + "*RequireStorageOptionalTagSummaryByIdFields\x12<\n" + + "\roptional_tags\x18\x01 \x01(\v2\x17.productv1.ListOfStringR\foptionalTags\"u\n" + + "&RequireStorageMetadataScoreByIdRequest\x12K\n" + + "\acontext\x18\x01 \x03(\v21.productv1.RequireStorageMetadataScoreByIdContextR\acontext\"\xac\x01\n" + + "&RequireStorageMetadataScoreByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12H\n" + + "\x06fields\x18\x02 \x01(\v20.productv1.RequireStorageMetadataScoreByIdFieldsR\x06fields\"s\n" + + "'RequireStorageMetadataScoreByIdResponse\x12H\n" + + "\x06result\x18\x01 \x03(\v20.productv1.RequireStorageMetadataScoreByIdResultR\x06result\"N\n" + + "%RequireStorageMetadataScoreByIdResult\x12%\n" + + "\x0emetadata_score\x18\x01 \x01(\x01R\rmetadataScore\"\xc8\x01\n" + + "%RequireStorageMetadataScoreByIdFields\x12\\\n" + + "\bmetadata\x18\x01 \x01(\v2@.productv1.RequireStorageMetadataScoreByIdFields.StorageMetadataR\bmetadata\x1aA\n" + + "\x0fStorageMetadata\x12\x1a\n" + + "\bcapacity\x18\x01 \x01(\x05R\bcapacity\x12\x12\n" + + "\x04zone\x18\x02 \x01(\tR\x04zone\"}\n" + + "*RequireStorageProcessedMetadataByIdRequest\x12O\n" + + "\acontext\x18\x01 \x03(\v25.productv1.RequireStorageProcessedMetadataByIdContextR\acontext\"\xb4\x01\n" + + "*RequireStorageProcessedMetadataByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12L\n" + + "\x06fields\x18\x02 \x01(\v24.productv1.RequireStorageProcessedMetadataByIdFieldsR\x06fields\"{\n" + + "+RequireStorageProcessedMetadataByIdResponse\x12L\n" + + "\x06result\x18\x01 \x03(\v24.productv1.RequireStorageProcessedMetadataByIdResultR\x06result\"v\n" + + ")RequireStorageProcessedMetadataByIdResult\x12I\n" + + "\x12processed_metadata\x18\x01 \x01(\v2\x1a.productv1.StorageMetadataR\x11processedMetadata\"\xec\x01\n" + + ")RequireStorageProcessedMetadataByIdFields\x12`\n" + + "\bmetadata\x18\x01 \x01(\v2D.productv1.RequireStorageProcessedMetadataByIdFields.StorageMetadataR\bmetadata\x1a]\n" + + "\x0fStorageMetadata\x12\x1a\n" + + "\bcapacity\x18\x01 \x01(\x05R\bcapacity\x12\x12\n" + + "\x04zone\x18\x02 \x01(\tR\x04zone\x12\x1a\n" + + "\bpriority\x18\x03 \x01(\x05R\bpriority\"\x8d\x01\n" + + "2RequireStorageOptionalProcessedMetadataByIdRequest\x12W\n" + + "\acontext\x18\x01 \x03(\v2=.productv1.RequireStorageOptionalProcessedMetadataByIdContextR\acontext\"\xc4\x01\n" + + "2RequireStorageOptionalProcessedMetadataByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12T\n" + + "\x06fields\x18\x02 \x01(\v2<.productv1.RequireStorageOptionalProcessedMetadataByIdFieldsR\x06fields\"\x8b\x01\n" + + "3RequireStorageOptionalProcessedMetadataByIdResponse\x12T\n" + + "\x06result\x18\x01 \x03(\v2<.productv1.RequireStorageOptionalProcessedMetadataByIdResultR\x06result\"\x8f\x01\n" + + "1RequireStorageOptionalProcessedMetadataByIdResult\x12Z\n" + + "\x1boptional_processed_metadata\x18\x01 \x01(\v2\x1a.productv1.StorageMetadataR\x19optionalProcessedMetadata\"\xe0\x01\n" + + "1RequireStorageOptionalProcessedMetadataByIdFields\x12h\n" + + "\bmetadata\x18\x01 \x01(\v2L.productv1.RequireStorageOptionalProcessedMetadataByIdFields.StorageMetadataR\bmetadata\x1aA\n" + + "\x0fStorageMetadata\x12\x1a\n" + + "\bcapacity\x18\x01 \x01(\x05R\bcapacity\x12\x12\n" + + "\x04zone\x18\x02 \x01(\tR\x04zone\"u\n" + + "&RequireStorageProcessedTagsByIdRequest\x12K\n" + + "\acontext\x18\x01 \x03(\v21.productv1.RequireStorageProcessedTagsByIdContextR\acontext\"\xac\x01\n" + + "&RequireStorageProcessedTagsByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12H\n" + + "\x06fields\x18\x02 \x01(\v20.productv1.RequireStorageProcessedTagsByIdFieldsR\x06fields\"s\n" + + "'RequireStorageProcessedTagsByIdResponse\x12H\n" + + "\x06result\x18\x01 \x03(\v20.productv1.RequireStorageProcessedTagsByIdResultR\x06result\"N\n" + + "%RequireStorageProcessedTagsByIdResult\x12%\n" + + "\x0eprocessed_tags\x18\x01 \x03(\tR\rprocessedTags\";\n" + + "%RequireStorageProcessedTagsByIdFields\x12\x12\n" + + "\x04tags\x18\x01 \x03(\tR\x04tags\"\x85\x01\n" + + ".RequireStorageOptionalProcessedTagsByIdRequest\x12S\n" + + "\acontext\x18\x01 \x03(\v29.productv1.RequireStorageOptionalProcessedTagsByIdContextR\acontext\"\xbc\x01\n" + + ".RequireStorageOptionalProcessedTagsByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12P\n" + + "\x06fields\x18\x02 \x01(\v28.productv1.RequireStorageOptionalProcessedTagsByIdFieldsR\x06fields\"\x83\x01\n" + + "/RequireStorageOptionalProcessedTagsByIdResponse\x12P\n" + + "\x06result\x18\x01 \x03(\v28.productv1.RequireStorageOptionalProcessedTagsByIdResultR\x06result\"\x80\x01\n" + + "-RequireStorageOptionalProcessedTagsByIdResult\x12O\n" + + "\x17optional_processed_tags\x18\x01 \x01(\v2\x17.productv1.ListOfStringR\x15optionalProcessedTags\"m\n" + + "-RequireStorageOptionalProcessedTagsByIdFields\x12<\n" + + "\roptional_tags\x18\x01 \x01(\v2\x17.productv1.ListOfStringR\foptionalTags\"\x8b\x01\n" + + "1RequireStorageProcessedMetadataHistoryByIdRequest\x12V\n" + + "\acontext\x18\x01 \x03(\v2<.productv1.RequireStorageProcessedMetadataHistoryByIdContextR\acontext\"\xc2\x01\n" + + "1RequireStorageProcessedMetadataHistoryByIdContext\x128\n" + + "\x03key\x18\x01 \x01(\v2&.productv1.LookupStorageByIdRequestKeyR\x03key\x12S\n" + + "\x06fields\x18\x02 \x01(\v2;.productv1.RequireStorageProcessedMetadataHistoryByIdFieldsR\x06fields\"\x89\x01\n" + + "2RequireStorageProcessedMetadataHistoryByIdResponse\x12S\n" + + "\x06result\x18\x01 \x03(\v2;.productv1.RequireStorageProcessedMetadataHistoryByIdResultR\x06result\"\x8c\x01\n" + + "0RequireStorageProcessedMetadataHistoryByIdResult\x12X\n" + + "\x1aprocessed_metadata_history\x18\x01 \x03(\v2\x1a.productv1.StorageMetadataR\x18processedMetadataHistory\"\xed\x01\n" + + "0RequireStorageProcessedMetadataHistoryByIdFields\x12v\n" + + "\x10metadata_history\x18\x01 \x03(\v2K.productv1.RequireStorageProcessedMetadataHistoryByIdFields.StorageMetadataR\x0fmetadataHistory\x1aA\n" + + "\x0fStorageMetadata\x12\x1a\n" + + "\bcapacity\x18\x01 \x01(\x05R\bcapacity\x12\x12\n" + + "\x04zone\x18\x02 \x01(\tR\x04zone\"\x7f\n" + + "+RequireWarehouseStockHealthScoreByIdRequest\x12P\n" + + "\acontext\x18\x01 \x03(\v26.productv1.RequireWarehouseStockHealthScoreByIdContextR\acontext\"\xb8\x01\n" + + "+RequireWarehouseStockHealthScoreByIdContext\x12:\n" + + "\x03key\x18\x01 \x01(\v2(.productv1.LookupWarehouseByIdRequestKeyR\x03key\x12M\n" + + "\x06fields\x18\x02 \x01(\v25.productv1.RequireWarehouseStockHealthScoreByIdFieldsR\x06fields\"}\n" + + ",RequireWarehouseStockHealthScoreByIdResponse\x12M\n" + + "\x06result\x18\x01 \x03(\v25.productv1.RequireWarehouseStockHealthScoreByIdResultR\x06result\"Z\n" + + "*RequireWarehouseStockHealthScoreByIdResult\x12,\n" + + "\x12stock_health_score\x18\x01 \x01(\x01R\x10stockHealthScore\"\xf6\x01\n" + + "*RequireWarehouseStockHealthScoreByIdFields\x12'\n" + + "\x0finventory_count\x18\x01 \x01(\x05R\x0einventoryCount\x12d\n" + + "\frestock_data\x18\x02 \x01(\v2A.productv1.RequireWarehouseStockHealthScoreByIdFields.RestockDataR\vrestockData\x1a9\n" + + "\vRestockData\x12*\n" + + "\x11last_restock_date\x18\x01 \x01(\tR\x0flastRestockDate\"C\n" + "\aProduct\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12\x14\n" + @@ -14932,7 +18642,13 @@ const file_product_proto_rawDesc = "" + "\x02id\x18\x01 \x01(\tR\x02id\x12 \n" + "\vdescription\x18\x02 \x01(\tR\vdescription\x12>\n" + "\x0ereview_summary\x18\x03 \x01(\v2\x17.productv1.ActionResultR\rreviewSummary\x12:\n" + - "\x0frecommended_pet\x18\x04 \x01(\v2\x11.productv1.AnimalR\x0erecommendedPet\"W\n" + + "\x0frecommended_pet\x18\x04 \x01(\v2\x11.productv1.AnimalR\x0erecommendedPet\"9\n" + + "\vRestockData\x12*\n" + + "\x11last_restock_date\x18\x01 \x01(\tR\x0flastRestockDate\"]\n" + + "\x0fStorageMetadata\x12\x1a\n" + + "\bcapacity\x18\x01 \x01(\x05R\bcapacity\x12\x12\n" + + "\x04zone\x18\x02 \x01(\tR\x04zone\x12\x1a\n" + + "\bpriority\x18\x03 \x01(\x05R\bpriority\"W\n" + "\vNestedTypeB\x12\x0e\n" + "\x02id\x18\x01 \x01(\tR\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12$\n" + @@ -15060,7 +18776,7 @@ const file_product_proto_rawDesc = "" + " SHIPPING_DESTINATION_UNSPECIFIED\x10\x00\x12!\n" + "\x1dSHIPPING_DESTINATION_DOMESTIC\x10\x01\x12 \n" + "\x1cSHIPPING_DESTINATION_EXPRESS\x10\x02\x12&\n" + - "\"SHIPPING_DESTINATION_INTERNATIONAL\x10\x032\x86;\n" + + "\"SHIPPING_DESTINATION_INTERNATIONAL\x10\x032\x97J\n" + "\x0eProductService\x12`\n" + "\x11LookupProductById\x12#.productv1.LookupProductByIdRequest\x1a$.productv1.LookupProductByIdResponse\"\x00\x12`\n" + "\x11LookupStorageById\x12#.productv1.LookupStorageByIdRequest\x1a$.productv1.LookupStorageByIdResponse\"\x00\x12f\n" + @@ -15110,7 +18826,17 @@ const file_product_proto_rawDesc = "" + "!QueryTypeWithMultipleFilterFields\x123.productv1.QueryTypeWithMultipleFilterFieldsRequest\x1a4.productv1.QueryTypeWithMultipleFilterFieldsResponse\"\x00\x12H\n" + "\tQueryUser\x12\x1b.productv1.QueryUserRequest\x1a\x1c.productv1.QueryUserResponse\"\x00\x12K\n" + "\n" + - "QueryUsers\x12\x1c.productv1.QueryUsersRequest\x1a\x1d.productv1.QueryUsersResponse\"\x00\x12\x87\x01\n" + + "QueryUsers\x12\x1c.productv1.QueryUsersRequest\x1a\x1d.productv1.QueryUsersResponse\"\x00\x12\x8a\x01\n" + + "\x1fRequireStorageMetadataScoreById\x121.productv1.RequireStorageMetadataScoreByIdRequest\x1a2.productv1.RequireStorageMetadataScoreByIdResponse\"\x00\x12\xae\x01\n" + + "+RequireStorageOptionalProcessedMetadataById\x12=.productv1.RequireStorageOptionalProcessedMetadataByIdRequest\x1a>.productv1.RequireStorageOptionalProcessedMetadataByIdResponse\"\x00\x12\xa2\x01\n" + + "'RequireStorageOptionalProcessedTagsById\x129.productv1.RequireStorageOptionalProcessedTagsByIdRequest\x1a:.productv1.RequireStorageOptionalProcessedTagsByIdResponse\"\x00\x12\x99\x01\n" + + "$RequireStorageOptionalTagSummaryById\x126.productv1.RequireStorageOptionalTagSummaryByIdRequest\x1a7.productv1.RequireStorageOptionalTagSummaryByIdResponse\"\x00\x12\x96\x01\n" + + "#RequireStorageProcessedMetadataById\x125.productv1.RequireStorageProcessedMetadataByIdRequest\x1a6.productv1.RequireStorageProcessedMetadataByIdResponse\"\x00\x12\xab\x01\n" + + "*RequireStorageProcessedMetadataHistoryById\x12<.productv1.RequireStorageProcessedMetadataHistoryByIdRequest\x1a=.productv1.RequireStorageProcessedMetadataHistoryByIdResponse\"\x00\x12\x8a\x01\n" + + "\x1fRequireStorageProcessedTagsById\x121.productv1.RequireStorageProcessedTagsByIdRequest\x1a2.productv1.RequireStorageProcessedTagsByIdResponse\"\x00\x12\x93\x01\n" + + "\"RequireStorageStockHealthScoreById\x124.productv1.RequireStorageStockHealthScoreByIdRequest\x1a5.productv1.RequireStorageStockHealthScoreByIdResponse\"\x00\x12\x81\x01\n" + + "\x1cRequireStorageTagSummaryById\x12..productv1.RequireStorageTagSummaryByIdRequest\x1a/.productv1.RequireStorageTagSummaryByIdResponse\"\x00\x12\x99\x01\n" + + "$RequireWarehouseStockHealthScoreById\x126.productv1.RequireWarehouseStockHealthScoreByIdRequest\x1a7.productv1.RequireWarehouseStockHealthScoreByIdResponse\"\x00\x12\x87\x01\n" + "\x1eResolveCategoryCategoryMetrics\x120.productv1.ResolveCategoryCategoryMetricsRequest\x1a1.productv1.ResolveCategoryCategoryMetricsResponse\"\x00\x12\x84\x01\n" + "\x1dResolveCategoryCategoryStatus\x12/.productv1.ResolveCategoryCategoryStatusRequest\x1a0.productv1.ResolveCategoryCategoryStatusResponse\"\x00\x12\x87\x01\n" + "\x1eResolveCategoryChildCategories\x120.productv1.ResolveCategoryChildCategoriesRequest\x1a1.productv1.ResolveCategoryChildCategoriesResponse\"\x00\x12l\n" + @@ -15124,7 +18850,10 @@ const file_product_proto_rawDesc = "" + "\x1cResolveProductProductDetails\x12..productv1.ResolveProductProductDetailsRequest\x1a/.productv1.ResolveProductProductDetailsResponse\"\x00\x12\x90\x01\n" + "!ResolveProductRecommendedCategory\x123.productv1.ResolveProductRecommendedCategoryRequest\x1a4.productv1.ResolveProductRecommendedCategoryResponse\"\x00\x12\x87\x01\n" + "\x1eResolveProductShippingEstimate\x120.productv1.ResolveProductShippingEstimateRequest\x1a1.productv1.ResolveProductShippingEstimateResponse\"\x00\x12x\n" + - "\x19ResolveProductStockStatus\x12+.productv1.ResolveProductStockStatusRequest\x1a,.productv1.ResolveProductStockStatusResponse\"\x00\x12\x93\x01\n" + + "\x19ResolveProductStockStatus\x12+.productv1.ResolveProductStockStatusRequest\x1a,.productv1.ResolveProductStockStatusResponse\"\x00\x12\x81\x01\n" + + "\x1cResolveStorageLinkedStorages\x12..productv1.ResolveStorageLinkedStoragesRequest\x1a/.productv1.ResolveStorageLinkedStoragesResponse\"\x00\x12\x81\x01\n" + + "\x1cResolveStorageNearbyStorages\x12..productv1.ResolveStorageNearbyStoragesRequest\x1a/.productv1.ResolveStorageNearbyStoragesResponse\"\x00\x12~\n" + + "\x1bResolveStorageStorageStatus\x12-.productv1.ResolveStorageStorageStatusRequest\x1a..productv1.ResolveStorageStorageStatusResponse\"\x00\x12\x93\x01\n" + "\"ResolveSubcategoryFeaturedCategory\x124.productv1.ResolveSubcategoryFeaturedCategoryRequest\x1a5.productv1.ResolveSubcategoryFeaturedCategoryResponse\"\x00\x12~\n" + "\x1bResolveSubcategoryItemCount\x12-.productv1.ResolveSubcategoryItemCountRequest\x1a..productv1.ResolveSubcategoryItemCountResponse\"\x00\x12~\n" + "\x1bResolveTestContainerDetails\x12-.productv1.ResolveTestContainerDetailsRequest\x1a..productv1.ResolveTestContainerDetailsResponse\"\x00B%Z#cosmo/pkg/proto/productv1;productv1b\x06proto3" @@ -15142,722 +18871,891 @@ func file_product_proto_rawDescGZIP() []byte { } var file_product_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_product_proto_msgTypes = make([]protoimpl.MessageInfo, 278) +var file_product_proto_msgTypes = make([]protoimpl.MessageInfo, 353) var file_product_proto_goTypes = []any{ - (CategoryKind)(0), // 0: productv1.CategoryKind - (ShippingDestination)(0), // 1: productv1.ShippingDestination - (*ListOfAuthorFilter)(nil), // 2: productv1.ListOfAuthorFilter - (*ListOfAuthorInput)(nil), // 3: productv1.ListOfAuthorInput - (*ListOfBlogPost)(nil), // 4: productv1.ListOfBlogPost - (*ListOfBlogPostFilter)(nil), // 5: productv1.ListOfBlogPostFilter - (*ListOfBlogPostInput)(nil), // 6: productv1.ListOfBlogPostInput - (*ListOfBoolean)(nil), // 7: productv1.ListOfBoolean - (*ListOfCategory)(nil), // 8: productv1.ListOfCategory - (*ListOfCategoryInput)(nil), // 9: productv1.ListOfCategoryInput - (*ListOfFloat)(nil), // 10: productv1.ListOfFloat - (*ListOfListOfCategory)(nil), // 11: productv1.ListOfListOfCategory - (*ListOfListOfCategoryInput)(nil), // 12: productv1.ListOfListOfCategoryInput - (*ListOfListOfString)(nil), // 13: productv1.ListOfListOfString - (*ListOfListOfUser)(nil), // 14: productv1.ListOfListOfUser - (*ListOfListOfUserInput)(nil), // 15: productv1.ListOfListOfUserInput - (*ListOfOrderLine)(nil), // 16: productv1.ListOfOrderLine - (*ListOfProduct)(nil), // 17: productv1.ListOfProduct - (*ListOfString)(nil), // 18: productv1.ListOfString - (*ListOfSubcategory)(nil), // 19: productv1.ListOfSubcategory - (*ListOfUser)(nil), // 20: productv1.ListOfUser - (*ListOfUserInput)(nil), // 21: productv1.ListOfUserInput - (*LookupProductByIdRequestKey)(nil), // 22: productv1.LookupProductByIdRequestKey - (*LookupProductByIdRequest)(nil), // 23: productv1.LookupProductByIdRequest - (*LookupProductByIdResponse)(nil), // 24: productv1.LookupProductByIdResponse - (*LookupStorageByIdRequestKey)(nil), // 25: productv1.LookupStorageByIdRequestKey - (*LookupStorageByIdRequest)(nil), // 26: productv1.LookupStorageByIdRequest - (*LookupStorageByIdResponse)(nil), // 27: productv1.LookupStorageByIdResponse - (*LookupWarehouseByIdRequestKey)(nil), // 28: productv1.LookupWarehouseByIdRequestKey - (*LookupWarehouseByIdRequest)(nil), // 29: productv1.LookupWarehouseByIdRequest - (*LookupWarehouseByIdResponse)(nil), // 30: productv1.LookupWarehouseByIdResponse - (*QueryUsersRequest)(nil), // 31: productv1.QueryUsersRequest - (*QueryUsersResponse)(nil), // 32: productv1.QueryUsersResponse - (*QueryUserRequest)(nil), // 33: productv1.QueryUserRequest - (*QueryUserResponse)(nil), // 34: productv1.QueryUserResponse - (*QueryNestedTypeRequest)(nil), // 35: productv1.QueryNestedTypeRequest - (*QueryNestedTypeResponse)(nil), // 36: productv1.QueryNestedTypeResponse - (*QueryRecursiveTypeRequest)(nil), // 37: productv1.QueryRecursiveTypeRequest - (*QueryRecursiveTypeResponse)(nil), // 38: productv1.QueryRecursiveTypeResponse - (*QueryTypeFilterWithArgumentsRequest)(nil), // 39: productv1.QueryTypeFilterWithArgumentsRequest - (*QueryTypeFilterWithArgumentsResponse)(nil), // 40: productv1.QueryTypeFilterWithArgumentsResponse - (*QueryTypeWithMultipleFilterFieldsRequest)(nil), // 41: productv1.QueryTypeWithMultipleFilterFieldsRequest - (*QueryTypeWithMultipleFilterFieldsResponse)(nil), // 42: productv1.QueryTypeWithMultipleFilterFieldsResponse - (*QueryComplexFilterTypeRequest)(nil), // 43: productv1.QueryComplexFilterTypeRequest - (*QueryComplexFilterTypeResponse)(nil), // 44: productv1.QueryComplexFilterTypeResponse - (*QueryCalculateTotalsRequest)(nil), // 45: productv1.QueryCalculateTotalsRequest - (*QueryCalculateTotalsResponse)(nil), // 46: productv1.QueryCalculateTotalsResponse - (*QueryCategoriesRequest)(nil), // 47: productv1.QueryCategoriesRequest - (*QueryCategoriesResponse)(nil), // 48: productv1.QueryCategoriesResponse - (*QueryCategoryRequest)(nil), // 49: productv1.QueryCategoryRequest - (*QueryCategoryResponse)(nil), // 50: productv1.QueryCategoryResponse - (*QueryCategoriesByKindRequest)(nil), // 51: productv1.QueryCategoriesByKindRequest - (*QueryCategoriesByKindResponse)(nil), // 52: productv1.QueryCategoriesByKindResponse - (*QueryCategoriesByKindsRequest)(nil), // 53: productv1.QueryCategoriesByKindsRequest - (*QueryCategoriesByKindsResponse)(nil), // 54: productv1.QueryCategoriesByKindsResponse - (*QueryFilterCategoriesRequest)(nil), // 55: productv1.QueryFilterCategoriesRequest - (*QueryFilterCategoriesResponse)(nil), // 56: productv1.QueryFilterCategoriesResponse - (*QueryRandomPetRequest)(nil), // 57: productv1.QueryRandomPetRequest - (*QueryRandomPetResponse)(nil), // 58: productv1.QueryRandomPetResponse - (*QueryAllPetsRequest)(nil), // 59: productv1.QueryAllPetsRequest - (*QueryAllPetsResponse)(nil), // 60: productv1.QueryAllPetsResponse - (*QuerySearchRequest)(nil), // 61: productv1.QuerySearchRequest - (*QuerySearchResponse)(nil), // 62: productv1.QuerySearchResponse - (*QueryRandomSearchResultRequest)(nil), // 63: productv1.QueryRandomSearchResultRequest - (*QueryRandomSearchResultResponse)(nil), // 64: productv1.QueryRandomSearchResultResponse - (*QueryNullableFieldsTypeRequest)(nil), // 65: productv1.QueryNullableFieldsTypeRequest - (*QueryNullableFieldsTypeResponse)(nil), // 66: productv1.QueryNullableFieldsTypeResponse - (*QueryNullableFieldsTypeByIdRequest)(nil), // 67: productv1.QueryNullableFieldsTypeByIdRequest - (*QueryNullableFieldsTypeByIdResponse)(nil), // 68: productv1.QueryNullableFieldsTypeByIdResponse - (*QueryNullableFieldsTypeWithFilterRequest)(nil), // 69: productv1.QueryNullableFieldsTypeWithFilterRequest - (*QueryNullableFieldsTypeWithFilterResponse)(nil), // 70: productv1.QueryNullableFieldsTypeWithFilterResponse - (*QueryAllNullableFieldsTypesRequest)(nil), // 71: productv1.QueryAllNullableFieldsTypesRequest - (*QueryAllNullableFieldsTypesResponse)(nil), // 72: productv1.QueryAllNullableFieldsTypesResponse - (*QueryBlogPostRequest)(nil), // 73: productv1.QueryBlogPostRequest - (*QueryBlogPostResponse)(nil), // 74: productv1.QueryBlogPostResponse - (*QueryBlogPostByIdRequest)(nil), // 75: productv1.QueryBlogPostByIdRequest - (*QueryBlogPostByIdResponse)(nil), // 76: productv1.QueryBlogPostByIdResponse - (*QueryBlogPostsWithFilterRequest)(nil), // 77: productv1.QueryBlogPostsWithFilterRequest - (*QueryBlogPostsWithFilterResponse)(nil), // 78: productv1.QueryBlogPostsWithFilterResponse - (*QueryAllBlogPostsRequest)(nil), // 79: productv1.QueryAllBlogPostsRequest - (*QueryAllBlogPostsResponse)(nil), // 80: productv1.QueryAllBlogPostsResponse - (*QueryAuthorRequest)(nil), // 81: productv1.QueryAuthorRequest - (*QueryAuthorResponse)(nil), // 82: productv1.QueryAuthorResponse - (*QueryAuthorByIdRequest)(nil), // 83: productv1.QueryAuthorByIdRequest - (*QueryAuthorByIdResponse)(nil), // 84: productv1.QueryAuthorByIdResponse - (*QueryAuthorsWithFilterRequest)(nil), // 85: productv1.QueryAuthorsWithFilterRequest - (*QueryAuthorsWithFilterResponse)(nil), // 86: productv1.QueryAuthorsWithFilterResponse - (*QueryAllAuthorsRequest)(nil), // 87: productv1.QueryAllAuthorsRequest - (*QueryAllAuthorsResponse)(nil), // 88: productv1.QueryAllAuthorsResponse - (*QueryBulkSearchAuthorsRequest)(nil), // 89: productv1.QueryBulkSearchAuthorsRequest - (*QueryBulkSearchAuthorsResponse)(nil), // 90: productv1.QueryBulkSearchAuthorsResponse - (*QueryBulkSearchBlogPostsRequest)(nil), // 91: productv1.QueryBulkSearchBlogPostsRequest - (*QueryBulkSearchBlogPostsResponse)(nil), // 92: productv1.QueryBulkSearchBlogPostsResponse - (*QueryTestContainerRequest)(nil), // 93: productv1.QueryTestContainerRequest - (*QueryTestContainerResponse)(nil), // 94: productv1.QueryTestContainerResponse - (*QueryTestContainersRequest)(nil), // 95: productv1.QueryTestContainersRequest - (*QueryTestContainersResponse)(nil), // 96: productv1.QueryTestContainersResponse - (*MutationCreateUserRequest)(nil), // 97: productv1.MutationCreateUserRequest - (*MutationCreateUserResponse)(nil), // 98: productv1.MutationCreateUserResponse - (*MutationPerformActionRequest)(nil), // 99: productv1.MutationPerformActionRequest - (*MutationPerformActionResponse)(nil), // 100: productv1.MutationPerformActionResponse - (*MutationCreateNullableFieldsTypeRequest)(nil), // 101: productv1.MutationCreateNullableFieldsTypeRequest - (*MutationCreateNullableFieldsTypeResponse)(nil), // 102: productv1.MutationCreateNullableFieldsTypeResponse - (*MutationUpdateNullableFieldsTypeRequest)(nil), // 103: productv1.MutationUpdateNullableFieldsTypeRequest - (*MutationUpdateNullableFieldsTypeResponse)(nil), // 104: productv1.MutationUpdateNullableFieldsTypeResponse - (*MutationCreateBlogPostRequest)(nil), // 105: productv1.MutationCreateBlogPostRequest - (*MutationCreateBlogPostResponse)(nil), // 106: productv1.MutationCreateBlogPostResponse - (*MutationUpdateBlogPostRequest)(nil), // 107: productv1.MutationUpdateBlogPostRequest - (*MutationUpdateBlogPostResponse)(nil), // 108: productv1.MutationUpdateBlogPostResponse - (*MutationCreateAuthorRequest)(nil), // 109: productv1.MutationCreateAuthorRequest - (*MutationCreateAuthorResponse)(nil), // 110: productv1.MutationCreateAuthorResponse - (*MutationUpdateAuthorRequest)(nil), // 111: productv1.MutationUpdateAuthorRequest - (*MutationUpdateAuthorResponse)(nil), // 112: productv1.MutationUpdateAuthorResponse - (*MutationBulkCreateAuthorsRequest)(nil), // 113: productv1.MutationBulkCreateAuthorsRequest - (*MutationBulkCreateAuthorsResponse)(nil), // 114: productv1.MutationBulkCreateAuthorsResponse - (*MutationBulkUpdateAuthorsRequest)(nil), // 115: productv1.MutationBulkUpdateAuthorsRequest - (*MutationBulkUpdateAuthorsResponse)(nil), // 116: productv1.MutationBulkUpdateAuthorsResponse - (*MutationBulkCreateBlogPostsRequest)(nil), // 117: productv1.MutationBulkCreateBlogPostsRequest - (*MutationBulkCreateBlogPostsResponse)(nil), // 118: productv1.MutationBulkCreateBlogPostsResponse - (*MutationBulkUpdateBlogPostsRequest)(nil), // 119: productv1.MutationBulkUpdateBlogPostsRequest - (*MutationBulkUpdateBlogPostsResponse)(nil), // 120: productv1.MutationBulkUpdateBlogPostsResponse - (*ResolveProductShippingEstimateArgs)(nil), // 121: productv1.ResolveProductShippingEstimateArgs - (*ResolveProductShippingEstimateContext)(nil), // 122: productv1.ResolveProductShippingEstimateContext - (*ResolveProductShippingEstimateRequest)(nil), // 123: productv1.ResolveProductShippingEstimateRequest - (*ResolveProductShippingEstimateResult)(nil), // 124: productv1.ResolveProductShippingEstimateResult - (*ResolveProductShippingEstimateResponse)(nil), // 125: productv1.ResolveProductShippingEstimateResponse - (*ResolveProductRecommendedCategoryArgs)(nil), // 126: productv1.ResolveProductRecommendedCategoryArgs - (*ResolveProductRecommendedCategoryContext)(nil), // 127: productv1.ResolveProductRecommendedCategoryContext - (*ResolveProductRecommendedCategoryRequest)(nil), // 128: productv1.ResolveProductRecommendedCategoryRequest - (*ResolveProductRecommendedCategoryResult)(nil), // 129: productv1.ResolveProductRecommendedCategoryResult - (*ResolveProductRecommendedCategoryResponse)(nil), // 130: productv1.ResolveProductRecommendedCategoryResponse - (*ResolveProductMascotRecommendationArgs)(nil), // 131: productv1.ResolveProductMascotRecommendationArgs - (*ResolveProductMascotRecommendationContext)(nil), // 132: productv1.ResolveProductMascotRecommendationContext - (*ResolveProductMascotRecommendationRequest)(nil), // 133: productv1.ResolveProductMascotRecommendationRequest - (*ResolveProductMascotRecommendationResult)(nil), // 134: productv1.ResolveProductMascotRecommendationResult - (*ResolveProductMascotRecommendationResponse)(nil), // 135: productv1.ResolveProductMascotRecommendationResponse - (*ResolveProductStockStatusArgs)(nil), // 136: productv1.ResolveProductStockStatusArgs - (*ResolveProductStockStatusContext)(nil), // 137: productv1.ResolveProductStockStatusContext - (*ResolveProductStockStatusRequest)(nil), // 138: productv1.ResolveProductStockStatusRequest - (*ResolveProductStockStatusResult)(nil), // 139: productv1.ResolveProductStockStatusResult - (*ResolveProductStockStatusResponse)(nil), // 140: productv1.ResolveProductStockStatusResponse - (*ResolveProductProductDetailsArgs)(nil), // 141: productv1.ResolveProductProductDetailsArgs - (*ResolveProductProductDetailsContext)(nil), // 142: productv1.ResolveProductProductDetailsContext - (*ResolveProductProductDetailsRequest)(nil), // 143: productv1.ResolveProductProductDetailsRequest - (*ResolveProductProductDetailsResult)(nil), // 144: productv1.ResolveProductProductDetailsResult - (*ResolveProductProductDetailsResponse)(nil), // 145: productv1.ResolveProductProductDetailsResponse - (*ResolveCategoryProductCountArgs)(nil), // 146: productv1.ResolveCategoryProductCountArgs - (*ResolveCategoryProductCountContext)(nil), // 147: productv1.ResolveCategoryProductCountContext - (*ResolveCategoryProductCountRequest)(nil), // 148: productv1.ResolveCategoryProductCountRequest - (*ResolveCategoryProductCountResult)(nil), // 149: productv1.ResolveCategoryProductCountResult - (*ResolveCategoryProductCountResponse)(nil), // 150: productv1.ResolveCategoryProductCountResponse - (*ResolveCategoryPopularityScoreArgs)(nil), // 151: productv1.ResolveCategoryPopularityScoreArgs - (*ResolveCategoryPopularityScoreContext)(nil), // 152: productv1.ResolveCategoryPopularityScoreContext - (*ResolveCategoryPopularityScoreRequest)(nil), // 153: productv1.ResolveCategoryPopularityScoreRequest - (*ResolveCategoryPopularityScoreResult)(nil), // 154: productv1.ResolveCategoryPopularityScoreResult - (*ResolveCategoryPopularityScoreResponse)(nil), // 155: productv1.ResolveCategoryPopularityScoreResponse - (*ResolveCategoryCategoryMetricsArgs)(nil), // 156: productv1.ResolveCategoryCategoryMetricsArgs - (*ResolveCategoryCategoryMetricsContext)(nil), // 157: productv1.ResolveCategoryCategoryMetricsContext - (*ResolveCategoryCategoryMetricsRequest)(nil), // 158: productv1.ResolveCategoryCategoryMetricsRequest - (*ResolveCategoryCategoryMetricsResult)(nil), // 159: productv1.ResolveCategoryCategoryMetricsResult - (*ResolveCategoryCategoryMetricsResponse)(nil), // 160: productv1.ResolveCategoryCategoryMetricsResponse - (*ResolveCategoryMascotArgs)(nil), // 161: productv1.ResolveCategoryMascotArgs - (*ResolveCategoryMascotContext)(nil), // 162: productv1.ResolveCategoryMascotContext - (*ResolveCategoryMascotRequest)(nil), // 163: productv1.ResolveCategoryMascotRequest - (*ResolveCategoryMascotResult)(nil), // 164: productv1.ResolveCategoryMascotResult - (*ResolveCategoryMascotResponse)(nil), // 165: productv1.ResolveCategoryMascotResponse - (*ResolveCategoryCategoryStatusArgs)(nil), // 166: productv1.ResolveCategoryCategoryStatusArgs - (*ResolveCategoryCategoryStatusContext)(nil), // 167: productv1.ResolveCategoryCategoryStatusContext - (*ResolveCategoryCategoryStatusRequest)(nil), // 168: productv1.ResolveCategoryCategoryStatusRequest - (*ResolveCategoryCategoryStatusResult)(nil), // 169: productv1.ResolveCategoryCategoryStatusResult - (*ResolveCategoryCategoryStatusResponse)(nil), // 170: productv1.ResolveCategoryCategoryStatusResponse - (*ResolveCategoryChildCategoriesArgs)(nil), // 171: productv1.ResolveCategoryChildCategoriesArgs - (*ResolveCategoryChildCategoriesContext)(nil), // 172: productv1.ResolveCategoryChildCategoriesContext - (*ResolveCategoryChildCategoriesRequest)(nil), // 173: productv1.ResolveCategoryChildCategoriesRequest - (*ResolveCategoryChildCategoriesResult)(nil), // 174: productv1.ResolveCategoryChildCategoriesResult - (*ResolveCategoryChildCategoriesResponse)(nil), // 175: productv1.ResolveCategoryChildCategoriesResponse - (*ResolveCategoryOptionalCategoriesArgs)(nil), // 176: productv1.ResolveCategoryOptionalCategoriesArgs - (*ResolveCategoryOptionalCategoriesContext)(nil), // 177: productv1.ResolveCategoryOptionalCategoriesContext - (*ResolveCategoryOptionalCategoriesRequest)(nil), // 178: productv1.ResolveCategoryOptionalCategoriesRequest - (*ResolveCategoryOptionalCategoriesResult)(nil), // 179: productv1.ResolveCategoryOptionalCategoriesResult - (*ResolveCategoryOptionalCategoriesResponse)(nil), // 180: productv1.ResolveCategoryOptionalCategoriesResponse - (*ResolveSubcategoryItemCountArgs)(nil), // 181: productv1.ResolveSubcategoryItemCountArgs - (*ResolveSubcategoryItemCountContext)(nil), // 182: productv1.ResolveSubcategoryItemCountContext - (*ResolveSubcategoryItemCountRequest)(nil), // 183: productv1.ResolveSubcategoryItemCountRequest - (*ResolveSubcategoryItemCountResult)(nil), // 184: productv1.ResolveSubcategoryItemCountResult - (*ResolveSubcategoryItemCountResponse)(nil), // 185: productv1.ResolveSubcategoryItemCountResponse - (*ResolveSubcategoryFeaturedCategoryArgs)(nil), // 186: productv1.ResolveSubcategoryFeaturedCategoryArgs - (*ResolveSubcategoryFeaturedCategoryContext)(nil), // 187: productv1.ResolveSubcategoryFeaturedCategoryContext - (*ResolveSubcategoryFeaturedCategoryRequest)(nil), // 188: productv1.ResolveSubcategoryFeaturedCategoryRequest - (*ResolveSubcategoryFeaturedCategoryResult)(nil), // 189: productv1.ResolveSubcategoryFeaturedCategoryResult - (*ResolveSubcategoryFeaturedCategoryResponse)(nil), // 190: productv1.ResolveSubcategoryFeaturedCategoryResponse - (*ResolveCategoryMetricsNormalizedScoreArgs)(nil), // 191: productv1.ResolveCategoryMetricsNormalizedScoreArgs - (*ResolveCategoryMetricsNormalizedScoreContext)(nil), // 192: productv1.ResolveCategoryMetricsNormalizedScoreContext - (*ResolveCategoryMetricsNormalizedScoreRequest)(nil), // 193: productv1.ResolveCategoryMetricsNormalizedScoreRequest - (*ResolveCategoryMetricsNormalizedScoreResult)(nil), // 194: productv1.ResolveCategoryMetricsNormalizedScoreResult - (*ResolveCategoryMetricsNormalizedScoreResponse)(nil), // 195: productv1.ResolveCategoryMetricsNormalizedScoreResponse - (*ResolveCategoryMetricsRelatedCategoryArgs)(nil), // 196: productv1.ResolveCategoryMetricsRelatedCategoryArgs - (*ResolveCategoryMetricsRelatedCategoryContext)(nil), // 197: productv1.ResolveCategoryMetricsRelatedCategoryContext - (*ResolveCategoryMetricsRelatedCategoryRequest)(nil), // 198: productv1.ResolveCategoryMetricsRelatedCategoryRequest - (*ResolveCategoryMetricsRelatedCategoryResult)(nil), // 199: productv1.ResolveCategoryMetricsRelatedCategoryResult - (*ResolveCategoryMetricsRelatedCategoryResponse)(nil), // 200: productv1.ResolveCategoryMetricsRelatedCategoryResponse - (*ResolveTestContainerDetailsArgs)(nil), // 201: productv1.ResolveTestContainerDetailsArgs - (*ResolveTestContainerDetailsContext)(nil), // 202: productv1.ResolveTestContainerDetailsContext - (*ResolveTestContainerDetailsRequest)(nil), // 203: productv1.ResolveTestContainerDetailsRequest - (*ResolveTestContainerDetailsResult)(nil), // 204: productv1.ResolveTestContainerDetailsResult - (*ResolveTestContainerDetailsResponse)(nil), // 205: productv1.ResolveTestContainerDetailsResponse - (*Product)(nil), // 206: productv1.Product - (*Storage)(nil), // 207: productv1.Storage - (*Warehouse)(nil), // 208: productv1.Warehouse - (*User)(nil), // 209: productv1.User - (*NestedTypeA)(nil), // 210: productv1.NestedTypeA - (*RecursiveType)(nil), // 211: productv1.RecursiveType - (*TypeWithMultipleFilterFields)(nil), // 212: productv1.TypeWithMultipleFilterFields - (*FilterTypeInput)(nil), // 213: productv1.FilterTypeInput - (*ComplexFilterTypeInput)(nil), // 214: productv1.ComplexFilterTypeInput - (*TypeWithComplexFilterInput)(nil), // 215: productv1.TypeWithComplexFilterInput - (*OrderInput)(nil), // 216: productv1.OrderInput - (*Order)(nil), // 217: productv1.Order - (*Category)(nil), // 218: productv1.Category - (*CategoryFilter)(nil), // 219: productv1.CategoryFilter - (*Animal)(nil), // 220: productv1.Animal - (*SearchInput)(nil), // 221: productv1.SearchInput - (*SearchResult)(nil), // 222: productv1.SearchResult - (*NullableFieldsType)(nil), // 223: productv1.NullableFieldsType - (*NullableFieldsFilter)(nil), // 224: productv1.NullableFieldsFilter - (*BlogPost)(nil), // 225: productv1.BlogPost - (*BlogPostFilter)(nil), // 226: productv1.BlogPostFilter - (*Author)(nil), // 227: productv1.Author - (*AuthorFilter)(nil), // 228: productv1.AuthorFilter - (*TestContainer)(nil), // 229: productv1.TestContainer - (*UserInput)(nil), // 230: productv1.UserInput - (*ActionInput)(nil), // 231: productv1.ActionInput - (*ActionResult)(nil), // 232: productv1.ActionResult - (*NullableFieldsInput)(nil), // 233: productv1.NullableFieldsInput - (*BlogPostInput)(nil), // 234: productv1.BlogPostInput - (*AuthorInput)(nil), // 235: productv1.AuthorInput - (*ProductDetails)(nil), // 236: productv1.ProductDetails - (*NestedTypeB)(nil), // 237: productv1.NestedTypeB - (*NestedTypeC)(nil), // 238: productv1.NestedTypeC - (*FilterType)(nil), // 239: productv1.FilterType - (*Pagination)(nil), // 240: productv1.Pagination - (*OrderLineInput)(nil), // 241: productv1.OrderLineInput - (*OrderLine)(nil), // 242: productv1.OrderLine - (*Subcategory)(nil), // 243: productv1.Subcategory - (*CategoryMetrics)(nil), // 244: productv1.CategoryMetrics - (*Cat)(nil), // 245: productv1.Cat - (*Dog)(nil), // 246: productv1.Dog - (*Owner)(nil), // 247: productv1.Owner - (*ContactInfo)(nil), // 248: productv1.ContactInfo - (*Address)(nil), // 249: productv1.Address - (*CatBreed)(nil), // 250: productv1.CatBreed - (*DogBreed)(nil), // 251: productv1.DogBreed - (*BreedCharacteristics)(nil), // 252: productv1.BreedCharacteristics - (*ActionSuccess)(nil), // 253: productv1.ActionSuccess - (*ActionError)(nil), // 254: productv1.ActionError - (*TestDetails)(nil), // 255: productv1.TestDetails - (*CategoryInput)(nil), // 256: productv1.CategoryInput - (*ProductCountFilter)(nil), // 257: productv1.ProductCountFilter - (*SubcategoryItemFilter)(nil), // 258: productv1.SubcategoryItemFilter - (*ShippingEstimateInput)(nil), // 259: productv1.ShippingEstimateInput - (*ListOfAuthorFilter_List)(nil), // 260: productv1.ListOfAuthorFilter.List - (*ListOfAuthorInput_List)(nil), // 261: productv1.ListOfAuthorInput.List - (*ListOfBlogPost_List)(nil), // 262: productv1.ListOfBlogPost.List - (*ListOfBlogPostFilter_List)(nil), // 263: productv1.ListOfBlogPostFilter.List - (*ListOfBlogPostInput_List)(nil), // 264: productv1.ListOfBlogPostInput.List - (*ListOfBoolean_List)(nil), // 265: productv1.ListOfBoolean.List - (*ListOfCategory_List)(nil), // 266: productv1.ListOfCategory.List - (*ListOfCategoryInput_List)(nil), // 267: productv1.ListOfCategoryInput.List - (*ListOfFloat_List)(nil), // 268: productv1.ListOfFloat.List - (*ListOfListOfCategory_List)(nil), // 269: productv1.ListOfListOfCategory.List - (*ListOfListOfCategoryInput_List)(nil), // 270: productv1.ListOfListOfCategoryInput.List - (*ListOfListOfString_List)(nil), // 271: productv1.ListOfListOfString.List - (*ListOfListOfUser_List)(nil), // 272: productv1.ListOfListOfUser.List - (*ListOfListOfUserInput_List)(nil), // 273: productv1.ListOfListOfUserInput.List - (*ListOfOrderLine_List)(nil), // 274: productv1.ListOfOrderLine.List - (*ListOfProduct_List)(nil), // 275: productv1.ListOfProduct.List - (*ListOfString_List)(nil), // 276: productv1.ListOfString.List - (*ListOfSubcategory_List)(nil), // 277: productv1.ListOfSubcategory.List - (*ListOfUser_List)(nil), // 278: productv1.ListOfUser.List - (*ListOfUserInput_List)(nil), // 279: productv1.ListOfUserInput.List - (*wrapperspb.Int32Value)(nil), // 280: google.protobuf.Int32Value - (*wrapperspb.BoolValue)(nil), // 281: google.protobuf.BoolValue - (*wrapperspb.StringValue)(nil), // 282: google.protobuf.StringValue - (*wrapperspb.DoubleValue)(nil), // 283: google.protobuf.DoubleValue + (CategoryKind)(0), // 0: productv1.CategoryKind + (ShippingDestination)(0), // 1: productv1.ShippingDestination + (*ListOfAuthorFilter)(nil), // 2: productv1.ListOfAuthorFilter + (*ListOfAuthorInput)(nil), // 3: productv1.ListOfAuthorInput + (*ListOfBlogPost)(nil), // 4: productv1.ListOfBlogPost + (*ListOfBlogPostFilter)(nil), // 5: productv1.ListOfBlogPostFilter + (*ListOfBlogPostInput)(nil), // 6: productv1.ListOfBlogPostInput + (*ListOfBoolean)(nil), // 7: productv1.ListOfBoolean + (*ListOfCategory)(nil), // 8: productv1.ListOfCategory + (*ListOfCategoryInput)(nil), // 9: productv1.ListOfCategoryInput + (*ListOfFloat)(nil), // 10: productv1.ListOfFloat + (*ListOfListOfCategory)(nil), // 11: productv1.ListOfListOfCategory + (*ListOfListOfCategoryInput)(nil), // 12: productv1.ListOfListOfCategoryInput + (*ListOfListOfString)(nil), // 13: productv1.ListOfListOfString + (*ListOfListOfUser)(nil), // 14: productv1.ListOfListOfUser + (*ListOfListOfUserInput)(nil), // 15: productv1.ListOfListOfUserInput + (*ListOfOrderLine)(nil), // 16: productv1.ListOfOrderLine + (*ListOfProduct)(nil), // 17: productv1.ListOfProduct + (*ListOfStorage)(nil), // 18: productv1.ListOfStorage + (*ListOfString)(nil), // 19: productv1.ListOfString + (*ListOfSubcategory)(nil), // 20: productv1.ListOfSubcategory + (*ListOfUser)(nil), // 21: productv1.ListOfUser + (*ListOfUserInput)(nil), // 22: productv1.ListOfUserInput + (*LookupProductByIdRequestKey)(nil), // 23: productv1.LookupProductByIdRequestKey + (*LookupProductByIdRequest)(nil), // 24: productv1.LookupProductByIdRequest + (*LookupProductByIdResponse)(nil), // 25: productv1.LookupProductByIdResponse + (*LookupStorageByIdRequestKey)(nil), // 26: productv1.LookupStorageByIdRequestKey + (*LookupStorageByIdRequest)(nil), // 27: productv1.LookupStorageByIdRequest + (*LookupStorageByIdResponse)(nil), // 28: productv1.LookupStorageByIdResponse + (*LookupWarehouseByIdRequestKey)(nil), // 29: productv1.LookupWarehouseByIdRequestKey + (*LookupWarehouseByIdRequest)(nil), // 30: productv1.LookupWarehouseByIdRequest + (*LookupWarehouseByIdResponse)(nil), // 31: productv1.LookupWarehouseByIdResponse + (*QueryUsersRequest)(nil), // 32: productv1.QueryUsersRequest + (*QueryUsersResponse)(nil), // 33: productv1.QueryUsersResponse + (*QueryUserRequest)(nil), // 34: productv1.QueryUserRequest + (*QueryUserResponse)(nil), // 35: productv1.QueryUserResponse + (*QueryNestedTypeRequest)(nil), // 36: productv1.QueryNestedTypeRequest + (*QueryNestedTypeResponse)(nil), // 37: productv1.QueryNestedTypeResponse + (*QueryRecursiveTypeRequest)(nil), // 38: productv1.QueryRecursiveTypeRequest + (*QueryRecursiveTypeResponse)(nil), // 39: productv1.QueryRecursiveTypeResponse + (*QueryTypeFilterWithArgumentsRequest)(nil), // 40: productv1.QueryTypeFilterWithArgumentsRequest + (*QueryTypeFilterWithArgumentsResponse)(nil), // 41: productv1.QueryTypeFilterWithArgumentsResponse + (*QueryTypeWithMultipleFilterFieldsRequest)(nil), // 42: productv1.QueryTypeWithMultipleFilterFieldsRequest + (*QueryTypeWithMultipleFilterFieldsResponse)(nil), // 43: productv1.QueryTypeWithMultipleFilterFieldsResponse + (*QueryComplexFilterTypeRequest)(nil), // 44: productv1.QueryComplexFilterTypeRequest + (*QueryComplexFilterTypeResponse)(nil), // 45: productv1.QueryComplexFilterTypeResponse + (*QueryCalculateTotalsRequest)(nil), // 46: productv1.QueryCalculateTotalsRequest + (*QueryCalculateTotalsResponse)(nil), // 47: productv1.QueryCalculateTotalsResponse + (*QueryCategoriesRequest)(nil), // 48: productv1.QueryCategoriesRequest + (*QueryCategoriesResponse)(nil), // 49: productv1.QueryCategoriesResponse + (*QueryCategoryRequest)(nil), // 50: productv1.QueryCategoryRequest + (*QueryCategoryResponse)(nil), // 51: productv1.QueryCategoryResponse + (*QueryCategoriesByKindRequest)(nil), // 52: productv1.QueryCategoriesByKindRequest + (*QueryCategoriesByKindResponse)(nil), // 53: productv1.QueryCategoriesByKindResponse + (*QueryCategoriesByKindsRequest)(nil), // 54: productv1.QueryCategoriesByKindsRequest + (*QueryCategoriesByKindsResponse)(nil), // 55: productv1.QueryCategoriesByKindsResponse + (*QueryFilterCategoriesRequest)(nil), // 56: productv1.QueryFilterCategoriesRequest + (*QueryFilterCategoriesResponse)(nil), // 57: productv1.QueryFilterCategoriesResponse + (*QueryRandomPetRequest)(nil), // 58: productv1.QueryRandomPetRequest + (*QueryRandomPetResponse)(nil), // 59: productv1.QueryRandomPetResponse + (*QueryAllPetsRequest)(nil), // 60: productv1.QueryAllPetsRequest + (*QueryAllPetsResponse)(nil), // 61: productv1.QueryAllPetsResponse + (*QuerySearchRequest)(nil), // 62: productv1.QuerySearchRequest + (*QuerySearchResponse)(nil), // 63: productv1.QuerySearchResponse + (*QueryRandomSearchResultRequest)(nil), // 64: productv1.QueryRandomSearchResultRequest + (*QueryRandomSearchResultResponse)(nil), // 65: productv1.QueryRandomSearchResultResponse + (*QueryNullableFieldsTypeRequest)(nil), // 66: productv1.QueryNullableFieldsTypeRequest + (*QueryNullableFieldsTypeResponse)(nil), // 67: productv1.QueryNullableFieldsTypeResponse + (*QueryNullableFieldsTypeByIdRequest)(nil), // 68: productv1.QueryNullableFieldsTypeByIdRequest + (*QueryNullableFieldsTypeByIdResponse)(nil), // 69: productv1.QueryNullableFieldsTypeByIdResponse + (*QueryNullableFieldsTypeWithFilterRequest)(nil), // 70: productv1.QueryNullableFieldsTypeWithFilterRequest + (*QueryNullableFieldsTypeWithFilterResponse)(nil), // 71: productv1.QueryNullableFieldsTypeWithFilterResponse + (*QueryAllNullableFieldsTypesRequest)(nil), // 72: productv1.QueryAllNullableFieldsTypesRequest + (*QueryAllNullableFieldsTypesResponse)(nil), // 73: productv1.QueryAllNullableFieldsTypesResponse + (*QueryBlogPostRequest)(nil), // 74: productv1.QueryBlogPostRequest + (*QueryBlogPostResponse)(nil), // 75: productv1.QueryBlogPostResponse + (*QueryBlogPostByIdRequest)(nil), // 76: productv1.QueryBlogPostByIdRequest + (*QueryBlogPostByIdResponse)(nil), // 77: productv1.QueryBlogPostByIdResponse + (*QueryBlogPostsWithFilterRequest)(nil), // 78: productv1.QueryBlogPostsWithFilterRequest + (*QueryBlogPostsWithFilterResponse)(nil), // 79: productv1.QueryBlogPostsWithFilterResponse + (*QueryAllBlogPostsRequest)(nil), // 80: productv1.QueryAllBlogPostsRequest + (*QueryAllBlogPostsResponse)(nil), // 81: productv1.QueryAllBlogPostsResponse + (*QueryAuthorRequest)(nil), // 82: productv1.QueryAuthorRequest + (*QueryAuthorResponse)(nil), // 83: productv1.QueryAuthorResponse + (*QueryAuthorByIdRequest)(nil), // 84: productv1.QueryAuthorByIdRequest + (*QueryAuthorByIdResponse)(nil), // 85: productv1.QueryAuthorByIdResponse + (*QueryAuthorsWithFilterRequest)(nil), // 86: productv1.QueryAuthorsWithFilterRequest + (*QueryAuthorsWithFilterResponse)(nil), // 87: productv1.QueryAuthorsWithFilterResponse + (*QueryAllAuthorsRequest)(nil), // 88: productv1.QueryAllAuthorsRequest + (*QueryAllAuthorsResponse)(nil), // 89: productv1.QueryAllAuthorsResponse + (*QueryBulkSearchAuthorsRequest)(nil), // 90: productv1.QueryBulkSearchAuthorsRequest + (*QueryBulkSearchAuthorsResponse)(nil), // 91: productv1.QueryBulkSearchAuthorsResponse + (*QueryBulkSearchBlogPostsRequest)(nil), // 92: productv1.QueryBulkSearchBlogPostsRequest + (*QueryBulkSearchBlogPostsResponse)(nil), // 93: productv1.QueryBulkSearchBlogPostsResponse + (*QueryTestContainerRequest)(nil), // 94: productv1.QueryTestContainerRequest + (*QueryTestContainerResponse)(nil), // 95: productv1.QueryTestContainerResponse + (*QueryTestContainersRequest)(nil), // 96: productv1.QueryTestContainersRequest + (*QueryTestContainersResponse)(nil), // 97: productv1.QueryTestContainersResponse + (*MutationCreateUserRequest)(nil), // 98: productv1.MutationCreateUserRequest + (*MutationCreateUserResponse)(nil), // 99: productv1.MutationCreateUserResponse + (*MutationPerformActionRequest)(nil), // 100: productv1.MutationPerformActionRequest + (*MutationPerformActionResponse)(nil), // 101: productv1.MutationPerformActionResponse + (*MutationCreateNullableFieldsTypeRequest)(nil), // 102: productv1.MutationCreateNullableFieldsTypeRequest + (*MutationCreateNullableFieldsTypeResponse)(nil), // 103: productv1.MutationCreateNullableFieldsTypeResponse + (*MutationUpdateNullableFieldsTypeRequest)(nil), // 104: productv1.MutationUpdateNullableFieldsTypeRequest + (*MutationUpdateNullableFieldsTypeResponse)(nil), // 105: productv1.MutationUpdateNullableFieldsTypeResponse + (*MutationCreateBlogPostRequest)(nil), // 106: productv1.MutationCreateBlogPostRequest + (*MutationCreateBlogPostResponse)(nil), // 107: productv1.MutationCreateBlogPostResponse + (*MutationUpdateBlogPostRequest)(nil), // 108: productv1.MutationUpdateBlogPostRequest + (*MutationUpdateBlogPostResponse)(nil), // 109: productv1.MutationUpdateBlogPostResponse + (*MutationCreateAuthorRequest)(nil), // 110: productv1.MutationCreateAuthorRequest + (*MutationCreateAuthorResponse)(nil), // 111: productv1.MutationCreateAuthorResponse + (*MutationUpdateAuthorRequest)(nil), // 112: productv1.MutationUpdateAuthorRequest + (*MutationUpdateAuthorResponse)(nil), // 113: productv1.MutationUpdateAuthorResponse + (*MutationBulkCreateAuthorsRequest)(nil), // 114: productv1.MutationBulkCreateAuthorsRequest + (*MutationBulkCreateAuthorsResponse)(nil), // 115: productv1.MutationBulkCreateAuthorsResponse + (*MutationBulkUpdateAuthorsRequest)(nil), // 116: productv1.MutationBulkUpdateAuthorsRequest + (*MutationBulkUpdateAuthorsResponse)(nil), // 117: productv1.MutationBulkUpdateAuthorsResponse + (*MutationBulkCreateBlogPostsRequest)(nil), // 118: productv1.MutationBulkCreateBlogPostsRequest + (*MutationBulkCreateBlogPostsResponse)(nil), // 119: productv1.MutationBulkCreateBlogPostsResponse + (*MutationBulkUpdateBlogPostsRequest)(nil), // 120: productv1.MutationBulkUpdateBlogPostsRequest + (*MutationBulkUpdateBlogPostsResponse)(nil), // 121: productv1.MutationBulkUpdateBlogPostsResponse + (*ResolveProductShippingEstimateArgs)(nil), // 122: productv1.ResolveProductShippingEstimateArgs + (*ResolveProductShippingEstimateContext)(nil), // 123: productv1.ResolveProductShippingEstimateContext + (*ResolveProductShippingEstimateRequest)(nil), // 124: productv1.ResolveProductShippingEstimateRequest + (*ResolveProductShippingEstimateResult)(nil), // 125: productv1.ResolveProductShippingEstimateResult + (*ResolveProductShippingEstimateResponse)(nil), // 126: productv1.ResolveProductShippingEstimateResponse + (*ResolveProductRecommendedCategoryArgs)(nil), // 127: productv1.ResolveProductRecommendedCategoryArgs + (*ResolveProductRecommendedCategoryContext)(nil), // 128: productv1.ResolveProductRecommendedCategoryContext + (*ResolveProductRecommendedCategoryRequest)(nil), // 129: productv1.ResolveProductRecommendedCategoryRequest + (*ResolveProductRecommendedCategoryResult)(nil), // 130: productv1.ResolveProductRecommendedCategoryResult + (*ResolveProductRecommendedCategoryResponse)(nil), // 131: productv1.ResolveProductRecommendedCategoryResponse + (*ResolveProductMascotRecommendationArgs)(nil), // 132: productv1.ResolveProductMascotRecommendationArgs + (*ResolveProductMascotRecommendationContext)(nil), // 133: productv1.ResolveProductMascotRecommendationContext + (*ResolveProductMascotRecommendationRequest)(nil), // 134: productv1.ResolveProductMascotRecommendationRequest + (*ResolveProductMascotRecommendationResult)(nil), // 135: productv1.ResolveProductMascotRecommendationResult + (*ResolveProductMascotRecommendationResponse)(nil), // 136: productv1.ResolveProductMascotRecommendationResponse + (*ResolveProductStockStatusArgs)(nil), // 137: productv1.ResolveProductStockStatusArgs + (*ResolveProductStockStatusContext)(nil), // 138: productv1.ResolveProductStockStatusContext + (*ResolveProductStockStatusRequest)(nil), // 139: productv1.ResolveProductStockStatusRequest + (*ResolveProductStockStatusResult)(nil), // 140: productv1.ResolveProductStockStatusResult + (*ResolveProductStockStatusResponse)(nil), // 141: productv1.ResolveProductStockStatusResponse + (*ResolveProductProductDetailsArgs)(nil), // 142: productv1.ResolveProductProductDetailsArgs + (*ResolveProductProductDetailsContext)(nil), // 143: productv1.ResolveProductProductDetailsContext + (*ResolveProductProductDetailsRequest)(nil), // 144: productv1.ResolveProductProductDetailsRequest + (*ResolveProductProductDetailsResult)(nil), // 145: productv1.ResolveProductProductDetailsResult + (*ResolveProductProductDetailsResponse)(nil), // 146: productv1.ResolveProductProductDetailsResponse + (*ResolveStorageStorageStatusArgs)(nil), // 147: productv1.ResolveStorageStorageStatusArgs + (*ResolveStorageStorageStatusContext)(nil), // 148: productv1.ResolveStorageStorageStatusContext + (*ResolveStorageStorageStatusRequest)(nil), // 149: productv1.ResolveStorageStorageStatusRequest + (*ResolveStorageStorageStatusResult)(nil), // 150: productv1.ResolveStorageStorageStatusResult + (*ResolveStorageStorageStatusResponse)(nil), // 151: productv1.ResolveStorageStorageStatusResponse + (*ResolveStorageLinkedStoragesArgs)(nil), // 152: productv1.ResolveStorageLinkedStoragesArgs + (*ResolveStorageLinkedStoragesContext)(nil), // 153: productv1.ResolveStorageLinkedStoragesContext + (*ResolveStorageLinkedStoragesRequest)(nil), // 154: productv1.ResolveStorageLinkedStoragesRequest + (*ResolveStorageLinkedStoragesResult)(nil), // 155: productv1.ResolveStorageLinkedStoragesResult + (*ResolveStorageLinkedStoragesResponse)(nil), // 156: productv1.ResolveStorageLinkedStoragesResponse + (*ResolveStorageNearbyStoragesArgs)(nil), // 157: productv1.ResolveStorageNearbyStoragesArgs + (*ResolveStorageNearbyStoragesContext)(nil), // 158: productv1.ResolveStorageNearbyStoragesContext + (*ResolveStorageNearbyStoragesRequest)(nil), // 159: productv1.ResolveStorageNearbyStoragesRequest + (*ResolveStorageNearbyStoragesResult)(nil), // 160: productv1.ResolveStorageNearbyStoragesResult + (*ResolveStorageNearbyStoragesResponse)(nil), // 161: productv1.ResolveStorageNearbyStoragesResponse + (*ResolveCategoryProductCountArgs)(nil), // 162: productv1.ResolveCategoryProductCountArgs + (*ResolveCategoryProductCountContext)(nil), // 163: productv1.ResolveCategoryProductCountContext + (*ResolveCategoryProductCountRequest)(nil), // 164: productv1.ResolveCategoryProductCountRequest + (*ResolveCategoryProductCountResult)(nil), // 165: productv1.ResolveCategoryProductCountResult + (*ResolveCategoryProductCountResponse)(nil), // 166: productv1.ResolveCategoryProductCountResponse + (*ResolveCategoryPopularityScoreArgs)(nil), // 167: productv1.ResolveCategoryPopularityScoreArgs + (*ResolveCategoryPopularityScoreContext)(nil), // 168: productv1.ResolveCategoryPopularityScoreContext + (*ResolveCategoryPopularityScoreRequest)(nil), // 169: productv1.ResolveCategoryPopularityScoreRequest + (*ResolveCategoryPopularityScoreResult)(nil), // 170: productv1.ResolveCategoryPopularityScoreResult + (*ResolveCategoryPopularityScoreResponse)(nil), // 171: productv1.ResolveCategoryPopularityScoreResponse + (*ResolveCategoryCategoryMetricsArgs)(nil), // 172: productv1.ResolveCategoryCategoryMetricsArgs + (*ResolveCategoryCategoryMetricsContext)(nil), // 173: productv1.ResolveCategoryCategoryMetricsContext + (*ResolveCategoryCategoryMetricsRequest)(nil), // 174: productv1.ResolveCategoryCategoryMetricsRequest + (*ResolveCategoryCategoryMetricsResult)(nil), // 175: productv1.ResolveCategoryCategoryMetricsResult + (*ResolveCategoryCategoryMetricsResponse)(nil), // 176: productv1.ResolveCategoryCategoryMetricsResponse + (*ResolveCategoryMascotArgs)(nil), // 177: productv1.ResolveCategoryMascotArgs + (*ResolveCategoryMascotContext)(nil), // 178: productv1.ResolveCategoryMascotContext + (*ResolveCategoryMascotRequest)(nil), // 179: productv1.ResolveCategoryMascotRequest + (*ResolveCategoryMascotResult)(nil), // 180: productv1.ResolveCategoryMascotResult + (*ResolveCategoryMascotResponse)(nil), // 181: productv1.ResolveCategoryMascotResponse + (*ResolveCategoryCategoryStatusArgs)(nil), // 182: productv1.ResolveCategoryCategoryStatusArgs + (*ResolveCategoryCategoryStatusContext)(nil), // 183: productv1.ResolveCategoryCategoryStatusContext + (*ResolveCategoryCategoryStatusRequest)(nil), // 184: productv1.ResolveCategoryCategoryStatusRequest + (*ResolveCategoryCategoryStatusResult)(nil), // 185: productv1.ResolveCategoryCategoryStatusResult + (*ResolveCategoryCategoryStatusResponse)(nil), // 186: productv1.ResolveCategoryCategoryStatusResponse + (*ResolveCategoryChildCategoriesArgs)(nil), // 187: productv1.ResolveCategoryChildCategoriesArgs + (*ResolveCategoryChildCategoriesContext)(nil), // 188: productv1.ResolveCategoryChildCategoriesContext + (*ResolveCategoryChildCategoriesRequest)(nil), // 189: productv1.ResolveCategoryChildCategoriesRequest + (*ResolveCategoryChildCategoriesResult)(nil), // 190: productv1.ResolveCategoryChildCategoriesResult + (*ResolveCategoryChildCategoriesResponse)(nil), // 191: productv1.ResolveCategoryChildCategoriesResponse + (*ResolveCategoryOptionalCategoriesArgs)(nil), // 192: productv1.ResolveCategoryOptionalCategoriesArgs + (*ResolveCategoryOptionalCategoriesContext)(nil), // 193: productv1.ResolveCategoryOptionalCategoriesContext + (*ResolveCategoryOptionalCategoriesRequest)(nil), // 194: productv1.ResolveCategoryOptionalCategoriesRequest + (*ResolveCategoryOptionalCategoriesResult)(nil), // 195: productv1.ResolveCategoryOptionalCategoriesResult + (*ResolveCategoryOptionalCategoriesResponse)(nil), // 196: productv1.ResolveCategoryOptionalCategoriesResponse + (*ResolveSubcategoryItemCountArgs)(nil), // 197: productv1.ResolveSubcategoryItemCountArgs + (*ResolveSubcategoryItemCountContext)(nil), // 198: productv1.ResolveSubcategoryItemCountContext + (*ResolveSubcategoryItemCountRequest)(nil), // 199: productv1.ResolveSubcategoryItemCountRequest + (*ResolveSubcategoryItemCountResult)(nil), // 200: productv1.ResolveSubcategoryItemCountResult + (*ResolveSubcategoryItemCountResponse)(nil), // 201: productv1.ResolveSubcategoryItemCountResponse + (*ResolveSubcategoryFeaturedCategoryArgs)(nil), // 202: productv1.ResolveSubcategoryFeaturedCategoryArgs + (*ResolveSubcategoryFeaturedCategoryContext)(nil), // 203: productv1.ResolveSubcategoryFeaturedCategoryContext + (*ResolveSubcategoryFeaturedCategoryRequest)(nil), // 204: productv1.ResolveSubcategoryFeaturedCategoryRequest + (*ResolveSubcategoryFeaturedCategoryResult)(nil), // 205: productv1.ResolveSubcategoryFeaturedCategoryResult + (*ResolveSubcategoryFeaturedCategoryResponse)(nil), // 206: productv1.ResolveSubcategoryFeaturedCategoryResponse + (*ResolveCategoryMetricsNormalizedScoreArgs)(nil), // 207: productv1.ResolveCategoryMetricsNormalizedScoreArgs + (*ResolveCategoryMetricsNormalizedScoreContext)(nil), // 208: productv1.ResolveCategoryMetricsNormalizedScoreContext + (*ResolveCategoryMetricsNormalizedScoreRequest)(nil), // 209: productv1.ResolveCategoryMetricsNormalizedScoreRequest + (*ResolveCategoryMetricsNormalizedScoreResult)(nil), // 210: productv1.ResolveCategoryMetricsNormalizedScoreResult + (*ResolveCategoryMetricsNormalizedScoreResponse)(nil), // 211: productv1.ResolveCategoryMetricsNormalizedScoreResponse + (*ResolveCategoryMetricsRelatedCategoryArgs)(nil), // 212: productv1.ResolveCategoryMetricsRelatedCategoryArgs + (*ResolveCategoryMetricsRelatedCategoryContext)(nil), // 213: productv1.ResolveCategoryMetricsRelatedCategoryContext + (*ResolveCategoryMetricsRelatedCategoryRequest)(nil), // 214: productv1.ResolveCategoryMetricsRelatedCategoryRequest + (*ResolveCategoryMetricsRelatedCategoryResult)(nil), // 215: productv1.ResolveCategoryMetricsRelatedCategoryResult + (*ResolveCategoryMetricsRelatedCategoryResponse)(nil), // 216: productv1.ResolveCategoryMetricsRelatedCategoryResponse + (*ResolveTestContainerDetailsArgs)(nil), // 217: productv1.ResolveTestContainerDetailsArgs + (*ResolveTestContainerDetailsContext)(nil), // 218: productv1.ResolveTestContainerDetailsContext + (*ResolveTestContainerDetailsRequest)(nil), // 219: productv1.ResolveTestContainerDetailsRequest + (*ResolveTestContainerDetailsResult)(nil), // 220: productv1.ResolveTestContainerDetailsResult + (*ResolveTestContainerDetailsResponse)(nil), // 221: productv1.ResolveTestContainerDetailsResponse + (*RequireStorageStockHealthScoreByIdRequest)(nil), // 222: productv1.RequireStorageStockHealthScoreByIdRequest + (*RequireStorageStockHealthScoreByIdContext)(nil), // 223: productv1.RequireStorageStockHealthScoreByIdContext + (*RequireStorageStockHealthScoreByIdResponse)(nil), // 224: productv1.RequireStorageStockHealthScoreByIdResponse + (*RequireStorageStockHealthScoreByIdResult)(nil), // 225: productv1.RequireStorageStockHealthScoreByIdResult + (*RequireStorageStockHealthScoreByIdFields)(nil), // 226: productv1.RequireStorageStockHealthScoreByIdFields + (*RequireStorageTagSummaryByIdRequest)(nil), // 227: productv1.RequireStorageTagSummaryByIdRequest + (*RequireStorageTagSummaryByIdContext)(nil), // 228: productv1.RequireStorageTagSummaryByIdContext + (*RequireStorageTagSummaryByIdResponse)(nil), // 229: productv1.RequireStorageTagSummaryByIdResponse + (*RequireStorageTagSummaryByIdResult)(nil), // 230: productv1.RequireStorageTagSummaryByIdResult + (*RequireStorageTagSummaryByIdFields)(nil), // 231: productv1.RequireStorageTagSummaryByIdFields + (*RequireStorageOptionalTagSummaryByIdRequest)(nil), // 232: productv1.RequireStorageOptionalTagSummaryByIdRequest + (*RequireStorageOptionalTagSummaryByIdContext)(nil), // 233: productv1.RequireStorageOptionalTagSummaryByIdContext + (*RequireStorageOptionalTagSummaryByIdResponse)(nil), // 234: productv1.RequireStorageOptionalTagSummaryByIdResponse + (*RequireStorageOptionalTagSummaryByIdResult)(nil), // 235: productv1.RequireStorageOptionalTagSummaryByIdResult + (*RequireStorageOptionalTagSummaryByIdFields)(nil), // 236: productv1.RequireStorageOptionalTagSummaryByIdFields + (*RequireStorageMetadataScoreByIdRequest)(nil), // 237: productv1.RequireStorageMetadataScoreByIdRequest + (*RequireStorageMetadataScoreByIdContext)(nil), // 238: productv1.RequireStorageMetadataScoreByIdContext + (*RequireStorageMetadataScoreByIdResponse)(nil), // 239: productv1.RequireStorageMetadataScoreByIdResponse + (*RequireStorageMetadataScoreByIdResult)(nil), // 240: productv1.RequireStorageMetadataScoreByIdResult + (*RequireStorageMetadataScoreByIdFields)(nil), // 241: productv1.RequireStorageMetadataScoreByIdFields + (*RequireStorageProcessedMetadataByIdRequest)(nil), // 242: productv1.RequireStorageProcessedMetadataByIdRequest + (*RequireStorageProcessedMetadataByIdContext)(nil), // 243: productv1.RequireStorageProcessedMetadataByIdContext + (*RequireStorageProcessedMetadataByIdResponse)(nil), // 244: productv1.RequireStorageProcessedMetadataByIdResponse + (*RequireStorageProcessedMetadataByIdResult)(nil), // 245: productv1.RequireStorageProcessedMetadataByIdResult + (*RequireStorageProcessedMetadataByIdFields)(nil), // 246: productv1.RequireStorageProcessedMetadataByIdFields + (*RequireStorageOptionalProcessedMetadataByIdRequest)(nil), // 247: productv1.RequireStorageOptionalProcessedMetadataByIdRequest + (*RequireStorageOptionalProcessedMetadataByIdContext)(nil), // 248: productv1.RequireStorageOptionalProcessedMetadataByIdContext + (*RequireStorageOptionalProcessedMetadataByIdResponse)(nil), // 249: productv1.RequireStorageOptionalProcessedMetadataByIdResponse + (*RequireStorageOptionalProcessedMetadataByIdResult)(nil), // 250: productv1.RequireStorageOptionalProcessedMetadataByIdResult + (*RequireStorageOptionalProcessedMetadataByIdFields)(nil), // 251: productv1.RequireStorageOptionalProcessedMetadataByIdFields + (*RequireStorageProcessedTagsByIdRequest)(nil), // 252: productv1.RequireStorageProcessedTagsByIdRequest + (*RequireStorageProcessedTagsByIdContext)(nil), // 253: productv1.RequireStorageProcessedTagsByIdContext + (*RequireStorageProcessedTagsByIdResponse)(nil), // 254: productv1.RequireStorageProcessedTagsByIdResponse + (*RequireStorageProcessedTagsByIdResult)(nil), // 255: productv1.RequireStorageProcessedTagsByIdResult + (*RequireStorageProcessedTagsByIdFields)(nil), // 256: productv1.RequireStorageProcessedTagsByIdFields + (*RequireStorageOptionalProcessedTagsByIdRequest)(nil), // 257: productv1.RequireStorageOptionalProcessedTagsByIdRequest + (*RequireStorageOptionalProcessedTagsByIdContext)(nil), // 258: productv1.RequireStorageOptionalProcessedTagsByIdContext + (*RequireStorageOptionalProcessedTagsByIdResponse)(nil), // 259: productv1.RequireStorageOptionalProcessedTagsByIdResponse + (*RequireStorageOptionalProcessedTagsByIdResult)(nil), // 260: productv1.RequireStorageOptionalProcessedTagsByIdResult + (*RequireStorageOptionalProcessedTagsByIdFields)(nil), // 261: productv1.RequireStorageOptionalProcessedTagsByIdFields + (*RequireStorageProcessedMetadataHistoryByIdRequest)(nil), // 262: productv1.RequireStorageProcessedMetadataHistoryByIdRequest + (*RequireStorageProcessedMetadataHistoryByIdContext)(nil), // 263: productv1.RequireStorageProcessedMetadataHistoryByIdContext + (*RequireStorageProcessedMetadataHistoryByIdResponse)(nil), // 264: productv1.RequireStorageProcessedMetadataHistoryByIdResponse + (*RequireStorageProcessedMetadataHistoryByIdResult)(nil), // 265: productv1.RequireStorageProcessedMetadataHistoryByIdResult + (*RequireStorageProcessedMetadataHistoryByIdFields)(nil), // 266: productv1.RequireStorageProcessedMetadataHistoryByIdFields + (*RequireWarehouseStockHealthScoreByIdRequest)(nil), // 267: productv1.RequireWarehouseStockHealthScoreByIdRequest + (*RequireWarehouseStockHealthScoreByIdContext)(nil), // 268: productv1.RequireWarehouseStockHealthScoreByIdContext + (*RequireWarehouseStockHealthScoreByIdResponse)(nil), // 269: productv1.RequireWarehouseStockHealthScoreByIdResponse + (*RequireWarehouseStockHealthScoreByIdResult)(nil), // 270: productv1.RequireWarehouseStockHealthScoreByIdResult + (*RequireWarehouseStockHealthScoreByIdFields)(nil), // 271: productv1.RequireWarehouseStockHealthScoreByIdFields + (*Product)(nil), // 272: productv1.Product + (*Storage)(nil), // 273: productv1.Storage + (*Warehouse)(nil), // 274: productv1.Warehouse + (*User)(nil), // 275: productv1.User + (*NestedTypeA)(nil), // 276: productv1.NestedTypeA + (*RecursiveType)(nil), // 277: productv1.RecursiveType + (*TypeWithMultipleFilterFields)(nil), // 278: productv1.TypeWithMultipleFilterFields + (*FilterTypeInput)(nil), // 279: productv1.FilterTypeInput + (*ComplexFilterTypeInput)(nil), // 280: productv1.ComplexFilterTypeInput + (*TypeWithComplexFilterInput)(nil), // 281: productv1.TypeWithComplexFilterInput + (*OrderInput)(nil), // 282: productv1.OrderInput + (*Order)(nil), // 283: productv1.Order + (*Category)(nil), // 284: productv1.Category + (*CategoryFilter)(nil), // 285: productv1.CategoryFilter + (*Animal)(nil), // 286: productv1.Animal + (*SearchInput)(nil), // 287: productv1.SearchInput + (*SearchResult)(nil), // 288: productv1.SearchResult + (*NullableFieldsType)(nil), // 289: productv1.NullableFieldsType + (*NullableFieldsFilter)(nil), // 290: productv1.NullableFieldsFilter + (*BlogPost)(nil), // 291: productv1.BlogPost + (*BlogPostFilter)(nil), // 292: productv1.BlogPostFilter + (*Author)(nil), // 293: productv1.Author + (*AuthorFilter)(nil), // 294: productv1.AuthorFilter + (*TestContainer)(nil), // 295: productv1.TestContainer + (*UserInput)(nil), // 296: productv1.UserInput + (*ActionInput)(nil), // 297: productv1.ActionInput + (*ActionResult)(nil), // 298: productv1.ActionResult + (*NullableFieldsInput)(nil), // 299: productv1.NullableFieldsInput + (*BlogPostInput)(nil), // 300: productv1.BlogPostInput + (*AuthorInput)(nil), // 301: productv1.AuthorInput + (*ProductDetails)(nil), // 302: productv1.ProductDetails + (*RestockData)(nil), // 303: productv1.RestockData + (*StorageMetadata)(nil), // 304: productv1.StorageMetadata + (*NestedTypeB)(nil), // 305: productv1.NestedTypeB + (*NestedTypeC)(nil), // 306: productv1.NestedTypeC + (*FilterType)(nil), // 307: productv1.FilterType + (*Pagination)(nil), // 308: productv1.Pagination + (*OrderLineInput)(nil), // 309: productv1.OrderLineInput + (*OrderLine)(nil), // 310: productv1.OrderLine + (*Subcategory)(nil), // 311: productv1.Subcategory + (*CategoryMetrics)(nil), // 312: productv1.CategoryMetrics + (*Cat)(nil), // 313: productv1.Cat + (*Dog)(nil), // 314: productv1.Dog + (*Owner)(nil), // 315: productv1.Owner + (*ContactInfo)(nil), // 316: productv1.ContactInfo + (*Address)(nil), // 317: productv1.Address + (*CatBreed)(nil), // 318: productv1.CatBreed + (*DogBreed)(nil), // 319: productv1.DogBreed + (*BreedCharacteristics)(nil), // 320: productv1.BreedCharacteristics + (*ActionSuccess)(nil), // 321: productv1.ActionSuccess + (*ActionError)(nil), // 322: productv1.ActionError + (*TestDetails)(nil), // 323: productv1.TestDetails + (*CategoryInput)(nil), // 324: productv1.CategoryInput + (*ProductCountFilter)(nil), // 325: productv1.ProductCountFilter + (*SubcategoryItemFilter)(nil), // 326: productv1.SubcategoryItemFilter + (*ShippingEstimateInput)(nil), // 327: productv1.ShippingEstimateInput + (*ListOfAuthorFilter_List)(nil), // 328: productv1.ListOfAuthorFilter.List + (*ListOfAuthorInput_List)(nil), // 329: productv1.ListOfAuthorInput.List + (*ListOfBlogPost_List)(nil), // 330: productv1.ListOfBlogPost.List + (*ListOfBlogPostFilter_List)(nil), // 331: productv1.ListOfBlogPostFilter.List + (*ListOfBlogPostInput_List)(nil), // 332: productv1.ListOfBlogPostInput.List + (*ListOfBoolean_List)(nil), // 333: productv1.ListOfBoolean.List + (*ListOfCategory_List)(nil), // 334: productv1.ListOfCategory.List + (*ListOfCategoryInput_List)(nil), // 335: productv1.ListOfCategoryInput.List + (*ListOfFloat_List)(nil), // 336: productv1.ListOfFloat.List + (*ListOfListOfCategory_List)(nil), // 337: productv1.ListOfListOfCategory.List + (*ListOfListOfCategoryInput_List)(nil), // 338: productv1.ListOfListOfCategoryInput.List + (*ListOfListOfString_List)(nil), // 339: productv1.ListOfListOfString.List + (*ListOfListOfUser_List)(nil), // 340: productv1.ListOfListOfUser.List + (*ListOfListOfUserInput_List)(nil), // 341: productv1.ListOfListOfUserInput.List + (*ListOfOrderLine_List)(nil), // 342: productv1.ListOfOrderLine.List + (*ListOfProduct_List)(nil), // 343: productv1.ListOfProduct.List + (*ListOfStorage_List)(nil), // 344: productv1.ListOfStorage.List + (*ListOfString_List)(nil), // 345: productv1.ListOfString.List + (*ListOfSubcategory_List)(nil), // 346: productv1.ListOfSubcategory.List + (*ListOfUser_List)(nil), // 347: productv1.ListOfUser.List + (*ListOfUserInput_List)(nil), // 348: productv1.ListOfUserInput.List + (*RequireStorageStockHealthScoreByIdFields_RestockData)(nil), // 349: productv1.RequireStorageStockHealthScoreByIdFields.RestockData + (*RequireStorageMetadataScoreByIdFields_StorageMetadata)(nil), // 350: productv1.RequireStorageMetadataScoreByIdFields.StorageMetadata + (*RequireStorageProcessedMetadataByIdFields_StorageMetadata)(nil), // 351: productv1.RequireStorageProcessedMetadataByIdFields.StorageMetadata + (*RequireStorageOptionalProcessedMetadataByIdFields_StorageMetadata)(nil), // 352: productv1.RequireStorageOptionalProcessedMetadataByIdFields.StorageMetadata + (*RequireStorageProcessedMetadataHistoryByIdFields_StorageMetadata)(nil), // 353: productv1.RequireStorageProcessedMetadataHistoryByIdFields.StorageMetadata + (*RequireWarehouseStockHealthScoreByIdFields_RestockData)(nil), // 354: productv1.RequireWarehouseStockHealthScoreByIdFields.RestockData + (*wrapperspb.Int32Value)(nil), // 355: google.protobuf.Int32Value + (*wrapperspb.BoolValue)(nil), // 356: google.protobuf.BoolValue + (*wrapperspb.StringValue)(nil), // 357: google.protobuf.StringValue + (*wrapperspb.DoubleValue)(nil), // 358: google.protobuf.DoubleValue } var file_product_proto_depIdxs = []int32{ - 260, // 0: productv1.ListOfAuthorFilter.list:type_name -> productv1.ListOfAuthorFilter.List - 261, // 1: productv1.ListOfAuthorInput.list:type_name -> productv1.ListOfAuthorInput.List - 262, // 2: productv1.ListOfBlogPost.list:type_name -> productv1.ListOfBlogPost.List - 263, // 3: productv1.ListOfBlogPostFilter.list:type_name -> productv1.ListOfBlogPostFilter.List - 264, // 4: productv1.ListOfBlogPostInput.list:type_name -> productv1.ListOfBlogPostInput.List - 265, // 5: productv1.ListOfBoolean.list:type_name -> productv1.ListOfBoolean.List - 266, // 6: productv1.ListOfCategory.list:type_name -> productv1.ListOfCategory.List - 267, // 7: productv1.ListOfCategoryInput.list:type_name -> productv1.ListOfCategoryInput.List - 268, // 8: productv1.ListOfFloat.list:type_name -> productv1.ListOfFloat.List - 269, // 9: productv1.ListOfListOfCategory.list:type_name -> productv1.ListOfListOfCategory.List - 270, // 10: productv1.ListOfListOfCategoryInput.list:type_name -> productv1.ListOfListOfCategoryInput.List - 271, // 11: productv1.ListOfListOfString.list:type_name -> productv1.ListOfListOfString.List - 272, // 12: productv1.ListOfListOfUser.list:type_name -> productv1.ListOfListOfUser.List - 273, // 13: productv1.ListOfListOfUserInput.list:type_name -> productv1.ListOfListOfUserInput.List - 274, // 14: productv1.ListOfOrderLine.list:type_name -> productv1.ListOfOrderLine.List - 275, // 15: productv1.ListOfProduct.list:type_name -> productv1.ListOfProduct.List - 276, // 16: productv1.ListOfString.list:type_name -> productv1.ListOfString.List - 277, // 17: productv1.ListOfSubcategory.list:type_name -> productv1.ListOfSubcategory.List - 278, // 18: productv1.ListOfUser.list:type_name -> productv1.ListOfUser.List - 279, // 19: productv1.ListOfUserInput.list:type_name -> productv1.ListOfUserInput.List - 22, // 20: productv1.LookupProductByIdRequest.keys:type_name -> productv1.LookupProductByIdRequestKey - 206, // 21: productv1.LookupProductByIdResponse.result:type_name -> productv1.Product - 25, // 22: productv1.LookupStorageByIdRequest.keys:type_name -> productv1.LookupStorageByIdRequestKey - 207, // 23: productv1.LookupStorageByIdResponse.result:type_name -> productv1.Storage - 28, // 24: productv1.LookupWarehouseByIdRequest.keys:type_name -> productv1.LookupWarehouseByIdRequestKey - 208, // 25: productv1.LookupWarehouseByIdResponse.result:type_name -> productv1.Warehouse - 209, // 26: productv1.QueryUsersResponse.users:type_name -> productv1.User - 209, // 27: productv1.QueryUserResponse.user:type_name -> productv1.User - 210, // 28: productv1.QueryNestedTypeResponse.nested_type:type_name -> productv1.NestedTypeA - 211, // 29: productv1.QueryRecursiveTypeResponse.recursive_type:type_name -> productv1.RecursiveType - 212, // 30: productv1.QueryTypeFilterWithArgumentsResponse.type_filter_with_arguments:type_name -> productv1.TypeWithMultipleFilterFields - 213, // 31: productv1.QueryTypeWithMultipleFilterFieldsRequest.filter:type_name -> productv1.FilterTypeInput - 212, // 32: productv1.QueryTypeWithMultipleFilterFieldsResponse.type_with_multiple_filter_fields:type_name -> productv1.TypeWithMultipleFilterFields - 214, // 33: productv1.QueryComplexFilterTypeRequest.filter:type_name -> productv1.ComplexFilterTypeInput - 215, // 34: productv1.QueryComplexFilterTypeResponse.complex_filter_type:type_name -> productv1.TypeWithComplexFilterInput - 216, // 35: productv1.QueryCalculateTotalsRequest.orders:type_name -> productv1.OrderInput - 217, // 36: productv1.QueryCalculateTotalsResponse.calculate_totals:type_name -> productv1.Order - 218, // 37: productv1.QueryCategoriesResponse.categories:type_name -> productv1.Category - 218, // 38: productv1.QueryCategoryResponse.category:type_name -> productv1.Category - 0, // 39: productv1.QueryCategoriesByKindRequest.kind:type_name -> productv1.CategoryKind - 218, // 40: productv1.QueryCategoriesByKindResponse.categories_by_kind:type_name -> productv1.Category - 0, // 41: productv1.QueryCategoriesByKindsRequest.kinds:type_name -> productv1.CategoryKind - 218, // 42: productv1.QueryCategoriesByKindsResponse.categories_by_kinds:type_name -> productv1.Category - 219, // 43: productv1.QueryFilterCategoriesRequest.filter:type_name -> productv1.CategoryFilter - 218, // 44: productv1.QueryFilterCategoriesResponse.filter_categories:type_name -> productv1.Category - 220, // 45: productv1.QueryRandomPetResponse.random_pet:type_name -> productv1.Animal - 220, // 46: productv1.QueryAllPetsResponse.all_pets:type_name -> productv1.Animal - 221, // 47: productv1.QuerySearchRequest.input:type_name -> productv1.SearchInput - 222, // 48: productv1.QuerySearchResponse.search:type_name -> productv1.SearchResult - 222, // 49: productv1.QueryRandomSearchResultResponse.random_search_result:type_name -> productv1.SearchResult - 223, // 50: productv1.QueryNullableFieldsTypeResponse.nullable_fields_type:type_name -> productv1.NullableFieldsType - 223, // 51: productv1.QueryNullableFieldsTypeByIdResponse.nullable_fields_type_by_id:type_name -> productv1.NullableFieldsType - 224, // 52: productv1.QueryNullableFieldsTypeWithFilterRequest.filter:type_name -> productv1.NullableFieldsFilter - 223, // 53: productv1.QueryNullableFieldsTypeWithFilterResponse.nullable_fields_type_with_filter:type_name -> productv1.NullableFieldsType - 223, // 54: productv1.QueryAllNullableFieldsTypesResponse.all_nullable_fields_types:type_name -> productv1.NullableFieldsType - 225, // 55: productv1.QueryBlogPostResponse.blog_post:type_name -> productv1.BlogPost - 225, // 56: productv1.QueryBlogPostByIdResponse.blog_post_by_id:type_name -> productv1.BlogPost - 226, // 57: productv1.QueryBlogPostsWithFilterRequest.filter:type_name -> productv1.BlogPostFilter - 225, // 58: productv1.QueryBlogPostsWithFilterResponse.blog_posts_with_filter:type_name -> productv1.BlogPost - 225, // 59: productv1.QueryAllBlogPostsResponse.all_blog_posts:type_name -> productv1.BlogPost - 227, // 60: productv1.QueryAuthorResponse.author:type_name -> productv1.Author - 227, // 61: productv1.QueryAuthorByIdResponse.author_by_id:type_name -> productv1.Author - 228, // 62: productv1.QueryAuthorsWithFilterRequest.filter:type_name -> productv1.AuthorFilter - 227, // 63: productv1.QueryAuthorsWithFilterResponse.authors_with_filter:type_name -> productv1.Author - 227, // 64: productv1.QueryAllAuthorsResponse.all_authors:type_name -> productv1.Author - 2, // 65: productv1.QueryBulkSearchAuthorsRequest.filters:type_name -> productv1.ListOfAuthorFilter - 227, // 66: productv1.QueryBulkSearchAuthorsResponse.bulk_search_authors:type_name -> productv1.Author - 5, // 67: productv1.QueryBulkSearchBlogPostsRequest.filters:type_name -> productv1.ListOfBlogPostFilter - 225, // 68: productv1.QueryBulkSearchBlogPostsResponse.bulk_search_blog_posts:type_name -> productv1.BlogPost - 229, // 69: productv1.QueryTestContainerResponse.test_container:type_name -> productv1.TestContainer - 229, // 70: productv1.QueryTestContainersResponse.test_containers:type_name -> productv1.TestContainer - 230, // 71: productv1.MutationCreateUserRequest.input:type_name -> productv1.UserInput - 209, // 72: productv1.MutationCreateUserResponse.create_user:type_name -> productv1.User - 231, // 73: productv1.MutationPerformActionRequest.input:type_name -> productv1.ActionInput - 232, // 74: productv1.MutationPerformActionResponse.perform_action:type_name -> productv1.ActionResult - 233, // 75: productv1.MutationCreateNullableFieldsTypeRequest.input:type_name -> productv1.NullableFieldsInput - 223, // 76: productv1.MutationCreateNullableFieldsTypeResponse.create_nullable_fields_type:type_name -> productv1.NullableFieldsType - 233, // 77: productv1.MutationUpdateNullableFieldsTypeRequest.input:type_name -> productv1.NullableFieldsInput - 223, // 78: productv1.MutationUpdateNullableFieldsTypeResponse.update_nullable_fields_type:type_name -> productv1.NullableFieldsType - 234, // 79: productv1.MutationCreateBlogPostRequest.input:type_name -> productv1.BlogPostInput - 225, // 80: productv1.MutationCreateBlogPostResponse.create_blog_post:type_name -> productv1.BlogPost - 234, // 81: productv1.MutationUpdateBlogPostRequest.input:type_name -> productv1.BlogPostInput - 225, // 82: productv1.MutationUpdateBlogPostResponse.update_blog_post:type_name -> productv1.BlogPost - 235, // 83: productv1.MutationCreateAuthorRequest.input:type_name -> productv1.AuthorInput - 227, // 84: productv1.MutationCreateAuthorResponse.create_author:type_name -> productv1.Author - 235, // 85: productv1.MutationUpdateAuthorRequest.input:type_name -> productv1.AuthorInput - 227, // 86: productv1.MutationUpdateAuthorResponse.update_author:type_name -> productv1.Author - 3, // 87: productv1.MutationBulkCreateAuthorsRequest.authors:type_name -> productv1.ListOfAuthorInput - 227, // 88: productv1.MutationBulkCreateAuthorsResponse.bulk_create_authors:type_name -> productv1.Author - 3, // 89: productv1.MutationBulkUpdateAuthorsRequest.authors:type_name -> productv1.ListOfAuthorInput - 227, // 90: productv1.MutationBulkUpdateAuthorsResponse.bulk_update_authors:type_name -> productv1.Author - 6, // 91: productv1.MutationBulkCreateBlogPostsRequest.blog_posts:type_name -> productv1.ListOfBlogPostInput - 225, // 92: productv1.MutationBulkCreateBlogPostsResponse.bulk_create_blog_posts:type_name -> productv1.BlogPost - 6, // 93: productv1.MutationBulkUpdateBlogPostsRequest.blog_posts:type_name -> productv1.ListOfBlogPostInput - 225, // 94: productv1.MutationBulkUpdateBlogPostsResponse.bulk_update_blog_posts:type_name -> productv1.BlogPost - 259, // 95: productv1.ResolveProductShippingEstimateArgs.input:type_name -> productv1.ShippingEstimateInput - 122, // 96: productv1.ResolveProductShippingEstimateRequest.context:type_name -> productv1.ResolveProductShippingEstimateContext - 121, // 97: productv1.ResolveProductShippingEstimateRequest.field_args:type_name -> productv1.ResolveProductShippingEstimateArgs - 124, // 98: productv1.ResolveProductShippingEstimateResponse.result:type_name -> productv1.ResolveProductShippingEstimateResult - 127, // 99: productv1.ResolveProductRecommendedCategoryRequest.context:type_name -> productv1.ResolveProductRecommendedCategoryContext - 126, // 100: productv1.ResolveProductRecommendedCategoryRequest.field_args:type_name -> productv1.ResolveProductRecommendedCategoryArgs - 218, // 101: productv1.ResolveProductRecommendedCategoryResult.recommended_category:type_name -> productv1.Category - 129, // 102: productv1.ResolveProductRecommendedCategoryResponse.result:type_name -> productv1.ResolveProductRecommendedCategoryResult - 132, // 103: productv1.ResolveProductMascotRecommendationRequest.context:type_name -> productv1.ResolveProductMascotRecommendationContext - 131, // 104: productv1.ResolveProductMascotRecommendationRequest.field_args:type_name -> productv1.ResolveProductMascotRecommendationArgs - 220, // 105: productv1.ResolveProductMascotRecommendationResult.mascot_recommendation:type_name -> productv1.Animal - 134, // 106: productv1.ResolveProductMascotRecommendationResponse.result:type_name -> productv1.ResolveProductMascotRecommendationResult - 137, // 107: productv1.ResolveProductStockStatusRequest.context:type_name -> productv1.ResolveProductStockStatusContext - 136, // 108: productv1.ResolveProductStockStatusRequest.field_args:type_name -> productv1.ResolveProductStockStatusArgs - 232, // 109: productv1.ResolveProductStockStatusResult.stock_status:type_name -> productv1.ActionResult - 139, // 110: productv1.ResolveProductStockStatusResponse.result:type_name -> productv1.ResolveProductStockStatusResult - 142, // 111: productv1.ResolveProductProductDetailsRequest.context:type_name -> productv1.ResolveProductProductDetailsContext - 141, // 112: productv1.ResolveProductProductDetailsRequest.field_args:type_name -> productv1.ResolveProductProductDetailsArgs - 236, // 113: productv1.ResolveProductProductDetailsResult.product_details:type_name -> productv1.ProductDetails - 144, // 114: productv1.ResolveProductProductDetailsResponse.result:type_name -> productv1.ResolveProductProductDetailsResult - 257, // 115: productv1.ResolveCategoryProductCountArgs.filters:type_name -> productv1.ProductCountFilter - 147, // 116: productv1.ResolveCategoryProductCountRequest.context:type_name -> productv1.ResolveCategoryProductCountContext - 146, // 117: productv1.ResolveCategoryProductCountRequest.field_args:type_name -> productv1.ResolveCategoryProductCountArgs - 149, // 118: productv1.ResolveCategoryProductCountResponse.result:type_name -> productv1.ResolveCategoryProductCountResult - 280, // 119: productv1.ResolveCategoryPopularityScoreArgs.threshold:type_name -> google.protobuf.Int32Value - 152, // 120: productv1.ResolveCategoryPopularityScoreRequest.context:type_name -> productv1.ResolveCategoryPopularityScoreContext - 151, // 121: productv1.ResolveCategoryPopularityScoreRequest.field_args:type_name -> productv1.ResolveCategoryPopularityScoreArgs - 280, // 122: productv1.ResolveCategoryPopularityScoreResult.popularity_score:type_name -> google.protobuf.Int32Value - 154, // 123: productv1.ResolveCategoryPopularityScoreResponse.result:type_name -> productv1.ResolveCategoryPopularityScoreResult - 157, // 124: productv1.ResolveCategoryCategoryMetricsRequest.context:type_name -> productv1.ResolveCategoryCategoryMetricsContext - 156, // 125: productv1.ResolveCategoryCategoryMetricsRequest.field_args:type_name -> productv1.ResolveCategoryCategoryMetricsArgs - 244, // 126: productv1.ResolveCategoryCategoryMetricsResult.category_metrics:type_name -> productv1.CategoryMetrics - 159, // 127: productv1.ResolveCategoryCategoryMetricsResponse.result:type_name -> productv1.ResolveCategoryCategoryMetricsResult - 0, // 128: productv1.ResolveCategoryMascotContext.kind:type_name -> productv1.CategoryKind - 162, // 129: productv1.ResolveCategoryMascotRequest.context:type_name -> productv1.ResolveCategoryMascotContext - 161, // 130: productv1.ResolveCategoryMascotRequest.field_args:type_name -> productv1.ResolveCategoryMascotArgs - 220, // 131: productv1.ResolveCategoryMascotResult.mascot:type_name -> productv1.Animal - 164, // 132: productv1.ResolveCategoryMascotResponse.result:type_name -> productv1.ResolveCategoryMascotResult - 167, // 133: productv1.ResolveCategoryCategoryStatusRequest.context:type_name -> productv1.ResolveCategoryCategoryStatusContext - 166, // 134: productv1.ResolveCategoryCategoryStatusRequest.field_args:type_name -> productv1.ResolveCategoryCategoryStatusArgs - 232, // 135: productv1.ResolveCategoryCategoryStatusResult.category_status:type_name -> productv1.ActionResult - 169, // 136: productv1.ResolveCategoryCategoryStatusResponse.result:type_name -> productv1.ResolveCategoryCategoryStatusResult - 281, // 137: productv1.ResolveCategoryChildCategoriesArgs.include:type_name -> google.protobuf.BoolValue - 172, // 138: productv1.ResolveCategoryChildCategoriesRequest.context:type_name -> productv1.ResolveCategoryChildCategoriesContext - 171, // 139: productv1.ResolveCategoryChildCategoriesRequest.field_args:type_name -> productv1.ResolveCategoryChildCategoriesArgs - 218, // 140: productv1.ResolveCategoryChildCategoriesResult.child_categories:type_name -> productv1.Category - 174, // 141: productv1.ResolveCategoryChildCategoriesResponse.result:type_name -> productv1.ResolveCategoryChildCategoriesResult - 281, // 142: productv1.ResolveCategoryOptionalCategoriesArgs.include:type_name -> google.protobuf.BoolValue - 177, // 143: productv1.ResolveCategoryOptionalCategoriesRequest.context:type_name -> productv1.ResolveCategoryOptionalCategoriesContext - 176, // 144: productv1.ResolveCategoryOptionalCategoriesRequest.field_args:type_name -> productv1.ResolveCategoryOptionalCategoriesArgs - 8, // 145: productv1.ResolveCategoryOptionalCategoriesResult.optional_categories:type_name -> productv1.ListOfCategory - 179, // 146: productv1.ResolveCategoryOptionalCategoriesResponse.result:type_name -> productv1.ResolveCategoryOptionalCategoriesResult - 258, // 147: productv1.ResolveSubcategoryItemCountArgs.filters:type_name -> productv1.SubcategoryItemFilter - 182, // 148: productv1.ResolveSubcategoryItemCountRequest.context:type_name -> productv1.ResolveSubcategoryItemCountContext - 181, // 149: productv1.ResolveSubcategoryItemCountRequest.field_args:type_name -> productv1.ResolveSubcategoryItemCountArgs - 184, // 150: productv1.ResolveSubcategoryItemCountResponse.result:type_name -> productv1.ResolveSubcategoryItemCountResult - 187, // 151: productv1.ResolveSubcategoryFeaturedCategoryRequest.context:type_name -> productv1.ResolveSubcategoryFeaturedCategoryContext - 186, // 152: productv1.ResolveSubcategoryFeaturedCategoryRequest.field_args:type_name -> productv1.ResolveSubcategoryFeaturedCategoryArgs - 218, // 153: productv1.ResolveSubcategoryFeaturedCategoryResult.featured_category:type_name -> productv1.Category - 189, // 154: productv1.ResolveSubcategoryFeaturedCategoryResponse.result:type_name -> productv1.ResolveSubcategoryFeaturedCategoryResult - 192, // 155: productv1.ResolveCategoryMetricsNormalizedScoreRequest.context:type_name -> productv1.ResolveCategoryMetricsNormalizedScoreContext - 191, // 156: productv1.ResolveCategoryMetricsNormalizedScoreRequest.field_args:type_name -> productv1.ResolveCategoryMetricsNormalizedScoreArgs - 194, // 157: productv1.ResolveCategoryMetricsNormalizedScoreResponse.result:type_name -> productv1.ResolveCategoryMetricsNormalizedScoreResult - 281, // 158: productv1.ResolveCategoryMetricsRelatedCategoryArgs.include:type_name -> google.protobuf.BoolValue - 197, // 159: productv1.ResolveCategoryMetricsRelatedCategoryRequest.context:type_name -> productv1.ResolveCategoryMetricsRelatedCategoryContext - 196, // 160: productv1.ResolveCategoryMetricsRelatedCategoryRequest.field_args:type_name -> productv1.ResolveCategoryMetricsRelatedCategoryArgs - 218, // 161: productv1.ResolveCategoryMetricsRelatedCategoryResult.related_category:type_name -> productv1.Category - 199, // 162: productv1.ResolveCategoryMetricsRelatedCategoryResponse.result:type_name -> productv1.ResolveCategoryMetricsRelatedCategoryResult - 202, // 163: productv1.ResolveTestContainerDetailsRequest.context:type_name -> productv1.ResolveTestContainerDetailsContext - 201, // 164: productv1.ResolveTestContainerDetailsRequest.field_args:type_name -> productv1.ResolveTestContainerDetailsArgs - 255, // 165: productv1.ResolveTestContainerDetailsResult.details:type_name -> productv1.TestDetails - 204, // 166: productv1.ResolveTestContainerDetailsResponse.result:type_name -> productv1.ResolveTestContainerDetailsResult - 237, // 167: productv1.NestedTypeA.b:type_name -> productv1.NestedTypeB - 211, // 168: productv1.RecursiveType.recursive_type:type_name -> productv1.RecursiveType - 239, // 169: productv1.ComplexFilterTypeInput.filter:type_name -> productv1.FilterType - 241, // 170: productv1.OrderInput.lines:type_name -> productv1.OrderLineInput - 16, // 171: productv1.Order.order_lines:type_name -> productv1.ListOfOrderLine - 0, // 172: productv1.Category.kind:type_name -> productv1.CategoryKind - 19, // 173: productv1.Category.subcategories:type_name -> productv1.ListOfSubcategory - 244, // 174: productv1.Category.null_metrics:type_name -> productv1.CategoryMetrics - 0, // 175: productv1.CategoryFilter.category:type_name -> productv1.CategoryKind - 240, // 176: productv1.CategoryFilter.pagination:type_name -> productv1.Pagination - 245, // 177: productv1.Animal.cat:type_name -> productv1.Cat - 246, // 178: productv1.Animal.dog:type_name -> productv1.Dog - 280, // 179: productv1.SearchInput.limit:type_name -> google.protobuf.Int32Value - 206, // 180: productv1.SearchResult.product:type_name -> productv1.Product - 209, // 181: productv1.SearchResult.user:type_name -> productv1.User - 218, // 182: productv1.SearchResult.category:type_name -> productv1.Category - 282, // 183: productv1.NullableFieldsType.optional_string:type_name -> google.protobuf.StringValue - 280, // 184: productv1.NullableFieldsType.optional_int:type_name -> google.protobuf.Int32Value - 283, // 185: productv1.NullableFieldsType.optional_float:type_name -> google.protobuf.DoubleValue - 281, // 186: productv1.NullableFieldsType.optional_boolean:type_name -> google.protobuf.BoolValue - 282, // 187: productv1.NullableFieldsFilter.name:type_name -> google.protobuf.StringValue - 282, // 188: productv1.NullableFieldsFilter.optional_string:type_name -> google.protobuf.StringValue - 281, // 189: productv1.NullableFieldsFilter.include_nulls:type_name -> google.protobuf.BoolValue - 18, // 190: productv1.BlogPost.optional_tags:type_name -> productv1.ListOfString - 18, // 191: productv1.BlogPost.keywords:type_name -> productv1.ListOfString - 10, // 192: productv1.BlogPost.ratings:type_name -> productv1.ListOfFloat - 7, // 193: productv1.BlogPost.is_published:type_name -> productv1.ListOfBoolean - 13, // 194: productv1.BlogPost.tag_groups:type_name -> productv1.ListOfListOfString - 13, // 195: productv1.BlogPost.related_topics:type_name -> productv1.ListOfListOfString - 13, // 196: productv1.BlogPost.comment_threads:type_name -> productv1.ListOfListOfString - 13, // 197: productv1.BlogPost.suggestions:type_name -> productv1.ListOfListOfString - 218, // 198: productv1.BlogPost.related_categories:type_name -> productv1.Category - 209, // 199: productv1.BlogPost.contributors:type_name -> productv1.User - 17, // 200: productv1.BlogPost.mentioned_products:type_name -> productv1.ListOfProduct - 20, // 201: productv1.BlogPost.mentioned_users:type_name -> productv1.ListOfUser - 11, // 202: productv1.BlogPost.category_groups:type_name -> productv1.ListOfListOfCategory - 14, // 203: productv1.BlogPost.contributor_teams:type_name -> productv1.ListOfListOfUser - 282, // 204: productv1.BlogPostFilter.title:type_name -> google.protobuf.StringValue - 281, // 205: productv1.BlogPostFilter.has_categories:type_name -> google.protobuf.BoolValue - 280, // 206: productv1.BlogPostFilter.min_tags:type_name -> google.protobuf.Int32Value - 282, // 207: productv1.Author.email:type_name -> google.protobuf.StringValue - 18, // 208: productv1.Author.social_links:type_name -> productv1.ListOfString - 13, // 209: productv1.Author.teams_by_project:type_name -> productv1.ListOfListOfString - 13, // 210: productv1.Author.collaborations:type_name -> productv1.ListOfListOfString - 4, // 211: productv1.Author.written_posts:type_name -> productv1.ListOfBlogPost - 218, // 212: productv1.Author.favorite_categories:type_name -> productv1.Category - 20, // 213: productv1.Author.related_authors:type_name -> productv1.ListOfUser - 17, // 214: productv1.Author.product_reviews:type_name -> productv1.ListOfProduct - 14, // 215: productv1.Author.author_groups:type_name -> productv1.ListOfListOfUser - 11, // 216: productv1.Author.category_preferences:type_name -> productv1.ListOfListOfCategory - 14, // 217: productv1.Author.project_teams:type_name -> productv1.ListOfListOfUser - 282, // 218: productv1.AuthorFilter.name:type_name -> google.protobuf.StringValue - 281, // 219: productv1.AuthorFilter.has_teams:type_name -> google.protobuf.BoolValue - 280, // 220: productv1.AuthorFilter.skill_count:type_name -> google.protobuf.Int32Value - 282, // 221: productv1.TestContainer.description:type_name -> google.protobuf.StringValue - 253, // 222: productv1.ActionResult.action_success:type_name -> productv1.ActionSuccess - 254, // 223: productv1.ActionResult.action_error:type_name -> productv1.ActionError - 282, // 224: productv1.NullableFieldsInput.optional_string:type_name -> google.protobuf.StringValue - 280, // 225: productv1.NullableFieldsInput.optional_int:type_name -> google.protobuf.Int32Value - 283, // 226: productv1.NullableFieldsInput.optional_float:type_name -> google.protobuf.DoubleValue - 281, // 227: productv1.NullableFieldsInput.optional_boolean:type_name -> google.protobuf.BoolValue - 18, // 228: productv1.BlogPostInput.optional_tags:type_name -> productv1.ListOfString - 18, // 229: productv1.BlogPostInput.keywords:type_name -> productv1.ListOfString - 10, // 230: productv1.BlogPostInput.ratings:type_name -> productv1.ListOfFloat - 7, // 231: productv1.BlogPostInput.is_published:type_name -> productv1.ListOfBoolean - 13, // 232: productv1.BlogPostInput.tag_groups:type_name -> productv1.ListOfListOfString - 13, // 233: productv1.BlogPostInput.related_topics:type_name -> productv1.ListOfListOfString - 13, // 234: productv1.BlogPostInput.comment_threads:type_name -> productv1.ListOfListOfString - 13, // 235: productv1.BlogPostInput.suggestions:type_name -> productv1.ListOfListOfString - 9, // 236: productv1.BlogPostInput.related_categories:type_name -> productv1.ListOfCategoryInput - 21, // 237: productv1.BlogPostInput.contributors:type_name -> productv1.ListOfUserInput - 12, // 238: productv1.BlogPostInput.category_groups:type_name -> productv1.ListOfListOfCategoryInput - 282, // 239: productv1.AuthorInput.email:type_name -> google.protobuf.StringValue - 18, // 240: productv1.AuthorInput.social_links:type_name -> productv1.ListOfString - 13, // 241: productv1.AuthorInput.teams_by_project:type_name -> productv1.ListOfListOfString - 13, // 242: productv1.AuthorInput.collaborations:type_name -> productv1.ListOfListOfString - 256, // 243: productv1.AuthorInput.favorite_categories:type_name -> productv1.CategoryInput - 15, // 244: productv1.AuthorInput.author_groups:type_name -> productv1.ListOfListOfUserInput - 15, // 245: productv1.AuthorInput.project_teams:type_name -> productv1.ListOfListOfUserInput - 232, // 246: productv1.ProductDetails.review_summary:type_name -> productv1.ActionResult - 220, // 247: productv1.ProductDetails.recommended_pet:type_name -> productv1.Animal - 238, // 248: productv1.NestedTypeB.c:type_name -> productv1.NestedTypeC - 240, // 249: productv1.FilterType.pagination:type_name -> productv1.Pagination - 18, // 250: productv1.OrderLineInput.modifiers:type_name -> productv1.ListOfString - 18, // 251: productv1.OrderLine.modifiers:type_name -> productv1.ListOfString - 282, // 252: productv1.Subcategory.description:type_name -> google.protobuf.StringValue - 247, // 253: productv1.Cat.owner:type_name -> productv1.Owner - 250, // 254: productv1.Cat.breed:type_name -> productv1.CatBreed - 247, // 255: productv1.Dog.owner:type_name -> productv1.Owner - 251, // 256: productv1.Dog.breed:type_name -> productv1.DogBreed - 248, // 257: productv1.Owner.contact:type_name -> productv1.ContactInfo - 220, // 258: productv1.Owner.pet:type_name -> productv1.Animal - 249, // 259: productv1.ContactInfo.address:type_name -> productv1.Address - 252, // 260: productv1.CatBreed.characteristics:type_name -> productv1.BreedCharacteristics - 252, // 261: productv1.DogBreed.characteristics:type_name -> productv1.BreedCharacteristics - 220, // 262: productv1.TestDetails.pet:type_name -> productv1.Animal - 232, // 263: productv1.TestDetails.status:type_name -> productv1.ActionResult - 0, // 264: productv1.CategoryInput.kind:type_name -> productv1.CategoryKind - 283, // 265: productv1.ProductCountFilter.min_price:type_name -> google.protobuf.DoubleValue - 283, // 266: productv1.ProductCountFilter.max_price:type_name -> google.protobuf.DoubleValue - 281, // 267: productv1.ProductCountFilter.in_stock:type_name -> google.protobuf.BoolValue - 282, // 268: productv1.ProductCountFilter.search_term:type_name -> google.protobuf.StringValue - 283, // 269: productv1.SubcategoryItemFilter.min_price:type_name -> google.protobuf.DoubleValue - 283, // 270: productv1.SubcategoryItemFilter.max_price:type_name -> google.protobuf.DoubleValue - 281, // 271: productv1.SubcategoryItemFilter.in_stock:type_name -> google.protobuf.BoolValue - 281, // 272: productv1.SubcategoryItemFilter.is_active:type_name -> google.protobuf.BoolValue - 282, // 273: productv1.SubcategoryItemFilter.search_term:type_name -> google.protobuf.StringValue - 1, // 274: productv1.ShippingEstimateInput.destination:type_name -> productv1.ShippingDestination - 281, // 275: productv1.ShippingEstimateInput.expedited:type_name -> google.protobuf.BoolValue - 228, // 276: productv1.ListOfAuthorFilter.List.items:type_name -> productv1.AuthorFilter - 235, // 277: productv1.ListOfAuthorInput.List.items:type_name -> productv1.AuthorInput - 225, // 278: productv1.ListOfBlogPost.List.items:type_name -> productv1.BlogPost - 226, // 279: productv1.ListOfBlogPostFilter.List.items:type_name -> productv1.BlogPostFilter - 234, // 280: productv1.ListOfBlogPostInput.List.items:type_name -> productv1.BlogPostInput - 218, // 281: productv1.ListOfCategory.List.items:type_name -> productv1.Category - 256, // 282: productv1.ListOfCategoryInput.List.items:type_name -> productv1.CategoryInput - 8, // 283: productv1.ListOfListOfCategory.List.items:type_name -> productv1.ListOfCategory - 9, // 284: productv1.ListOfListOfCategoryInput.List.items:type_name -> productv1.ListOfCategoryInput - 18, // 285: productv1.ListOfListOfString.List.items:type_name -> productv1.ListOfString - 20, // 286: productv1.ListOfListOfUser.List.items:type_name -> productv1.ListOfUser - 21, // 287: productv1.ListOfListOfUserInput.List.items:type_name -> productv1.ListOfUserInput - 242, // 288: productv1.ListOfOrderLine.List.items:type_name -> productv1.OrderLine - 206, // 289: productv1.ListOfProduct.List.items:type_name -> productv1.Product - 243, // 290: productv1.ListOfSubcategory.List.items:type_name -> productv1.Subcategory - 209, // 291: productv1.ListOfUser.List.items:type_name -> productv1.User - 230, // 292: productv1.ListOfUserInput.List.items:type_name -> productv1.UserInput - 23, // 293: productv1.ProductService.LookupProductById:input_type -> productv1.LookupProductByIdRequest - 26, // 294: productv1.ProductService.LookupStorageById:input_type -> productv1.LookupStorageByIdRequest - 29, // 295: productv1.ProductService.LookupWarehouseById:input_type -> productv1.LookupWarehouseByIdRequest - 113, // 296: productv1.ProductService.MutationBulkCreateAuthors:input_type -> productv1.MutationBulkCreateAuthorsRequest - 117, // 297: productv1.ProductService.MutationBulkCreateBlogPosts:input_type -> productv1.MutationBulkCreateBlogPostsRequest - 115, // 298: productv1.ProductService.MutationBulkUpdateAuthors:input_type -> productv1.MutationBulkUpdateAuthorsRequest - 119, // 299: productv1.ProductService.MutationBulkUpdateBlogPosts:input_type -> productv1.MutationBulkUpdateBlogPostsRequest - 109, // 300: productv1.ProductService.MutationCreateAuthor:input_type -> productv1.MutationCreateAuthorRequest - 105, // 301: productv1.ProductService.MutationCreateBlogPost:input_type -> productv1.MutationCreateBlogPostRequest - 101, // 302: productv1.ProductService.MutationCreateNullableFieldsType:input_type -> productv1.MutationCreateNullableFieldsTypeRequest - 97, // 303: productv1.ProductService.MutationCreateUser:input_type -> productv1.MutationCreateUserRequest - 99, // 304: productv1.ProductService.MutationPerformAction:input_type -> productv1.MutationPerformActionRequest - 111, // 305: productv1.ProductService.MutationUpdateAuthor:input_type -> productv1.MutationUpdateAuthorRequest - 107, // 306: productv1.ProductService.MutationUpdateBlogPost:input_type -> productv1.MutationUpdateBlogPostRequest - 103, // 307: productv1.ProductService.MutationUpdateNullableFieldsType:input_type -> productv1.MutationUpdateNullableFieldsTypeRequest - 87, // 308: productv1.ProductService.QueryAllAuthors:input_type -> productv1.QueryAllAuthorsRequest - 79, // 309: productv1.ProductService.QueryAllBlogPosts:input_type -> productv1.QueryAllBlogPostsRequest - 71, // 310: productv1.ProductService.QueryAllNullableFieldsTypes:input_type -> productv1.QueryAllNullableFieldsTypesRequest - 59, // 311: productv1.ProductService.QueryAllPets:input_type -> productv1.QueryAllPetsRequest - 81, // 312: productv1.ProductService.QueryAuthor:input_type -> productv1.QueryAuthorRequest - 83, // 313: productv1.ProductService.QueryAuthorById:input_type -> productv1.QueryAuthorByIdRequest - 85, // 314: productv1.ProductService.QueryAuthorsWithFilter:input_type -> productv1.QueryAuthorsWithFilterRequest - 73, // 315: productv1.ProductService.QueryBlogPost:input_type -> productv1.QueryBlogPostRequest - 75, // 316: productv1.ProductService.QueryBlogPostById:input_type -> productv1.QueryBlogPostByIdRequest - 77, // 317: productv1.ProductService.QueryBlogPostsWithFilter:input_type -> productv1.QueryBlogPostsWithFilterRequest - 89, // 318: productv1.ProductService.QueryBulkSearchAuthors:input_type -> productv1.QueryBulkSearchAuthorsRequest - 91, // 319: productv1.ProductService.QueryBulkSearchBlogPosts:input_type -> productv1.QueryBulkSearchBlogPostsRequest - 45, // 320: productv1.ProductService.QueryCalculateTotals:input_type -> productv1.QueryCalculateTotalsRequest - 47, // 321: productv1.ProductService.QueryCategories:input_type -> productv1.QueryCategoriesRequest - 51, // 322: productv1.ProductService.QueryCategoriesByKind:input_type -> productv1.QueryCategoriesByKindRequest - 53, // 323: productv1.ProductService.QueryCategoriesByKinds:input_type -> productv1.QueryCategoriesByKindsRequest - 49, // 324: productv1.ProductService.QueryCategory:input_type -> productv1.QueryCategoryRequest - 43, // 325: productv1.ProductService.QueryComplexFilterType:input_type -> productv1.QueryComplexFilterTypeRequest - 55, // 326: productv1.ProductService.QueryFilterCategories:input_type -> productv1.QueryFilterCategoriesRequest - 35, // 327: productv1.ProductService.QueryNestedType:input_type -> productv1.QueryNestedTypeRequest - 65, // 328: productv1.ProductService.QueryNullableFieldsType:input_type -> productv1.QueryNullableFieldsTypeRequest - 67, // 329: productv1.ProductService.QueryNullableFieldsTypeById:input_type -> productv1.QueryNullableFieldsTypeByIdRequest - 69, // 330: productv1.ProductService.QueryNullableFieldsTypeWithFilter:input_type -> productv1.QueryNullableFieldsTypeWithFilterRequest - 57, // 331: productv1.ProductService.QueryRandomPet:input_type -> productv1.QueryRandomPetRequest - 63, // 332: productv1.ProductService.QueryRandomSearchResult:input_type -> productv1.QueryRandomSearchResultRequest - 37, // 333: productv1.ProductService.QueryRecursiveType:input_type -> productv1.QueryRecursiveTypeRequest - 61, // 334: productv1.ProductService.QuerySearch:input_type -> productv1.QuerySearchRequest - 93, // 335: productv1.ProductService.QueryTestContainer:input_type -> productv1.QueryTestContainerRequest - 95, // 336: productv1.ProductService.QueryTestContainers:input_type -> productv1.QueryTestContainersRequest - 39, // 337: productv1.ProductService.QueryTypeFilterWithArguments:input_type -> productv1.QueryTypeFilterWithArgumentsRequest - 41, // 338: productv1.ProductService.QueryTypeWithMultipleFilterFields:input_type -> productv1.QueryTypeWithMultipleFilterFieldsRequest - 33, // 339: productv1.ProductService.QueryUser:input_type -> productv1.QueryUserRequest - 31, // 340: productv1.ProductService.QueryUsers:input_type -> productv1.QueryUsersRequest - 158, // 341: productv1.ProductService.ResolveCategoryCategoryMetrics:input_type -> productv1.ResolveCategoryCategoryMetricsRequest - 168, // 342: productv1.ProductService.ResolveCategoryCategoryStatus:input_type -> productv1.ResolveCategoryCategoryStatusRequest - 173, // 343: productv1.ProductService.ResolveCategoryChildCategories:input_type -> productv1.ResolveCategoryChildCategoriesRequest - 163, // 344: productv1.ProductService.ResolveCategoryMascot:input_type -> productv1.ResolveCategoryMascotRequest - 193, // 345: productv1.ProductService.ResolveCategoryMetricsNormalizedScore:input_type -> productv1.ResolveCategoryMetricsNormalizedScoreRequest - 198, // 346: productv1.ProductService.ResolveCategoryMetricsRelatedCategory:input_type -> productv1.ResolveCategoryMetricsRelatedCategoryRequest - 178, // 347: productv1.ProductService.ResolveCategoryOptionalCategories:input_type -> productv1.ResolveCategoryOptionalCategoriesRequest - 153, // 348: productv1.ProductService.ResolveCategoryPopularityScore:input_type -> productv1.ResolveCategoryPopularityScoreRequest - 148, // 349: productv1.ProductService.ResolveCategoryProductCount:input_type -> productv1.ResolveCategoryProductCountRequest - 133, // 350: productv1.ProductService.ResolveProductMascotRecommendation:input_type -> productv1.ResolveProductMascotRecommendationRequest - 143, // 351: productv1.ProductService.ResolveProductProductDetails:input_type -> productv1.ResolveProductProductDetailsRequest - 128, // 352: productv1.ProductService.ResolveProductRecommendedCategory:input_type -> productv1.ResolveProductRecommendedCategoryRequest - 123, // 353: productv1.ProductService.ResolveProductShippingEstimate:input_type -> productv1.ResolveProductShippingEstimateRequest - 138, // 354: productv1.ProductService.ResolveProductStockStatus:input_type -> productv1.ResolveProductStockStatusRequest - 188, // 355: productv1.ProductService.ResolveSubcategoryFeaturedCategory:input_type -> productv1.ResolveSubcategoryFeaturedCategoryRequest - 183, // 356: productv1.ProductService.ResolveSubcategoryItemCount:input_type -> productv1.ResolveSubcategoryItemCountRequest - 203, // 357: productv1.ProductService.ResolveTestContainerDetails:input_type -> productv1.ResolveTestContainerDetailsRequest - 24, // 358: productv1.ProductService.LookupProductById:output_type -> productv1.LookupProductByIdResponse - 27, // 359: productv1.ProductService.LookupStorageById:output_type -> productv1.LookupStorageByIdResponse - 30, // 360: productv1.ProductService.LookupWarehouseById:output_type -> productv1.LookupWarehouseByIdResponse - 114, // 361: productv1.ProductService.MutationBulkCreateAuthors:output_type -> productv1.MutationBulkCreateAuthorsResponse - 118, // 362: productv1.ProductService.MutationBulkCreateBlogPosts:output_type -> productv1.MutationBulkCreateBlogPostsResponse - 116, // 363: productv1.ProductService.MutationBulkUpdateAuthors:output_type -> productv1.MutationBulkUpdateAuthorsResponse - 120, // 364: productv1.ProductService.MutationBulkUpdateBlogPosts:output_type -> productv1.MutationBulkUpdateBlogPostsResponse - 110, // 365: productv1.ProductService.MutationCreateAuthor:output_type -> productv1.MutationCreateAuthorResponse - 106, // 366: productv1.ProductService.MutationCreateBlogPost:output_type -> productv1.MutationCreateBlogPostResponse - 102, // 367: productv1.ProductService.MutationCreateNullableFieldsType:output_type -> productv1.MutationCreateNullableFieldsTypeResponse - 98, // 368: productv1.ProductService.MutationCreateUser:output_type -> productv1.MutationCreateUserResponse - 100, // 369: productv1.ProductService.MutationPerformAction:output_type -> productv1.MutationPerformActionResponse - 112, // 370: productv1.ProductService.MutationUpdateAuthor:output_type -> productv1.MutationUpdateAuthorResponse - 108, // 371: productv1.ProductService.MutationUpdateBlogPost:output_type -> productv1.MutationUpdateBlogPostResponse - 104, // 372: productv1.ProductService.MutationUpdateNullableFieldsType:output_type -> productv1.MutationUpdateNullableFieldsTypeResponse - 88, // 373: productv1.ProductService.QueryAllAuthors:output_type -> productv1.QueryAllAuthorsResponse - 80, // 374: productv1.ProductService.QueryAllBlogPosts:output_type -> productv1.QueryAllBlogPostsResponse - 72, // 375: productv1.ProductService.QueryAllNullableFieldsTypes:output_type -> productv1.QueryAllNullableFieldsTypesResponse - 60, // 376: productv1.ProductService.QueryAllPets:output_type -> productv1.QueryAllPetsResponse - 82, // 377: productv1.ProductService.QueryAuthor:output_type -> productv1.QueryAuthorResponse - 84, // 378: productv1.ProductService.QueryAuthorById:output_type -> productv1.QueryAuthorByIdResponse - 86, // 379: productv1.ProductService.QueryAuthorsWithFilter:output_type -> productv1.QueryAuthorsWithFilterResponse - 74, // 380: productv1.ProductService.QueryBlogPost:output_type -> productv1.QueryBlogPostResponse - 76, // 381: productv1.ProductService.QueryBlogPostById:output_type -> productv1.QueryBlogPostByIdResponse - 78, // 382: productv1.ProductService.QueryBlogPostsWithFilter:output_type -> productv1.QueryBlogPostsWithFilterResponse - 90, // 383: productv1.ProductService.QueryBulkSearchAuthors:output_type -> productv1.QueryBulkSearchAuthorsResponse - 92, // 384: productv1.ProductService.QueryBulkSearchBlogPosts:output_type -> productv1.QueryBulkSearchBlogPostsResponse - 46, // 385: productv1.ProductService.QueryCalculateTotals:output_type -> productv1.QueryCalculateTotalsResponse - 48, // 386: productv1.ProductService.QueryCategories:output_type -> productv1.QueryCategoriesResponse - 52, // 387: productv1.ProductService.QueryCategoriesByKind:output_type -> productv1.QueryCategoriesByKindResponse - 54, // 388: productv1.ProductService.QueryCategoriesByKinds:output_type -> productv1.QueryCategoriesByKindsResponse - 50, // 389: productv1.ProductService.QueryCategory:output_type -> productv1.QueryCategoryResponse - 44, // 390: productv1.ProductService.QueryComplexFilterType:output_type -> productv1.QueryComplexFilterTypeResponse - 56, // 391: productv1.ProductService.QueryFilterCategories:output_type -> productv1.QueryFilterCategoriesResponse - 36, // 392: productv1.ProductService.QueryNestedType:output_type -> productv1.QueryNestedTypeResponse - 66, // 393: productv1.ProductService.QueryNullableFieldsType:output_type -> productv1.QueryNullableFieldsTypeResponse - 68, // 394: productv1.ProductService.QueryNullableFieldsTypeById:output_type -> productv1.QueryNullableFieldsTypeByIdResponse - 70, // 395: productv1.ProductService.QueryNullableFieldsTypeWithFilter:output_type -> productv1.QueryNullableFieldsTypeWithFilterResponse - 58, // 396: productv1.ProductService.QueryRandomPet:output_type -> productv1.QueryRandomPetResponse - 64, // 397: productv1.ProductService.QueryRandomSearchResult:output_type -> productv1.QueryRandomSearchResultResponse - 38, // 398: productv1.ProductService.QueryRecursiveType:output_type -> productv1.QueryRecursiveTypeResponse - 62, // 399: productv1.ProductService.QuerySearch:output_type -> productv1.QuerySearchResponse - 94, // 400: productv1.ProductService.QueryTestContainer:output_type -> productv1.QueryTestContainerResponse - 96, // 401: productv1.ProductService.QueryTestContainers:output_type -> productv1.QueryTestContainersResponse - 40, // 402: productv1.ProductService.QueryTypeFilterWithArguments:output_type -> productv1.QueryTypeFilterWithArgumentsResponse - 42, // 403: productv1.ProductService.QueryTypeWithMultipleFilterFields:output_type -> productv1.QueryTypeWithMultipleFilterFieldsResponse - 34, // 404: productv1.ProductService.QueryUser:output_type -> productv1.QueryUserResponse - 32, // 405: productv1.ProductService.QueryUsers:output_type -> productv1.QueryUsersResponse - 160, // 406: productv1.ProductService.ResolveCategoryCategoryMetrics:output_type -> productv1.ResolveCategoryCategoryMetricsResponse - 170, // 407: productv1.ProductService.ResolveCategoryCategoryStatus:output_type -> productv1.ResolveCategoryCategoryStatusResponse - 175, // 408: productv1.ProductService.ResolveCategoryChildCategories:output_type -> productv1.ResolveCategoryChildCategoriesResponse - 165, // 409: productv1.ProductService.ResolveCategoryMascot:output_type -> productv1.ResolveCategoryMascotResponse - 195, // 410: productv1.ProductService.ResolveCategoryMetricsNormalizedScore:output_type -> productv1.ResolveCategoryMetricsNormalizedScoreResponse - 200, // 411: productv1.ProductService.ResolveCategoryMetricsRelatedCategory:output_type -> productv1.ResolveCategoryMetricsRelatedCategoryResponse - 180, // 412: productv1.ProductService.ResolveCategoryOptionalCategories:output_type -> productv1.ResolveCategoryOptionalCategoriesResponse - 155, // 413: productv1.ProductService.ResolveCategoryPopularityScore:output_type -> productv1.ResolveCategoryPopularityScoreResponse - 150, // 414: productv1.ProductService.ResolveCategoryProductCount:output_type -> productv1.ResolveCategoryProductCountResponse - 135, // 415: productv1.ProductService.ResolveProductMascotRecommendation:output_type -> productv1.ResolveProductMascotRecommendationResponse - 145, // 416: productv1.ProductService.ResolveProductProductDetails:output_type -> productv1.ResolveProductProductDetailsResponse - 130, // 417: productv1.ProductService.ResolveProductRecommendedCategory:output_type -> productv1.ResolveProductRecommendedCategoryResponse - 125, // 418: productv1.ProductService.ResolveProductShippingEstimate:output_type -> productv1.ResolveProductShippingEstimateResponse - 140, // 419: productv1.ProductService.ResolveProductStockStatus:output_type -> productv1.ResolveProductStockStatusResponse - 190, // 420: productv1.ProductService.ResolveSubcategoryFeaturedCategory:output_type -> productv1.ResolveSubcategoryFeaturedCategoryResponse - 185, // 421: productv1.ProductService.ResolveSubcategoryItemCount:output_type -> productv1.ResolveSubcategoryItemCountResponse - 205, // 422: productv1.ProductService.ResolveTestContainerDetails:output_type -> productv1.ResolveTestContainerDetailsResponse - 358, // [358:423] is the sub-list for method output_type - 293, // [293:358] is the sub-list for method input_type - 293, // [293:293] is the sub-list for extension type_name - 293, // [293:293] is the sub-list for extension extendee - 0, // [0:293] is the sub-list for field type_name + 328, // 0: productv1.ListOfAuthorFilter.list:type_name -> productv1.ListOfAuthorFilter.List + 329, // 1: productv1.ListOfAuthorInput.list:type_name -> productv1.ListOfAuthorInput.List + 330, // 2: productv1.ListOfBlogPost.list:type_name -> productv1.ListOfBlogPost.List + 331, // 3: productv1.ListOfBlogPostFilter.list:type_name -> productv1.ListOfBlogPostFilter.List + 332, // 4: productv1.ListOfBlogPostInput.list:type_name -> productv1.ListOfBlogPostInput.List + 333, // 5: productv1.ListOfBoolean.list:type_name -> productv1.ListOfBoolean.List + 334, // 6: productv1.ListOfCategory.list:type_name -> productv1.ListOfCategory.List + 335, // 7: productv1.ListOfCategoryInput.list:type_name -> productv1.ListOfCategoryInput.List + 336, // 8: productv1.ListOfFloat.list:type_name -> productv1.ListOfFloat.List + 337, // 9: productv1.ListOfListOfCategory.list:type_name -> productv1.ListOfListOfCategory.List + 338, // 10: productv1.ListOfListOfCategoryInput.list:type_name -> productv1.ListOfListOfCategoryInput.List + 339, // 11: productv1.ListOfListOfString.list:type_name -> productv1.ListOfListOfString.List + 340, // 12: productv1.ListOfListOfUser.list:type_name -> productv1.ListOfListOfUser.List + 341, // 13: productv1.ListOfListOfUserInput.list:type_name -> productv1.ListOfListOfUserInput.List + 342, // 14: productv1.ListOfOrderLine.list:type_name -> productv1.ListOfOrderLine.List + 343, // 15: productv1.ListOfProduct.list:type_name -> productv1.ListOfProduct.List + 344, // 16: productv1.ListOfStorage.list:type_name -> productv1.ListOfStorage.List + 345, // 17: productv1.ListOfString.list:type_name -> productv1.ListOfString.List + 346, // 18: productv1.ListOfSubcategory.list:type_name -> productv1.ListOfSubcategory.List + 347, // 19: productv1.ListOfUser.list:type_name -> productv1.ListOfUser.List + 348, // 20: productv1.ListOfUserInput.list:type_name -> productv1.ListOfUserInput.List + 23, // 21: productv1.LookupProductByIdRequest.keys:type_name -> productv1.LookupProductByIdRequestKey + 272, // 22: productv1.LookupProductByIdResponse.result:type_name -> productv1.Product + 26, // 23: productv1.LookupStorageByIdRequest.keys:type_name -> productv1.LookupStorageByIdRequestKey + 273, // 24: productv1.LookupStorageByIdResponse.result:type_name -> productv1.Storage + 29, // 25: productv1.LookupWarehouseByIdRequest.keys:type_name -> productv1.LookupWarehouseByIdRequestKey + 274, // 26: productv1.LookupWarehouseByIdResponse.result:type_name -> productv1.Warehouse + 275, // 27: productv1.QueryUsersResponse.users:type_name -> productv1.User + 275, // 28: productv1.QueryUserResponse.user:type_name -> productv1.User + 276, // 29: productv1.QueryNestedTypeResponse.nested_type:type_name -> productv1.NestedTypeA + 277, // 30: productv1.QueryRecursiveTypeResponse.recursive_type:type_name -> productv1.RecursiveType + 278, // 31: productv1.QueryTypeFilterWithArgumentsResponse.type_filter_with_arguments:type_name -> productv1.TypeWithMultipleFilterFields + 279, // 32: productv1.QueryTypeWithMultipleFilterFieldsRequest.filter:type_name -> productv1.FilterTypeInput + 278, // 33: productv1.QueryTypeWithMultipleFilterFieldsResponse.type_with_multiple_filter_fields:type_name -> productv1.TypeWithMultipleFilterFields + 280, // 34: productv1.QueryComplexFilterTypeRequest.filter:type_name -> productv1.ComplexFilterTypeInput + 281, // 35: productv1.QueryComplexFilterTypeResponse.complex_filter_type:type_name -> productv1.TypeWithComplexFilterInput + 282, // 36: productv1.QueryCalculateTotalsRequest.orders:type_name -> productv1.OrderInput + 283, // 37: productv1.QueryCalculateTotalsResponse.calculate_totals:type_name -> productv1.Order + 284, // 38: productv1.QueryCategoriesResponse.categories:type_name -> productv1.Category + 284, // 39: productv1.QueryCategoryResponse.category:type_name -> productv1.Category + 0, // 40: productv1.QueryCategoriesByKindRequest.kind:type_name -> productv1.CategoryKind + 284, // 41: productv1.QueryCategoriesByKindResponse.categories_by_kind:type_name -> productv1.Category + 0, // 42: productv1.QueryCategoriesByKindsRequest.kinds:type_name -> productv1.CategoryKind + 284, // 43: productv1.QueryCategoriesByKindsResponse.categories_by_kinds:type_name -> productv1.Category + 285, // 44: productv1.QueryFilterCategoriesRequest.filter:type_name -> productv1.CategoryFilter + 284, // 45: productv1.QueryFilterCategoriesResponse.filter_categories:type_name -> productv1.Category + 286, // 46: productv1.QueryRandomPetResponse.random_pet:type_name -> productv1.Animal + 286, // 47: productv1.QueryAllPetsResponse.all_pets:type_name -> productv1.Animal + 287, // 48: productv1.QuerySearchRequest.input:type_name -> productv1.SearchInput + 288, // 49: productv1.QuerySearchResponse.search:type_name -> productv1.SearchResult + 288, // 50: productv1.QueryRandomSearchResultResponse.random_search_result:type_name -> productv1.SearchResult + 289, // 51: productv1.QueryNullableFieldsTypeResponse.nullable_fields_type:type_name -> productv1.NullableFieldsType + 289, // 52: productv1.QueryNullableFieldsTypeByIdResponse.nullable_fields_type_by_id:type_name -> productv1.NullableFieldsType + 290, // 53: productv1.QueryNullableFieldsTypeWithFilterRequest.filter:type_name -> productv1.NullableFieldsFilter + 289, // 54: productv1.QueryNullableFieldsTypeWithFilterResponse.nullable_fields_type_with_filter:type_name -> productv1.NullableFieldsType + 289, // 55: productv1.QueryAllNullableFieldsTypesResponse.all_nullable_fields_types:type_name -> productv1.NullableFieldsType + 291, // 56: productv1.QueryBlogPostResponse.blog_post:type_name -> productv1.BlogPost + 291, // 57: productv1.QueryBlogPostByIdResponse.blog_post_by_id:type_name -> productv1.BlogPost + 292, // 58: productv1.QueryBlogPostsWithFilterRequest.filter:type_name -> productv1.BlogPostFilter + 291, // 59: productv1.QueryBlogPostsWithFilterResponse.blog_posts_with_filter:type_name -> productv1.BlogPost + 291, // 60: productv1.QueryAllBlogPostsResponse.all_blog_posts:type_name -> productv1.BlogPost + 293, // 61: productv1.QueryAuthorResponse.author:type_name -> productv1.Author + 293, // 62: productv1.QueryAuthorByIdResponse.author_by_id:type_name -> productv1.Author + 294, // 63: productv1.QueryAuthorsWithFilterRequest.filter:type_name -> productv1.AuthorFilter + 293, // 64: productv1.QueryAuthorsWithFilterResponse.authors_with_filter:type_name -> productv1.Author + 293, // 65: productv1.QueryAllAuthorsResponse.all_authors:type_name -> productv1.Author + 2, // 66: productv1.QueryBulkSearchAuthorsRequest.filters:type_name -> productv1.ListOfAuthorFilter + 293, // 67: productv1.QueryBulkSearchAuthorsResponse.bulk_search_authors:type_name -> productv1.Author + 5, // 68: productv1.QueryBulkSearchBlogPostsRequest.filters:type_name -> productv1.ListOfBlogPostFilter + 291, // 69: productv1.QueryBulkSearchBlogPostsResponse.bulk_search_blog_posts:type_name -> productv1.BlogPost + 295, // 70: productv1.QueryTestContainerResponse.test_container:type_name -> productv1.TestContainer + 295, // 71: productv1.QueryTestContainersResponse.test_containers:type_name -> productv1.TestContainer + 296, // 72: productv1.MutationCreateUserRequest.input:type_name -> productv1.UserInput + 275, // 73: productv1.MutationCreateUserResponse.create_user:type_name -> productv1.User + 297, // 74: productv1.MutationPerformActionRequest.input:type_name -> productv1.ActionInput + 298, // 75: productv1.MutationPerformActionResponse.perform_action:type_name -> productv1.ActionResult + 299, // 76: productv1.MutationCreateNullableFieldsTypeRequest.input:type_name -> productv1.NullableFieldsInput + 289, // 77: productv1.MutationCreateNullableFieldsTypeResponse.create_nullable_fields_type:type_name -> productv1.NullableFieldsType + 299, // 78: productv1.MutationUpdateNullableFieldsTypeRequest.input:type_name -> productv1.NullableFieldsInput + 289, // 79: productv1.MutationUpdateNullableFieldsTypeResponse.update_nullable_fields_type:type_name -> productv1.NullableFieldsType + 300, // 80: productv1.MutationCreateBlogPostRequest.input:type_name -> productv1.BlogPostInput + 291, // 81: productv1.MutationCreateBlogPostResponse.create_blog_post:type_name -> productv1.BlogPost + 300, // 82: productv1.MutationUpdateBlogPostRequest.input:type_name -> productv1.BlogPostInput + 291, // 83: productv1.MutationUpdateBlogPostResponse.update_blog_post:type_name -> productv1.BlogPost + 301, // 84: productv1.MutationCreateAuthorRequest.input:type_name -> productv1.AuthorInput + 293, // 85: productv1.MutationCreateAuthorResponse.create_author:type_name -> productv1.Author + 301, // 86: productv1.MutationUpdateAuthorRequest.input:type_name -> productv1.AuthorInput + 293, // 87: productv1.MutationUpdateAuthorResponse.update_author:type_name -> productv1.Author + 3, // 88: productv1.MutationBulkCreateAuthorsRequest.authors:type_name -> productv1.ListOfAuthorInput + 293, // 89: productv1.MutationBulkCreateAuthorsResponse.bulk_create_authors:type_name -> productv1.Author + 3, // 90: productv1.MutationBulkUpdateAuthorsRequest.authors:type_name -> productv1.ListOfAuthorInput + 293, // 91: productv1.MutationBulkUpdateAuthorsResponse.bulk_update_authors:type_name -> productv1.Author + 6, // 92: productv1.MutationBulkCreateBlogPostsRequest.blog_posts:type_name -> productv1.ListOfBlogPostInput + 291, // 93: productv1.MutationBulkCreateBlogPostsResponse.bulk_create_blog_posts:type_name -> productv1.BlogPost + 6, // 94: productv1.MutationBulkUpdateBlogPostsRequest.blog_posts:type_name -> productv1.ListOfBlogPostInput + 291, // 95: productv1.MutationBulkUpdateBlogPostsResponse.bulk_update_blog_posts:type_name -> productv1.BlogPost + 327, // 96: productv1.ResolveProductShippingEstimateArgs.input:type_name -> productv1.ShippingEstimateInput + 123, // 97: productv1.ResolveProductShippingEstimateRequest.context:type_name -> productv1.ResolveProductShippingEstimateContext + 122, // 98: productv1.ResolveProductShippingEstimateRequest.field_args:type_name -> productv1.ResolveProductShippingEstimateArgs + 125, // 99: productv1.ResolveProductShippingEstimateResponse.result:type_name -> productv1.ResolveProductShippingEstimateResult + 128, // 100: productv1.ResolveProductRecommendedCategoryRequest.context:type_name -> productv1.ResolveProductRecommendedCategoryContext + 127, // 101: productv1.ResolveProductRecommendedCategoryRequest.field_args:type_name -> productv1.ResolveProductRecommendedCategoryArgs + 284, // 102: productv1.ResolveProductRecommendedCategoryResult.recommended_category:type_name -> productv1.Category + 130, // 103: productv1.ResolveProductRecommendedCategoryResponse.result:type_name -> productv1.ResolveProductRecommendedCategoryResult + 133, // 104: productv1.ResolveProductMascotRecommendationRequest.context:type_name -> productv1.ResolveProductMascotRecommendationContext + 132, // 105: productv1.ResolveProductMascotRecommendationRequest.field_args:type_name -> productv1.ResolveProductMascotRecommendationArgs + 286, // 106: productv1.ResolveProductMascotRecommendationResult.mascot_recommendation:type_name -> productv1.Animal + 135, // 107: productv1.ResolveProductMascotRecommendationResponse.result:type_name -> productv1.ResolveProductMascotRecommendationResult + 138, // 108: productv1.ResolveProductStockStatusRequest.context:type_name -> productv1.ResolveProductStockStatusContext + 137, // 109: productv1.ResolveProductStockStatusRequest.field_args:type_name -> productv1.ResolveProductStockStatusArgs + 298, // 110: productv1.ResolveProductStockStatusResult.stock_status:type_name -> productv1.ActionResult + 140, // 111: productv1.ResolveProductStockStatusResponse.result:type_name -> productv1.ResolveProductStockStatusResult + 143, // 112: productv1.ResolveProductProductDetailsRequest.context:type_name -> productv1.ResolveProductProductDetailsContext + 142, // 113: productv1.ResolveProductProductDetailsRequest.field_args:type_name -> productv1.ResolveProductProductDetailsArgs + 302, // 114: productv1.ResolveProductProductDetailsResult.product_details:type_name -> productv1.ProductDetails + 145, // 115: productv1.ResolveProductProductDetailsResponse.result:type_name -> productv1.ResolveProductProductDetailsResult + 148, // 116: productv1.ResolveStorageStorageStatusRequest.context:type_name -> productv1.ResolveStorageStorageStatusContext + 147, // 117: productv1.ResolveStorageStorageStatusRequest.field_args:type_name -> productv1.ResolveStorageStorageStatusArgs + 298, // 118: productv1.ResolveStorageStorageStatusResult.storage_status:type_name -> productv1.ActionResult + 150, // 119: productv1.ResolveStorageStorageStatusResponse.result:type_name -> productv1.ResolveStorageStorageStatusResult + 153, // 120: productv1.ResolveStorageLinkedStoragesRequest.context:type_name -> productv1.ResolveStorageLinkedStoragesContext + 152, // 121: productv1.ResolveStorageLinkedStoragesRequest.field_args:type_name -> productv1.ResolveStorageLinkedStoragesArgs + 273, // 122: productv1.ResolveStorageLinkedStoragesResult.linked_storages:type_name -> productv1.Storage + 155, // 123: productv1.ResolveStorageLinkedStoragesResponse.result:type_name -> productv1.ResolveStorageLinkedStoragesResult + 355, // 124: productv1.ResolveStorageNearbyStoragesArgs.radius:type_name -> google.protobuf.Int32Value + 158, // 125: productv1.ResolveStorageNearbyStoragesRequest.context:type_name -> productv1.ResolveStorageNearbyStoragesContext + 157, // 126: productv1.ResolveStorageNearbyStoragesRequest.field_args:type_name -> productv1.ResolveStorageNearbyStoragesArgs + 18, // 127: productv1.ResolveStorageNearbyStoragesResult.nearby_storages:type_name -> productv1.ListOfStorage + 160, // 128: productv1.ResolveStorageNearbyStoragesResponse.result:type_name -> productv1.ResolveStorageNearbyStoragesResult + 325, // 129: productv1.ResolveCategoryProductCountArgs.filters:type_name -> productv1.ProductCountFilter + 163, // 130: productv1.ResolveCategoryProductCountRequest.context:type_name -> productv1.ResolveCategoryProductCountContext + 162, // 131: productv1.ResolveCategoryProductCountRequest.field_args:type_name -> productv1.ResolveCategoryProductCountArgs + 165, // 132: productv1.ResolveCategoryProductCountResponse.result:type_name -> productv1.ResolveCategoryProductCountResult + 355, // 133: productv1.ResolveCategoryPopularityScoreArgs.threshold:type_name -> google.protobuf.Int32Value + 168, // 134: productv1.ResolveCategoryPopularityScoreRequest.context:type_name -> productv1.ResolveCategoryPopularityScoreContext + 167, // 135: productv1.ResolveCategoryPopularityScoreRequest.field_args:type_name -> productv1.ResolveCategoryPopularityScoreArgs + 355, // 136: productv1.ResolveCategoryPopularityScoreResult.popularity_score:type_name -> google.protobuf.Int32Value + 170, // 137: productv1.ResolveCategoryPopularityScoreResponse.result:type_name -> productv1.ResolveCategoryPopularityScoreResult + 173, // 138: productv1.ResolveCategoryCategoryMetricsRequest.context:type_name -> productv1.ResolveCategoryCategoryMetricsContext + 172, // 139: productv1.ResolveCategoryCategoryMetricsRequest.field_args:type_name -> productv1.ResolveCategoryCategoryMetricsArgs + 312, // 140: productv1.ResolveCategoryCategoryMetricsResult.category_metrics:type_name -> productv1.CategoryMetrics + 175, // 141: productv1.ResolveCategoryCategoryMetricsResponse.result:type_name -> productv1.ResolveCategoryCategoryMetricsResult + 0, // 142: productv1.ResolveCategoryMascotContext.kind:type_name -> productv1.CategoryKind + 178, // 143: productv1.ResolveCategoryMascotRequest.context:type_name -> productv1.ResolveCategoryMascotContext + 177, // 144: productv1.ResolveCategoryMascotRequest.field_args:type_name -> productv1.ResolveCategoryMascotArgs + 286, // 145: productv1.ResolveCategoryMascotResult.mascot:type_name -> productv1.Animal + 180, // 146: productv1.ResolveCategoryMascotResponse.result:type_name -> productv1.ResolveCategoryMascotResult + 183, // 147: productv1.ResolveCategoryCategoryStatusRequest.context:type_name -> productv1.ResolveCategoryCategoryStatusContext + 182, // 148: productv1.ResolveCategoryCategoryStatusRequest.field_args:type_name -> productv1.ResolveCategoryCategoryStatusArgs + 298, // 149: productv1.ResolveCategoryCategoryStatusResult.category_status:type_name -> productv1.ActionResult + 185, // 150: productv1.ResolveCategoryCategoryStatusResponse.result:type_name -> productv1.ResolveCategoryCategoryStatusResult + 356, // 151: productv1.ResolveCategoryChildCategoriesArgs.include:type_name -> google.protobuf.BoolValue + 188, // 152: productv1.ResolveCategoryChildCategoriesRequest.context:type_name -> productv1.ResolveCategoryChildCategoriesContext + 187, // 153: productv1.ResolveCategoryChildCategoriesRequest.field_args:type_name -> productv1.ResolveCategoryChildCategoriesArgs + 284, // 154: productv1.ResolveCategoryChildCategoriesResult.child_categories:type_name -> productv1.Category + 190, // 155: productv1.ResolveCategoryChildCategoriesResponse.result:type_name -> productv1.ResolveCategoryChildCategoriesResult + 356, // 156: productv1.ResolveCategoryOptionalCategoriesArgs.include:type_name -> google.protobuf.BoolValue + 193, // 157: productv1.ResolveCategoryOptionalCategoriesRequest.context:type_name -> productv1.ResolveCategoryOptionalCategoriesContext + 192, // 158: productv1.ResolveCategoryOptionalCategoriesRequest.field_args:type_name -> productv1.ResolveCategoryOptionalCategoriesArgs + 8, // 159: productv1.ResolveCategoryOptionalCategoriesResult.optional_categories:type_name -> productv1.ListOfCategory + 195, // 160: productv1.ResolveCategoryOptionalCategoriesResponse.result:type_name -> productv1.ResolveCategoryOptionalCategoriesResult + 326, // 161: productv1.ResolveSubcategoryItemCountArgs.filters:type_name -> productv1.SubcategoryItemFilter + 198, // 162: productv1.ResolveSubcategoryItemCountRequest.context:type_name -> productv1.ResolveSubcategoryItemCountContext + 197, // 163: productv1.ResolveSubcategoryItemCountRequest.field_args:type_name -> productv1.ResolveSubcategoryItemCountArgs + 200, // 164: productv1.ResolveSubcategoryItemCountResponse.result:type_name -> productv1.ResolveSubcategoryItemCountResult + 203, // 165: productv1.ResolveSubcategoryFeaturedCategoryRequest.context:type_name -> productv1.ResolveSubcategoryFeaturedCategoryContext + 202, // 166: productv1.ResolveSubcategoryFeaturedCategoryRequest.field_args:type_name -> productv1.ResolveSubcategoryFeaturedCategoryArgs + 284, // 167: productv1.ResolveSubcategoryFeaturedCategoryResult.featured_category:type_name -> productv1.Category + 205, // 168: productv1.ResolveSubcategoryFeaturedCategoryResponse.result:type_name -> productv1.ResolveSubcategoryFeaturedCategoryResult + 208, // 169: productv1.ResolveCategoryMetricsNormalizedScoreRequest.context:type_name -> productv1.ResolveCategoryMetricsNormalizedScoreContext + 207, // 170: productv1.ResolveCategoryMetricsNormalizedScoreRequest.field_args:type_name -> productv1.ResolveCategoryMetricsNormalizedScoreArgs + 210, // 171: productv1.ResolveCategoryMetricsNormalizedScoreResponse.result:type_name -> productv1.ResolveCategoryMetricsNormalizedScoreResult + 356, // 172: productv1.ResolveCategoryMetricsRelatedCategoryArgs.include:type_name -> google.protobuf.BoolValue + 213, // 173: productv1.ResolveCategoryMetricsRelatedCategoryRequest.context:type_name -> productv1.ResolveCategoryMetricsRelatedCategoryContext + 212, // 174: productv1.ResolveCategoryMetricsRelatedCategoryRequest.field_args:type_name -> productv1.ResolveCategoryMetricsRelatedCategoryArgs + 284, // 175: productv1.ResolveCategoryMetricsRelatedCategoryResult.related_category:type_name -> productv1.Category + 215, // 176: productv1.ResolveCategoryMetricsRelatedCategoryResponse.result:type_name -> productv1.ResolveCategoryMetricsRelatedCategoryResult + 218, // 177: productv1.ResolveTestContainerDetailsRequest.context:type_name -> productv1.ResolveTestContainerDetailsContext + 217, // 178: productv1.ResolveTestContainerDetailsRequest.field_args:type_name -> productv1.ResolveTestContainerDetailsArgs + 323, // 179: productv1.ResolveTestContainerDetailsResult.details:type_name -> productv1.TestDetails + 220, // 180: productv1.ResolveTestContainerDetailsResponse.result:type_name -> productv1.ResolveTestContainerDetailsResult + 223, // 181: productv1.RequireStorageStockHealthScoreByIdRequest.context:type_name -> productv1.RequireStorageStockHealthScoreByIdContext + 26, // 182: productv1.RequireStorageStockHealthScoreByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 226, // 183: productv1.RequireStorageStockHealthScoreByIdContext.fields:type_name -> productv1.RequireStorageStockHealthScoreByIdFields + 225, // 184: productv1.RequireStorageStockHealthScoreByIdResponse.result:type_name -> productv1.RequireStorageStockHealthScoreByIdResult + 349, // 185: productv1.RequireStorageStockHealthScoreByIdFields.restock_data:type_name -> productv1.RequireStorageStockHealthScoreByIdFields.RestockData + 228, // 186: productv1.RequireStorageTagSummaryByIdRequest.context:type_name -> productv1.RequireStorageTagSummaryByIdContext + 26, // 187: productv1.RequireStorageTagSummaryByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 231, // 188: productv1.RequireStorageTagSummaryByIdContext.fields:type_name -> productv1.RequireStorageTagSummaryByIdFields + 230, // 189: productv1.RequireStorageTagSummaryByIdResponse.result:type_name -> productv1.RequireStorageTagSummaryByIdResult + 233, // 190: productv1.RequireStorageOptionalTagSummaryByIdRequest.context:type_name -> productv1.RequireStorageOptionalTagSummaryByIdContext + 26, // 191: productv1.RequireStorageOptionalTagSummaryByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 236, // 192: productv1.RequireStorageOptionalTagSummaryByIdContext.fields:type_name -> productv1.RequireStorageOptionalTagSummaryByIdFields + 235, // 193: productv1.RequireStorageOptionalTagSummaryByIdResponse.result:type_name -> productv1.RequireStorageOptionalTagSummaryByIdResult + 357, // 194: productv1.RequireStorageOptionalTagSummaryByIdResult.optional_tag_summary:type_name -> google.protobuf.StringValue + 19, // 195: productv1.RequireStorageOptionalTagSummaryByIdFields.optional_tags:type_name -> productv1.ListOfString + 238, // 196: productv1.RequireStorageMetadataScoreByIdRequest.context:type_name -> productv1.RequireStorageMetadataScoreByIdContext + 26, // 197: productv1.RequireStorageMetadataScoreByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 241, // 198: productv1.RequireStorageMetadataScoreByIdContext.fields:type_name -> productv1.RequireStorageMetadataScoreByIdFields + 240, // 199: productv1.RequireStorageMetadataScoreByIdResponse.result:type_name -> productv1.RequireStorageMetadataScoreByIdResult + 350, // 200: productv1.RequireStorageMetadataScoreByIdFields.metadata:type_name -> productv1.RequireStorageMetadataScoreByIdFields.StorageMetadata + 243, // 201: productv1.RequireStorageProcessedMetadataByIdRequest.context:type_name -> productv1.RequireStorageProcessedMetadataByIdContext + 26, // 202: productv1.RequireStorageProcessedMetadataByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 246, // 203: productv1.RequireStorageProcessedMetadataByIdContext.fields:type_name -> productv1.RequireStorageProcessedMetadataByIdFields + 245, // 204: productv1.RequireStorageProcessedMetadataByIdResponse.result:type_name -> productv1.RequireStorageProcessedMetadataByIdResult + 304, // 205: productv1.RequireStorageProcessedMetadataByIdResult.processed_metadata:type_name -> productv1.StorageMetadata + 351, // 206: productv1.RequireStorageProcessedMetadataByIdFields.metadata:type_name -> productv1.RequireStorageProcessedMetadataByIdFields.StorageMetadata + 248, // 207: productv1.RequireStorageOptionalProcessedMetadataByIdRequest.context:type_name -> productv1.RequireStorageOptionalProcessedMetadataByIdContext + 26, // 208: productv1.RequireStorageOptionalProcessedMetadataByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 251, // 209: productv1.RequireStorageOptionalProcessedMetadataByIdContext.fields:type_name -> productv1.RequireStorageOptionalProcessedMetadataByIdFields + 250, // 210: productv1.RequireStorageOptionalProcessedMetadataByIdResponse.result:type_name -> productv1.RequireStorageOptionalProcessedMetadataByIdResult + 304, // 211: productv1.RequireStorageOptionalProcessedMetadataByIdResult.optional_processed_metadata:type_name -> productv1.StorageMetadata + 352, // 212: productv1.RequireStorageOptionalProcessedMetadataByIdFields.metadata:type_name -> productv1.RequireStorageOptionalProcessedMetadataByIdFields.StorageMetadata + 253, // 213: productv1.RequireStorageProcessedTagsByIdRequest.context:type_name -> productv1.RequireStorageProcessedTagsByIdContext + 26, // 214: productv1.RequireStorageProcessedTagsByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 256, // 215: productv1.RequireStorageProcessedTagsByIdContext.fields:type_name -> productv1.RequireStorageProcessedTagsByIdFields + 255, // 216: productv1.RequireStorageProcessedTagsByIdResponse.result:type_name -> productv1.RequireStorageProcessedTagsByIdResult + 258, // 217: productv1.RequireStorageOptionalProcessedTagsByIdRequest.context:type_name -> productv1.RequireStorageOptionalProcessedTagsByIdContext + 26, // 218: productv1.RequireStorageOptionalProcessedTagsByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 261, // 219: productv1.RequireStorageOptionalProcessedTagsByIdContext.fields:type_name -> productv1.RequireStorageOptionalProcessedTagsByIdFields + 260, // 220: productv1.RequireStorageOptionalProcessedTagsByIdResponse.result:type_name -> productv1.RequireStorageOptionalProcessedTagsByIdResult + 19, // 221: productv1.RequireStorageOptionalProcessedTagsByIdResult.optional_processed_tags:type_name -> productv1.ListOfString + 19, // 222: productv1.RequireStorageOptionalProcessedTagsByIdFields.optional_tags:type_name -> productv1.ListOfString + 263, // 223: productv1.RequireStorageProcessedMetadataHistoryByIdRequest.context:type_name -> productv1.RequireStorageProcessedMetadataHistoryByIdContext + 26, // 224: productv1.RequireStorageProcessedMetadataHistoryByIdContext.key:type_name -> productv1.LookupStorageByIdRequestKey + 266, // 225: productv1.RequireStorageProcessedMetadataHistoryByIdContext.fields:type_name -> productv1.RequireStorageProcessedMetadataHistoryByIdFields + 265, // 226: productv1.RequireStorageProcessedMetadataHistoryByIdResponse.result:type_name -> productv1.RequireStorageProcessedMetadataHistoryByIdResult + 304, // 227: productv1.RequireStorageProcessedMetadataHistoryByIdResult.processed_metadata_history:type_name -> productv1.StorageMetadata + 353, // 228: productv1.RequireStorageProcessedMetadataHistoryByIdFields.metadata_history:type_name -> productv1.RequireStorageProcessedMetadataHistoryByIdFields.StorageMetadata + 268, // 229: productv1.RequireWarehouseStockHealthScoreByIdRequest.context:type_name -> productv1.RequireWarehouseStockHealthScoreByIdContext + 29, // 230: productv1.RequireWarehouseStockHealthScoreByIdContext.key:type_name -> productv1.LookupWarehouseByIdRequestKey + 271, // 231: productv1.RequireWarehouseStockHealthScoreByIdContext.fields:type_name -> productv1.RequireWarehouseStockHealthScoreByIdFields + 270, // 232: productv1.RequireWarehouseStockHealthScoreByIdResponse.result:type_name -> productv1.RequireWarehouseStockHealthScoreByIdResult + 354, // 233: productv1.RequireWarehouseStockHealthScoreByIdFields.restock_data:type_name -> productv1.RequireWarehouseStockHealthScoreByIdFields.RestockData + 305, // 234: productv1.NestedTypeA.b:type_name -> productv1.NestedTypeB + 277, // 235: productv1.RecursiveType.recursive_type:type_name -> productv1.RecursiveType + 307, // 236: productv1.ComplexFilterTypeInput.filter:type_name -> productv1.FilterType + 309, // 237: productv1.OrderInput.lines:type_name -> productv1.OrderLineInput + 16, // 238: productv1.Order.order_lines:type_name -> productv1.ListOfOrderLine + 0, // 239: productv1.Category.kind:type_name -> productv1.CategoryKind + 20, // 240: productv1.Category.subcategories:type_name -> productv1.ListOfSubcategory + 312, // 241: productv1.Category.null_metrics:type_name -> productv1.CategoryMetrics + 0, // 242: productv1.CategoryFilter.category:type_name -> productv1.CategoryKind + 308, // 243: productv1.CategoryFilter.pagination:type_name -> productv1.Pagination + 313, // 244: productv1.Animal.cat:type_name -> productv1.Cat + 314, // 245: productv1.Animal.dog:type_name -> productv1.Dog + 355, // 246: productv1.SearchInput.limit:type_name -> google.protobuf.Int32Value + 272, // 247: productv1.SearchResult.product:type_name -> productv1.Product + 275, // 248: productv1.SearchResult.user:type_name -> productv1.User + 284, // 249: productv1.SearchResult.category:type_name -> productv1.Category + 357, // 250: productv1.NullableFieldsType.optional_string:type_name -> google.protobuf.StringValue + 355, // 251: productv1.NullableFieldsType.optional_int:type_name -> google.protobuf.Int32Value + 358, // 252: productv1.NullableFieldsType.optional_float:type_name -> google.protobuf.DoubleValue + 356, // 253: productv1.NullableFieldsType.optional_boolean:type_name -> google.protobuf.BoolValue + 357, // 254: productv1.NullableFieldsFilter.name:type_name -> google.protobuf.StringValue + 357, // 255: productv1.NullableFieldsFilter.optional_string:type_name -> google.protobuf.StringValue + 356, // 256: productv1.NullableFieldsFilter.include_nulls:type_name -> google.protobuf.BoolValue + 19, // 257: productv1.BlogPost.optional_tags:type_name -> productv1.ListOfString + 19, // 258: productv1.BlogPost.keywords:type_name -> productv1.ListOfString + 10, // 259: productv1.BlogPost.ratings:type_name -> productv1.ListOfFloat + 7, // 260: productv1.BlogPost.is_published:type_name -> productv1.ListOfBoolean + 13, // 261: productv1.BlogPost.tag_groups:type_name -> productv1.ListOfListOfString + 13, // 262: productv1.BlogPost.related_topics:type_name -> productv1.ListOfListOfString + 13, // 263: productv1.BlogPost.comment_threads:type_name -> productv1.ListOfListOfString + 13, // 264: productv1.BlogPost.suggestions:type_name -> productv1.ListOfListOfString + 284, // 265: productv1.BlogPost.related_categories:type_name -> productv1.Category + 275, // 266: productv1.BlogPost.contributors:type_name -> productv1.User + 17, // 267: productv1.BlogPost.mentioned_products:type_name -> productv1.ListOfProduct + 21, // 268: productv1.BlogPost.mentioned_users:type_name -> productv1.ListOfUser + 11, // 269: productv1.BlogPost.category_groups:type_name -> productv1.ListOfListOfCategory + 14, // 270: productv1.BlogPost.contributor_teams:type_name -> productv1.ListOfListOfUser + 357, // 271: productv1.BlogPostFilter.title:type_name -> google.protobuf.StringValue + 356, // 272: productv1.BlogPostFilter.has_categories:type_name -> google.protobuf.BoolValue + 355, // 273: productv1.BlogPostFilter.min_tags:type_name -> google.protobuf.Int32Value + 357, // 274: productv1.Author.email:type_name -> google.protobuf.StringValue + 19, // 275: productv1.Author.social_links:type_name -> productv1.ListOfString + 13, // 276: productv1.Author.teams_by_project:type_name -> productv1.ListOfListOfString + 13, // 277: productv1.Author.collaborations:type_name -> productv1.ListOfListOfString + 4, // 278: productv1.Author.written_posts:type_name -> productv1.ListOfBlogPost + 284, // 279: productv1.Author.favorite_categories:type_name -> productv1.Category + 21, // 280: productv1.Author.related_authors:type_name -> productv1.ListOfUser + 17, // 281: productv1.Author.product_reviews:type_name -> productv1.ListOfProduct + 14, // 282: productv1.Author.author_groups:type_name -> productv1.ListOfListOfUser + 11, // 283: productv1.Author.category_preferences:type_name -> productv1.ListOfListOfCategory + 14, // 284: productv1.Author.project_teams:type_name -> productv1.ListOfListOfUser + 357, // 285: productv1.AuthorFilter.name:type_name -> google.protobuf.StringValue + 356, // 286: productv1.AuthorFilter.has_teams:type_name -> google.protobuf.BoolValue + 355, // 287: productv1.AuthorFilter.skill_count:type_name -> google.protobuf.Int32Value + 357, // 288: productv1.TestContainer.description:type_name -> google.protobuf.StringValue + 321, // 289: productv1.ActionResult.action_success:type_name -> productv1.ActionSuccess + 322, // 290: productv1.ActionResult.action_error:type_name -> productv1.ActionError + 357, // 291: productv1.NullableFieldsInput.optional_string:type_name -> google.protobuf.StringValue + 355, // 292: productv1.NullableFieldsInput.optional_int:type_name -> google.protobuf.Int32Value + 358, // 293: productv1.NullableFieldsInput.optional_float:type_name -> google.protobuf.DoubleValue + 356, // 294: productv1.NullableFieldsInput.optional_boolean:type_name -> google.protobuf.BoolValue + 19, // 295: productv1.BlogPostInput.optional_tags:type_name -> productv1.ListOfString + 19, // 296: productv1.BlogPostInput.keywords:type_name -> productv1.ListOfString + 10, // 297: productv1.BlogPostInput.ratings:type_name -> productv1.ListOfFloat + 7, // 298: productv1.BlogPostInput.is_published:type_name -> productv1.ListOfBoolean + 13, // 299: productv1.BlogPostInput.tag_groups:type_name -> productv1.ListOfListOfString + 13, // 300: productv1.BlogPostInput.related_topics:type_name -> productv1.ListOfListOfString + 13, // 301: productv1.BlogPostInput.comment_threads:type_name -> productv1.ListOfListOfString + 13, // 302: productv1.BlogPostInput.suggestions:type_name -> productv1.ListOfListOfString + 9, // 303: productv1.BlogPostInput.related_categories:type_name -> productv1.ListOfCategoryInput + 22, // 304: productv1.BlogPostInput.contributors:type_name -> productv1.ListOfUserInput + 12, // 305: productv1.BlogPostInput.category_groups:type_name -> productv1.ListOfListOfCategoryInput + 357, // 306: productv1.AuthorInput.email:type_name -> google.protobuf.StringValue + 19, // 307: productv1.AuthorInput.social_links:type_name -> productv1.ListOfString + 13, // 308: productv1.AuthorInput.teams_by_project:type_name -> productv1.ListOfListOfString + 13, // 309: productv1.AuthorInput.collaborations:type_name -> productv1.ListOfListOfString + 324, // 310: productv1.AuthorInput.favorite_categories:type_name -> productv1.CategoryInput + 15, // 311: productv1.AuthorInput.author_groups:type_name -> productv1.ListOfListOfUserInput + 15, // 312: productv1.AuthorInput.project_teams:type_name -> productv1.ListOfListOfUserInput + 298, // 313: productv1.ProductDetails.review_summary:type_name -> productv1.ActionResult + 286, // 314: productv1.ProductDetails.recommended_pet:type_name -> productv1.Animal + 306, // 315: productv1.NestedTypeB.c:type_name -> productv1.NestedTypeC + 308, // 316: productv1.FilterType.pagination:type_name -> productv1.Pagination + 19, // 317: productv1.OrderLineInput.modifiers:type_name -> productv1.ListOfString + 19, // 318: productv1.OrderLine.modifiers:type_name -> productv1.ListOfString + 357, // 319: productv1.Subcategory.description:type_name -> google.protobuf.StringValue + 315, // 320: productv1.Cat.owner:type_name -> productv1.Owner + 318, // 321: productv1.Cat.breed:type_name -> productv1.CatBreed + 315, // 322: productv1.Dog.owner:type_name -> productv1.Owner + 319, // 323: productv1.Dog.breed:type_name -> productv1.DogBreed + 316, // 324: productv1.Owner.contact:type_name -> productv1.ContactInfo + 286, // 325: productv1.Owner.pet:type_name -> productv1.Animal + 317, // 326: productv1.ContactInfo.address:type_name -> productv1.Address + 320, // 327: productv1.CatBreed.characteristics:type_name -> productv1.BreedCharacteristics + 320, // 328: productv1.DogBreed.characteristics:type_name -> productv1.BreedCharacteristics + 286, // 329: productv1.TestDetails.pet:type_name -> productv1.Animal + 298, // 330: productv1.TestDetails.status:type_name -> productv1.ActionResult + 0, // 331: productv1.CategoryInput.kind:type_name -> productv1.CategoryKind + 358, // 332: productv1.ProductCountFilter.min_price:type_name -> google.protobuf.DoubleValue + 358, // 333: productv1.ProductCountFilter.max_price:type_name -> google.protobuf.DoubleValue + 356, // 334: productv1.ProductCountFilter.in_stock:type_name -> google.protobuf.BoolValue + 357, // 335: productv1.ProductCountFilter.search_term:type_name -> google.protobuf.StringValue + 358, // 336: productv1.SubcategoryItemFilter.min_price:type_name -> google.protobuf.DoubleValue + 358, // 337: productv1.SubcategoryItemFilter.max_price:type_name -> google.protobuf.DoubleValue + 356, // 338: productv1.SubcategoryItemFilter.in_stock:type_name -> google.protobuf.BoolValue + 356, // 339: productv1.SubcategoryItemFilter.is_active:type_name -> google.protobuf.BoolValue + 357, // 340: productv1.SubcategoryItemFilter.search_term:type_name -> google.protobuf.StringValue + 1, // 341: productv1.ShippingEstimateInput.destination:type_name -> productv1.ShippingDestination + 356, // 342: productv1.ShippingEstimateInput.expedited:type_name -> google.protobuf.BoolValue + 294, // 343: productv1.ListOfAuthorFilter.List.items:type_name -> productv1.AuthorFilter + 301, // 344: productv1.ListOfAuthorInput.List.items:type_name -> productv1.AuthorInput + 291, // 345: productv1.ListOfBlogPost.List.items:type_name -> productv1.BlogPost + 292, // 346: productv1.ListOfBlogPostFilter.List.items:type_name -> productv1.BlogPostFilter + 300, // 347: productv1.ListOfBlogPostInput.List.items:type_name -> productv1.BlogPostInput + 284, // 348: productv1.ListOfCategory.List.items:type_name -> productv1.Category + 324, // 349: productv1.ListOfCategoryInput.List.items:type_name -> productv1.CategoryInput + 8, // 350: productv1.ListOfListOfCategory.List.items:type_name -> productv1.ListOfCategory + 9, // 351: productv1.ListOfListOfCategoryInput.List.items:type_name -> productv1.ListOfCategoryInput + 19, // 352: productv1.ListOfListOfString.List.items:type_name -> productv1.ListOfString + 21, // 353: productv1.ListOfListOfUser.List.items:type_name -> productv1.ListOfUser + 22, // 354: productv1.ListOfListOfUserInput.List.items:type_name -> productv1.ListOfUserInput + 310, // 355: productv1.ListOfOrderLine.List.items:type_name -> productv1.OrderLine + 272, // 356: productv1.ListOfProduct.List.items:type_name -> productv1.Product + 273, // 357: productv1.ListOfStorage.List.items:type_name -> productv1.Storage + 311, // 358: productv1.ListOfSubcategory.List.items:type_name -> productv1.Subcategory + 275, // 359: productv1.ListOfUser.List.items:type_name -> productv1.User + 296, // 360: productv1.ListOfUserInput.List.items:type_name -> productv1.UserInput + 24, // 361: productv1.ProductService.LookupProductById:input_type -> productv1.LookupProductByIdRequest + 27, // 362: productv1.ProductService.LookupStorageById:input_type -> productv1.LookupStorageByIdRequest + 30, // 363: productv1.ProductService.LookupWarehouseById:input_type -> productv1.LookupWarehouseByIdRequest + 114, // 364: productv1.ProductService.MutationBulkCreateAuthors:input_type -> productv1.MutationBulkCreateAuthorsRequest + 118, // 365: productv1.ProductService.MutationBulkCreateBlogPosts:input_type -> productv1.MutationBulkCreateBlogPostsRequest + 116, // 366: productv1.ProductService.MutationBulkUpdateAuthors:input_type -> productv1.MutationBulkUpdateAuthorsRequest + 120, // 367: productv1.ProductService.MutationBulkUpdateBlogPosts:input_type -> productv1.MutationBulkUpdateBlogPostsRequest + 110, // 368: productv1.ProductService.MutationCreateAuthor:input_type -> productv1.MutationCreateAuthorRequest + 106, // 369: productv1.ProductService.MutationCreateBlogPost:input_type -> productv1.MutationCreateBlogPostRequest + 102, // 370: productv1.ProductService.MutationCreateNullableFieldsType:input_type -> productv1.MutationCreateNullableFieldsTypeRequest + 98, // 371: productv1.ProductService.MutationCreateUser:input_type -> productv1.MutationCreateUserRequest + 100, // 372: productv1.ProductService.MutationPerformAction:input_type -> productv1.MutationPerformActionRequest + 112, // 373: productv1.ProductService.MutationUpdateAuthor:input_type -> productv1.MutationUpdateAuthorRequest + 108, // 374: productv1.ProductService.MutationUpdateBlogPost:input_type -> productv1.MutationUpdateBlogPostRequest + 104, // 375: productv1.ProductService.MutationUpdateNullableFieldsType:input_type -> productv1.MutationUpdateNullableFieldsTypeRequest + 88, // 376: productv1.ProductService.QueryAllAuthors:input_type -> productv1.QueryAllAuthorsRequest + 80, // 377: productv1.ProductService.QueryAllBlogPosts:input_type -> productv1.QueryAllBlogPostsRequest + 72, // 378: productv1.ProductService.QueryAllNullableFieldsTypes:input_type -> productv1.QueryAllNullableFieldsTypesRequest + 60, // 379: productv1.ProductService.QueryAllPets:input_type -> productv1.QueryAllPetsRequest + 82, // 380: productv1.ProductService.QueryAuthor:input_type -> productv1.QueryAuthorRequest + 84, // 381: productv1.ProductService.QueryAuthorById:input_type -> productv1.QueryAuthorByIdRequest + 86, // 382: productv1.ProductService.QueryAuthorsWithFilter:input_type -> productv1.QueryAuthorsWithFilterRequest + 74, // 383: productv1.ProductService.QueryBlogPost:input_type -> productv1.QueryBlogPostRequest + 76, // 384: productv1.ProductService.QueryBlogPostById:input_type -> productv1.QueryBlogPostByIdRequest + 78, // 385: productv1.ProductService.QueryBlogPostsWithFilter:input_type -> productv1.QueryBlogPostsWithFilterRequest + 90, // 386: productv1.ProductService.QueryBulkSearchAuthors:input_type -> productv1.QueryBulkSearchAuthorsRequest + 92, // 387: productv1.ProductService.QueryBulkSearchBlogPosts:input_type -> productv1.QueryBulkSearchBlogPostsRequest + 46, // 388: productv1.ProductService.QueryCalculateTotals:input_type -> productv1.QueryCalculateTotalsRequest + 48, // 389: productv1.ProductService.QueryCategories:input_type -> productv1.QueryCategoriesRequest + 52, // 390: productv1.ProductService.QueryCategoriesByKind:input_type -> productv1.QueryCategoriesByKindRequest + 54, // 391: productv1.ProductService.QueryCategoriesByKinds:input_type -> productv1.QueryCategoriesByKindsRequest + 50, // 392: productv1.ProductService.QueryCategory:input_type -> productv1.QueryCategoryRequest + 44, // 393: productv1.ProductService.QueryComplexFilterType:input_type -> productv1.QueryComplexFilterTypeRequest + 56, // 394: productv1.ProductService.QueryFilterCategories:input_type -> productv1.QueryFilterCategoriesRequest + 36, // 395: productv1.ProductService.QueryNestedType:input_type -> productv1.QueryNestedTypeRequest + 66, // 396: productv1.ProductService.QueryNullableFieldsType:input_type -> productv1.QueryNullableFieldsTypeRequest + 68, // 397: productv1.ProductService.QueryNullableFieldsTypeById:input_type -> productv1.QueryNullableFieldsTypeByIdRequest + 70, // 398: productv1.ProductService.QueryNullableFieldsTypeWithFilter:input_type -> productv1.QueryNullableFieldsTypeWithFilterRequest + 58, // 399: productv1.ProductService.QueryRandomPet:input_type -> productv1.QueryRandomPetRequest + 64, // 400: productv1.ProductService.QueryRandomSearchResult:input_type -> productv1.QueryRandomSearchResultRequest + 38, // 401: productv1.ProductService.QueryRecursiveType:input_type -> productv1.QueryRecursiveTypeRequest + 62, // 402: productv1.ProductService.QuerySearch:input_type -> productv1.QuerySearchRequest + 94, // 403: productv1.ProductService.QueryTestContainer:input_type -> productv1.QueryTestContainerRequest + 96, // 404: productv1.ProductService.QueryTestContainers:input_type -> productv1.QueryTestContainersRequest + 40, // 405: productv1.ProductService.QueryTypeFilterWithArguments:input_type -> productv1.QueryTypeFilterWithArgumentsRequest + 42, // 406: productv1.ProductService.QueryTypeWithMultipleFilterFields:input_type -> productv1.QueryTypeWithMultipleFilterFieldsRequest + 34, // 407: productv1.ProductService.QueryUser:input_type -> productv1.QueryUserRequest + 32, // 408: productv1.ProductService.QueryUsers:input_type -> productv1.QueryUsersRequest + 237, // 409: productv1.ProductService.RequireStorageMetadataScoreById:input_type -> productv1.RequireStorageMetadataScoreByIdRequest + 247, // 410: productv1.ProductService.RequireStorageOptionalProcessedMetadataById:input_type -> productv1.RequireStorageOptionalProcessedMetadataByIdRequest + 257, // 411: productv1.ProductService.RequireStorageOptionalProcessedTagsById:input_type -> productv1.RequireStorageOptionalProcessedTagsByIdRequest + 232, // 412: productv1.ProductService.RequireStorageOptionalTagSummaryById:input_type -> productv1.RequireStorageOptionalTagSummaryByIdRequest + 242, // 413: productv1.ProductService.RequireStorageProcessedMetadataById:input_type -> productv1.RequireStorageProcessedMetadataByIdRequest + 262, // 414: productv1.ProductService.RequireStorageProcessedMetadataHistoryById:input_type -> productv1.RequireStorageProcessedMetadataHistoryByIdRequest + 252, // 415: productv1.ProductService.RequireStorageProcessedTagsById:input_type -> productv1.RequireStorageProcessedTagsByIdRequest + 222, // 416: productv1.ProductService.RequireStorageStockHealthScoreById:input_type -> productv1.RequireStorageStockHealthScoreByIdRequest + 227, // 417: productv1.ProductService.RequireStorageTagSummaryById:input_type -> productv1.RequireStorageTagSummaryByIdRequest + 267, // 418: productv1.ProductService.RequireWarehouseStockHealthScoreById:input_type -> productv1.RequireWarehouseStockHealthScoreByIdRequest + 174, // 419: productv1.ProductService.ResolveCategoryCategoryMetrics:input_type -> productv1.ResolveCategoryCategoryMetricsRequest + 184, // 420: productv1.ProductService.ResolveCategoryCategoryStatus:input_type -> productv1.ResolveCategoryCategoryStatusRequest + 189, // 421: productv1.ProductService.ResolveCategoryChildCategories:input_type -> productv1.ResolveCategoryChildCategoriesRequest + 179, // 422: productv1.ProductService.ResolveCategoryMascot:input_type -> productv1.ResolveCategoryMascotRequest + 209, // 423: productv1.ProductService.ResolveCategoryMetricsNormalizedScore:input_type -> productv1.ResolveCategoryMetricsNormalizedScoreRequest + 214, // 424: productv1.ProductService.ResolveCategoryMetricsRelatedCategory:input_type -> productv1.ResolveCategoryMetricsRelatedCategoryRequest + 194, // 425: productv1.ProductService.ResolveCategoryOptionalCategories:input_type -> productv1.ResolveCategoryOptionalCategoriesRequest + 169, // 426: productv1.ProductService.ResolveCategoryPopularityScore:input_type -> productv1.ResolveCategoryPopularityScoreRequest + 164, // 427: productv1.ProductService.ResolveCategoryProductCount:input_type -> productv1.ResolveCategoryProductCountRequest + 134, // 428: productv1.ProductService.ResolveProductMascotRecommendation:input_type -> productv1.ResolveProductMascotRecommendationRequest + 144, // 429: productv1.ProductService.ResolveProductProductDetails:input_type -> productv1.ResolveProductProductDetailsRequest + 129, // 430: productv1.ProductService.ResolveProductRecommendedCategory:input_type -> productv1.ResolveProductRecommendedCategoryRequest + 124, // 431: productv1.ProductService.ResolveProductShippingEstimate:input_type -> productv1.ResolveProductShippingEstimateRequest + 139, // 432: productv1.ProductService.ResolveProductStockStatus:input_type -> productv1.ResolveProductStockStatusRequest + 154, // 433: productv1.ProductService.ResolveStorageLinkedStorages:input_type -> productv1.ResolveStorageLinkedStoragesRequest + 159, // 434: productv1.ProductService.ResolveStorageNearbyStorages:input_type -> productv1.ResolveStorageNearbyStoragesRequest + 149, // 435: productv1.ProductService.ResolveStorageStorageStatus:input_type -> productv1.ResolveStorageStorageStatusRequest + 204, // 436: productv1.ProductService.ResolveSubcategoryFeaturedCategory:input_type -> productv1.ResolveSubcategoryFeaturedCategoryRequest + 199, // 437: productv1.ProductService.ResolveSubcategoryItemCount:input_type -> productv1.ResolveSubcategoryItemCountRequest + 219, // 438: productv1.ProductService.ResolveTestContainerDetails:input_type -> productv1.ResolveTestContainerDetailsRequest + 25, // 439: productv1.ProductService.LookupProductById:output_type -> productv1.LookupProductByIdResponse + 28, // 440: productv1.ProductService.LookupStorageById:output_type -> productv1.LookupStorageByIdResponse + 31, // 441: productv1.ProductService.LookupWarehouseById:output_type -> productv1.LookupWarehouseByIdResponse + 115, // 442: productv1.ProductService.MutationBulkCreateAuthors:output_type -> productv1.MutationBulkCreateAuthorsResponse + 119, // 443: productv1.ProductService.MutationBulkCreateBlogPosts:output_type -> productv1.MutationBulkCreateBlogPostsResponse + 117, // 444: productv1.ProductService.MutationBulkUpdateAuthors:output_type -> productv1.MutationBulkUpdateAuthorsResponse + 121, // 445: productv1.ProductService.MutationBulkUpdateBlogPosts:output_type -> productv1.MutationBulkUpdateBlogPostsResponse + 111, // 446: productv1.ProductService.MutationCreateAuthor:output_type -> productv1.MutationCreateAuthorResponse + 107, // 447: productv1.ProductService.MutationCreateBlogPost:output_type -> productv1.MutationCreateBlogPostResponse + 103, // 448: productv1.ProductService.MutationCreateNullableFieldsType:output_type -> productv1.MutationCreateNullableFieldsTypeResponse + 99, // 449: productv1.ProductService.MutationCreateUser:output_type -> productv1.MutationCreateUserResponse + 101, // 450: productv1.ProductService.MutationPerformAction:output_type -> productv1.MutationPerformActionResponse + 113, // 451: productv1.ProductService.MutationUpdateAuthor:output_type -> productv1.MutationUpdateAuthorResponse + 109, // 452: productv1.ProductService.MutationUpdateBlogPost:output_type -> productv1.MutationUpdateBlogPostResponse + 105, // 453: productv1.ProductService.MutationUpdateNullableFieldsType:output_type -> productv1.MutationUpdateNullableFieldsTypeResponse + 89, // 454: productv1.ProductService.QueryAllAuthors:output_type -> productv1.QueryAllAuthorsResponse + 81, // 455: productv1.ProductService.QueryAllBlogPosts:output_type -> productv1.QueryAllBlogPostsResponse + 73, // 456: productv1.ProductService.QueryAllNullableFieldsTypes:output_type -> productv1.QueryAllNullableFieldsTypesResponse + 61, // 457: productv1.ProductService.QueryAllPets:output_type -> productv1.QueryAllPetsResponse + 83, // 458: productv1.ProductService.QueryAuthor:output_type -> productv1.QueryAuthorResponse + 85, // 459: productv1.ProductService.QueryAuthorById:output_type -> productv1.QueryAuthorByIdResponse + 87, // 460: productv1.ProductService.QueryAuthorsWithFilter:output_type -> productv1.QueryAuthorsWithFilterResponse + 75, // 461: productv1.ProductService.QueryBlogPost:output_type -> productv1.QueryBlogPostResponse + 77, // 462: productv1.ProductService.QueryBlogPostById:output_type -> productv1.QueryBlogPostByIdResponse + 79, // 463: productv1.ProductService.QueryBlogPostsWithFilter:output_type -> productv1.QueryBlogPostsWithFilterResponse + 91, // 464: productv1.ProductService.QueryBulkSearchAuthors:output_type -> productv1.QueryBulkSearchAuthorsResponse + 93, // 465: productv1.ProductService.QueryBulkSearchBlogPosts:output_type -> productv1.QueryBulkSearchBlogPostsResponse + 47, // 466: productv1.ProductService.QueryCalculateTotals:output_type -> productv1.QueryCalculateTotalsResponse + 49, // 467: productv1.ProductService.QueryCategories:output_type -> productv1.QueryCategoriesResponse + 53, // 468: productv1.ProductService.QueryCategoriesByKind:output_type -> productv1.QueryCategoriesByKindResponse + 55, // 469: productv1.ProductService.QueryCategoriesByKinds:output_type -> productv1.QueryCategoriesByKindsResponse + 51, // 470: productv1.ProductService.QueryCategory:output_type -> productv1.QueryCategoryResponse + 45, // 471: productv1.ProductService.QueryComplexFilterType:output_type -> productv1.QueryComplexFilterTypeResponse + 57, // 472: productv1.ProductService.QueryFilterCategories:output_type -> productv1.QueryFilterCategoriesResponse + 37, // 473: productv1.ProductService.QueryNestedType:output_type -> productv1.QueryNestedTypeResponse + 67, // 474: productv1.ProductService.QueryNullableFieldsType:output_type -> productv1.QueryNullableFieldsTypeResponse + 69, // 475: productv1.ProductService.QueryNullableFieldsTypeById:output_type -> productv1.QueryNullableFieldsTypeByIdResponse + 71, // 476: productv1.ProductService.QueryNullableFieldsTypeWithFilter:output_type -> productv1.QueryNullableFieldsTypeWithFilterResponse + 59, // 477: productv1.ProductService.QueryRandomPet:output_type -> productv1.QueryRandomPetResponse + 65, // 478: productv1.ProductService.QueryRandomSearchResult:output_type -> productv1.QueryRandomSearchResultResponse + 39, // 479: productv1.ProductService.QueryRecursiveType:output_type -> productv1.QueryRecursiveTypeResponse + 63, // 480: productv1.ProductService.QuerySearch:output_type -> productv1.QuerySearchResponse + 95, // 481: productv1.ProductService.QueryTestContainer:output_type -> productv1.QueryTestContainerResponse + 97, // 482: productv1.ProductService.QueryTestContainers:output_type -> productv1.QueryTestContainersResponse + 41, // 483: productv1.ProductService.QueryTypeFilterWithArguments:output_type -> productv1.QueryTypeFilterWithArgumentsResponse + 43, // 484: productv1.ProductService.QueryTypeWithMultipleFilterFields:output_type -> productv1.QueryTypeWithMultipleFilterFieldsResponse + 35, // 485: productv1.ProductService.QueryUser:output_type -> productv1.QueryUserResponse + 33, // 486: productv1.ProductService.QueryUsers:output_type -> productv1.QueryUsersResponse + 239, // 487: productv1.ProductService.RequireStorageMetadataScoreById:output_type -> productv1.RequireStorageMetadataScoreByIdResponse + 249, // 488: productv1.ProductService.RequireStorageOptionalProcessedMetadataById:output_type -> productv1.RequireStorageOptionalProcessedMetadataByIdResponse + 259, // 489: productv1.ProductService.RequireStorageOptionalProcessedTagsById:output_type -> productv1.RequireStorageOptionalProcessedTagsByIdResponse + 234, // 490: productv1.ProductService.RequireStorageOptionalTagSummaryById:output_type -> productv1.RequireStorageOptionalTagSummaryByIdResponse + 244, // 491: productv1.ProductService.RequireStorageProcessedMetadataById:output_type -> productv1.RequireStorageProcessedMetadataByIdResponse + 264, // 492: productv1.ProductService.RequireStorageProcessedMetadataHistoryById:output_type -> productv1.RequireStorageProcessedMetadataHistoryByIdResponse + 254, // 493: productv1.ProductService.RequireStorageProcessedTagsById:output_type -> productv1.RequireStorageProcessedTagsByIdResponse + 224, // 494: productv1.ProductService.RequireStorageStockHealthScoreById:output_type -> productv1.RequireStorageStockHealthScoreByIdResponse + 229, // 495: productv1.ProductService.RequireStorageTagSummaryById:output_type -> productv1.RequireStorageTagSummaryByIdResponse + 269, // 496: productv1.ProductService.RequireWarehouseStockHealthScoreById:output_type -> productv1.RequireWarehouseStockHealthScoreByIdResponse + 176, // 497: productv1.ProductService.ResolveCategoryCategoryMetrics:output_type -> productv1.ResolveCategoryCategoryMetricsResponse + 186, // 498: productv1.ProductService.ResolveCategoryCategoryStatus:output_type -> productv1.ResolveCategoryCategoryStatusResponse + 191, // 499: productv1.ProductService.ResolveCategoryChildCategories:output_type -> productv1.ResolveCategoryChildCategoriesResponse + 181, // 500: productv1.ProductService.ResolveCategoryMascot:output_type -> productv1.ResolveCategoryMascotResponse + 211, // 501: productv1.ProductService.ResolveCategoryMetricsNormalizedScore:output_type -> productv1.ResolveCategoryMetricsNormalizedScoreResponse + 216, // 502: productv1.ProductService.ResolveCategoryMetricsRelatedCategory:output_type -> productv1.ResolveCategoryMetricsRelatedCategoryResponse + 196, // 503: productv1.ProductService.ResolveCategoryOptionalCategories:output_type -> productv1.ResolveCategoryOptionalCategoriesResponse + 171, // 504: productv1.ProductService.ResolveCategoryPopularityScore:output_type -> productv1.ResolveCategoryPopularityScoreResponse + 166, // 505: productv1.ProductService.ResolveCategoryProductCount:output_type -> productv1.ResolveCategoryProductCountResponse + 136, // 506: productv1.ProductService.ResolveProductMascotRecommendation:output_type -> productv1.ResolveProductMascotRecommendationResponse + 146, // 507: productv1.ProductService.ResolveProductProductDetails:output_type -> productv1.ResolveProductProductDetailsResponse + 131, // 508: productv1.ProductService.ResolveProductRecommendedCategory:output_type -> productv1.ResolveProductRecommendedCategoryResponse + 126, // 509: productv1.ProductService.ResolveProductShippingEstimate:output_type -> productv1.ResolveProductShippingEstimateResponse + 141, // 510: productv1.ProductService.ResolveProductStockStatus:output_type -> productv1.ResolveProductStockStatusResponse + 156, // 511: productv1.ProductService.ResolveStorageLinkedStorages:output_type -> productv1.ResolveStorageLinkedStoragesResponse + 161, // 512: productv1.ProductService.ResolveStorageNearbyStorages:output_type -> productv1.ResolveStorageNearbyStoragesResponse + 151, // 513: productv1.ProductService.ResolveStorageStorageStatus:output_type -> productv1.ResolveStorageStorageStatusResponse + 206, // 514: productv1.ProductService.ResolveSubcategoryFeaturedCategory:output_type -> productv1.ResolveSubcategoryFeaturedCategoryResponse + 201, // 515: productv1.ProductService.ResolveSubcategoryItemCount:output_type -> productv1.ResolveSubcategoryItemCountResponse + 221, // 516: productv1.ProductService.ResolveTestContainerDetails:output_type -> productv1.ResolveTestContainerDetailsResponse + 439, // [439:517] is the sub-list for method output_type + 361, // [361:439] is the sub-list for method input_type + 361, // [361:361] is the sub-list for extension type_name + 361, // [361:361] is the sub-list for extension extendee + 0, // [0:361] is the sub-list for field type_name } func init() { file_product_proto_init() } @@ -15865,16 +19763,16 @@ func file_product_proto_init() { if File_product_proto != nil { return } - file_product_proto_msgTypes[218].OneofWrappers = []any{ + file_product_proto_msgTypes[284].OneofWrappers = []any{ (*Animal_Cat)(nil), (*Animal_Dog)(nil), } - file_product_proto_msgTypes[220].OneofWrappers = []any{ + file_product_proto_msgTypes[286].OneofWrappers = []any{ (*SearchResult_Product)(nil), (*SearchResult_User)(nil), (*SearchResult_Category)(nil), } - file_product_proto_msgTypes[230].OneofWrappers = []any{ + file_product_proto_msgTypes[296].OneofWrappers = []any{ (*ActionResult_ActionSuccess)(nil), (*ActionResult_ActionError)(nil), } @@ -15884,7 +19782,7 @@ func file_product_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_product_proto_rawDesc), len(file_product_proto_rawDesc)), NumEnums: 2, - NumMessages: 278, + NumMessages: 353, NumExtensions: 0, NumServices: 1, }, diff --git a/v2/pkg/grpctest/productv1/product_grpc.pb.go b/v2/pkg/grpctest/productv1/product_grpc.pb.go index aa2c9d912b..6d90d2ca0e 100644 --- a/v2/pkg/grpctest/productv1/product_grpc.pb.go +++ b/v2/pkg/grpctest/productv1/product_grpc.pb.go @@ -19,71 +19,84 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - ProductService_LookupProductById_FullMethodName = "/productv1.ProductService/LookupProductById" - ProductService_LookupStorageById_FullMethodName = "/productv1.ProductService/LookupStorageById" - ProductService_LookupWarehouseById_FullMethodName = "/productv1.ProductService/LookupWarehouseById" - ProductService_MutationBulkCreateAuthors_FullMethodName = "/productv1.ProductService/MutationBulkCreateAuthors" - ProductService_MutationBulkCreateBlogPosts_FullMethodName = "/productv1.ProductService/MutationBulkCreateBlogPosts" - ProductService_MutationBulkUpdateAuthors_FullMethodName = "/productv1.ProductService/MutationBulkUpdateAuthors" - ProductService_MutationBulkUpdateBlogPosts_FullMethodName = "/productv1.ProductService/MutationBulkUpdateBlogPosts" - ProductService_MutationCreateAuthor_FullMethodName = "/productv1.ProductService/MutationCreateAuthor" - ProductService_MutationCreateBlogPost_FullMethodName = "/productv1.ProductService/MutationCreateBlogPost" - ProductService_MutationCreateNullableFieldsType_FullMethodName = "/productv1.ProductService/MutationCreateNullableFieldsType" - ProductService_MutationCreateUser_FullMethodName = "/productv1.ProductService/MutationCreateUser" - ProductService_MutationPerformAction_FullMethodName = "/productv1.ProductService/MutationPerformAction" - ProductService_MutationUpdateAuthor_FullMethodName = "/productv1.ProductService/MutationUpdateAuthor" - ProductService_MutationUpdateBlogPost_FullMethodName = "/productv1.ProductService/MutationUpdateBlogPost" - ProductService_MutationUpdateNullableFieldsType_FullMethodName = "/productv1.ProductService/MutationUpdateNullableFieldsType" - ProductService_QueryAllAuthors_FullMethodName = "/productv1.ProductService/QueryAllAuthors" - ProductService_QueryAllBlogPosts_FullMethodName = "/productv1.ProductService/QueryAllBlogPosts" - ProductService_QueryAllNullableFieldsTypes_FullMethodName = "/productv1.ProductService/QueryAllNullableFieldsTypes" - ProductService_QueryAllPets_FullMethodName = "/productv1.ProductService/QueryAllPets" - ProductService_QueryAuthor_FullMethodName = "/productv1.ProductService/QueryAuthor" - ProductService_QueryAuthorById_FullMethodName = "/productv1.ProductService/QueryAuthorById" - ProductService_QueryAuthorsWithFilter_FullMethodName = "/productv1.ProductService/QueryAuthorsWithFilter" - ProductService_QueryBlogPost_FullMethodName = "/productv1.ProductService/QueryBlogPost" - ProductService_QueryBlogPostById_FullMethodName = "/productv1.ProductService/QueryBlogPostById" - ProductService_QueryBlogPostsWithFilter_FullMethodName = "/productv1.ProductService/QueryBlogPostsWithFilter" - ProductService_QueryBulkSearchAuthors_FullMethodName = "/productv1.ProductService/QueryBulkSearchAuthors" - ProductService_QueryBulkSearchBlogPosts_FullMethodName = "/productv1.ProductService/QueryBulkSearchBlogPosts" - ProductService_QueryCalculateTotals_FullMethodName = "/productv1.ProductService/QueryCalculateTotals" - ProductService_QueryCategories_FullMethodName = "/productv1.ProductService/QueryCategories" - ProductService_QueryCategoriesByKind_FullMethodName = "/productv1.ProductService/QueryCategoriesByKind" - ProductService_QueryCategoriesByKinds_FullMethodName = "/productv1.ProductService/QueryCategoriesByKinds" - ProductService_QueryCategory_FullMethodName = "/productv1.ProductService/QueryCategory" - ProductService_QueryComplexFilterType_FullMethodName = "/productv1.ProductService/QueryComplexFilterType" - ProductService_QueryFilterCategories_FullMethodName = "/productv1.ProductService/QueryFilterCategories" - ProductService_QueryNestedType_FullMethodName = "/productv1.ProductService/QueryNestedType" - ProductService_QueryNullableFieldsType_FullMethodName = "/productv1.ProductService/QueryNullableFieldsType" - ProductService_QueryNullableFieldsTypeById_FullMethodName = "/productv1.ProductService/QueryNullableFieldsTypeById" - ProductService_QueryNullableFieldsTypeWithFilter_FullMethodName = "/productv1.ProductService/QueryNullableFieldsTypeWithFilter" - ProductService_QueryRandomPet_FullMethodName = "/productv1.ProductService/QueryRandomPet" - ProductService_QueryRandomSearchResult_FullMethodName = "/productv1.ProductService/QueryRandomSearchResult" - ProductService_QueryRecursiveType_FullMethodName = "/productv1.ProductService/QueryRecursiveType" - ProductService_QuerySearch_FullMethodName = "/productv1.ProductService/QuerySearch" - ProductService_QueryTestContainer_FullMethodName = "/productv1.ProductService/QueryTestContainer" - ProductService_QueryTestContainers_FullMethodName = "/productv1.ProductService/QueryTestContainers" - ProductService_QueryTypeFilterWithArguments_FullMethodName = "/productv1.ProductService/QueryTypeFilterWithArguments" - ProductService_QueryTypeWithMultipleFilterFields_FullMethodName = "/productv1.ProductService/QueryTypeWithMultipleFilterFields" - ProductService_QueryUser_FullMethodName = "/productv1.ProductService/QueryUser" - ProductService_QueryUsers_FullMethodName = "/productv1.ProductService/QueryUsers" - ProductService_ResolveCategoryCategoryMetrics_FullMethodName = "/productv1.ProductService/ResolveCategoryCategoryMetrics" - ProductService_ResolveCategoryCategoryStatus_FullMethodName = "/productv1.ProductService/ResolveCategoryCategoryStatus" - ProductService_ResolveCategoryChildCategories_FullMethodName = "/productv1.ProductService/ResolveCategoryChildCategories" - ProductService_ResolveCategoryMascot_FullMethodName = "/productv1.ProductService/ResolveCategoryMascot" - ProductService_ResolveCategoryMetricsNormalizedScore_FullMethodName = "/productv1.ProductService/ResolveCategoryMetricsNormalizedScore" - ProductService_ResolveCategoryMetricsRelatedCategory_FullMethodName = "/productv1.ProductService/ResolveCategoryMetricsRelatedCategory" - ProductService_ResolveCategoryOptionalCategories_FullMethodName = "/productv1.ProductService/ResolveCategoryOptionalCategories" - ProductService_ResolveCategoryPopularityScore_FullMethodName = "/productv1.ProductService/ResolveCategoryPopularityScore" - ProductService_ResolveCategoryProductCount_FullMethodName = "/productv1.ProductService/ResolveCategoryProductCount" - ProductService_ResolveProductMascotRecommendation_FullMethodName = "/productv1.ProductService/ResolveProductMascotRecommendation" - ProductService_ResolveProductProductDetails_FullMethodName = "/productv1.ProductService/ResolveProductProductDetails" - ProductService_ResolveProductRecommendedCategory_FullMethodName = "/productv1.ProductService/ResolveProductRecommendedCategory" - ProductService_ResolveProductShippingEstimate_FullMethodName = "/productv1.ProductService/ResolveProductShippingEstimate" - ProductService_ResolveProductStockStatus_FullMethodName = "/productv1.ProductService/ResolveProductStockStatus" - ProductService_ResolveSubcategoryFeaturedCategory_FullMethodName = "/productv1.ProductService/ResolveSubcategoryFeaturedCategory" - ProductService_ResolveSubcategoryItemCount_FullMethodName = "/productv1.ProductService/ResolveSubcategoryItemCount" - ProductService_ResolveTestContainerDetails_FullMethodName = "/productv1.ProductService/ResolveTestContainerDetails" + ProductService_LookupProductById_FullMethodName = "/productv1.ProductService/LookupProductById" + ProductService_LookupStorageById_FullMethodName = "/productv1.ProductService/LookupStorageById" + ProductService_LookupWarehouseById_FullMethodName = "/productv1.ProductService/LookupWarehouseById" + ProductService_MutationBulkCreateAuthors_FullMethodName = "/productv1.ProductService/MutationBulkCreateAuthors" + ProductService_MutationBulkCreateBlogPosts_FullMethodName = "/productv1.ProductService/MutationBulkCreateBlogPosts" + ProductService_MutationBulkUpdateAuthors_FullMethodName = "/productv1.ProductService/MutationBulkUpdateAuthors" + ProductService_MutationBulkUpdateBlogPosts_FullMethodName = "/productv1.ProductService/MutationBulkUpdateBlogPosts" + ProductService_MutationCreateAuthor_FullMethodName = "/productv1.ProductService/MutationCreateAuthor" + ProductService_MutationCreateBlogPost_FullMethodName = "/productv1.ProductService/MutationCreateBlogPost" + ProductService_MutationCreateNullableFieldsType_FullMethodName = "/productv1.ProductService/MutationCreateNullableFieldsType" + ProductService_MutationCreateUser_FullMethodName = "/productv1.ProductService/MutationCreateUser" + ProductService_MutationPerformAction_FullMethodName = "/productv1.ProductService/MutationPerformAction" + ProductService_MutationUpdateAuthor_FullMethodName = "/productv1.ProductService/MutationUpdateAuthor" + ProductService_MutationUpdateBlogPost_FullMethodName = "/productv1.ProductService/MutationUpdateBlogPost" + ProductService_MutationUpdateNullableFieldsType_FullMethodName = "/productv1.ProductService/MutationUpdateNullableFieldsType" + ProductService_QueryAllAuthors_FullMethodName = "/productv1.ProductService/QueryAllAuthors" + ProductService_QueryAllBlogPosts_FullMethodName = "/productv1.ProductService/QueryAllBlogPosts" + ProductService_QueryAllNullableFieldsTypes_FullMethodName = "/productv1.ProductService/QueryAllNullableFieldsTypes" + ProductService_QueryAllPets_FullMethodName = "/productv1.ProductService/QueryAllPets" + ProductService_QueryAuthor_FullMethodName = "/productv1.ProductService/QueryAuthor" + ProductService_QueryAuthorById_FullMethodName = "/productv1.ProductService/QueryAuthorById" + ProductService_QueryAuthorsWithFilter_FullMethodName = "/productv1.ProductService/QueryAuthorsWithFilter" + ProductService_QueryBlogPost_FullMethodName = "/productv1.ProductService/QueryBlogPost" + ProductService_QueryBlogPostById_FullMethodName = "/productv1.ProductService/QueryBlogPostById" + ProductService_QueryBlogPostsWithFilter_FullMethodName = "/productv1.ProductService/QueryBlogPostsWithFilter" + ProductService_QueryBulkSearchAuthors_FullMethodName = "/productv1.ProductService/QueryBulkSearchAuthors" + ProductService_QueryBulkSearchBlogPosts_FullMethodName = "/productv1.ProductService/QueryBulkSearchBlogPosts" + ProductService_QueryCalculateTotals_FullMethodName = "/productv1.ProductService/QueryCalculateTotals" + ProductService_QueryCategories_FullMethodName = "/productv1.ProductService/QueryCategories" + ProductService_QueryCategoriesByKind_FullMethodName = "/productv1.ProductService/QueryCategoriesByKind" + ProductService_QueryCategoriesByKinds_FullMethodName = "/productv1.ProductService/QueryCategoriesByKinds" + ProductService_QueryCategory_FullMethodName = "/productv1.ProductService/QueryCategory" + ProductService_QueryComplexFilterType_FullMethodName = "/productv1.ProductService/QueryComplexFilterType" + ProductService_QueryFilterCategories_FullMethodName = "/productv1.ProductService/QueryFilterCategories" + ProductService_QueryNestedType_FullMethodName = "/productv1.ProductService/QueryNestedType" + ProductService_QueryNullableFieldsType_FullMethodName = "/productv1.ProductService/QueryNullableFieldsType" + ProductService_QueryNullableFieldsTypeById_FullMethodName = "/productv1.ProductService/QueryNullableFieldsTypeById" + ProductService_QueryNullableFieldsTypeWithFilter_FullMethodName = "/productv1.ProductService/QueryNullableFieldsTypeWithFilter" + ProductService_QueryRandomPet_FullMethodName = "/productv1.ProductService/QueryRandomPet" + ProductService_QueryRandomSearchResult_FullMethodName = "/productv1.ProductService/QueryRandomSearchResult" + ProductService_QueryRecursiveType_FullMethodName = "/productv1.ProductService/QueryRecursiveType" + ProductService_QuerySearch_FullMethodName = "/productv1.ProductService/QuerySearch" + ProductService_QueryTestContainer_FullMethodName = "/productv1.ProductService/QueryTestContainer" + ProductService_QueryTestContainers_FullMethodName = "/productv1.ProductService/QueryTestContainers" + ProductService_QueryTypeFilterWithArguments_FullMethodName = "/productv1.ProductService/QueryTypeFilterWithArguments" + ProductService_QueryTypeWithMultipleFilterFields_FullMethodName = "/productv1.ProductService/QueryTypeWithMultipleFilterFields" + ProductService_QueryUser_FullMethodName = "/productv1.ProductService/QueryUser" + ProductService_QueryUsers_FullMethodName = "/productv1.ProductService/QueryUsers" + ProductService_RequireStorageMetadataScoreById_FullMethodName = "/productv1.ProductService/RequireStorageMetadataScoreById" + ProductService_RequireStorageOptionalProcessedMetadataById_FullMethodName = "/productv1.ProductService/RequireStorageOptionalProcessedMetadataById" + ProductService_RequireStorageOptionalProcessedTagsById_FullMethodName = "/productv1.ProductService/RequireStorageOptionalProcessedTagsById" + ProductService_RequireStorageOptionalTagSummaryById_FullMethodName = "/productv1.ProductService/RequireStorageOptionalTagSummaryById" + ProductService_RequireStorageProcessedMetadataById_FullMethodName = "/productv1.ProductService/RequireStorageProcessedMetadataById" + ProductService_RequireStorageProcessedMetadataHistoryById_FullMethodName = "/productv1.ProductService/RequireStorageProcessedMetadataHistoryById" + ProductService_RequireStorageProcessedTagsById_FullMethodName = "/productv1.ProductService/RequireStorageProcessedTagsById" + ProductService_RequireStorageStockHealthScoreById_FullMethodName = "/productv1.ProductService/RequireStorageStockHealthScoreById" + ProductService_RequireStorageTagSummaryById_FullMethodName = "/productv1.ProductService/RequireStorageTagSummaryById" + ProductService_RequireWarehouseStockHealthScoreById_FullMethodName = "/productv1.ProductService/RequireWarehouseStockHealthScoreById" + ProductService_ResolveCategoryCategoryMetrics_FullMethodName = "/productv1.ProductService/ResolveCategoryCategoryMetrics" + ProductService_ResolveCategoryCategoryStatus_FullMethodName = "/productv1.ProductService/ResolveCategoryCategoryStatus" + ProductService_ResolveCategoryChildCategories_FullMethodName = "/productv1.ProductService/ResolveCategoryChildCategories" + ProductService_ResolveCategoryMascot_FullMethodName = "/productv1.ProductService/ResolveCategoryMascot" + ProductService_ResolveCategoryMetricsNormalizedScore_FullMethodName = "/productv1.ProductService/ResolveCategoryMetricsNormalizedScore" + ProductService_ResolveCategoryMetricsRelatedCategory_FullMethodName = "/productv1.ProductService/ResolveCategoryMetricsRelatedCategory" + ProductService_ResolveCategoryOptionalCategories_FullMethodName = "/productv1.ProductService/ResolveCategoryOptionalCategories" + ProductService_ResolveCategoryPopularityScore_FullMethodName = "/productv1.ProductService/ResolveCategoryPopularityScore" + ProductService_ResolveCategoryProductCount_FullMethodName = "/productv1.ProductService/ResolveCategoryProductCount" + ProductService_ResolveProductMascotRecommendation_FullMethodName = "/productv1.ProductService/ResolveProductMascotRecommendation" + ProductService_ResolveProductProductDetails_FullMethodName = "/productv1.ProductService/ResolveProductProductDetails" + ProductService_ResolveProductRecommendedCategory_FullMethodName = "/productv1.ProductService/ResolveProductRecommendedCategory" + ProductService_ResolveProductShippingEstimate_FullMethodName = "/productv1.ProductService/ResolveProductShippingEstimate" + ProductService_ResolveProductStockStatus_FullMethodName = "/productv1.ProductService/ResolveProductStockStatus" + ProductService_ResolveStorageLinkedStorages_FullMethodName = "/productv1.ProductService/ResolveStorageLinkedStorages" + ProductService_ResolveStorageNearbyStorages_FullMethodName = "/productv1.ProductService/ResolveStorageNearbyStorages" + ProductService_ResolveStorageStorageStatus_FullMethodName = "/productv1.ProductService/ResolveStorageStorageStatus" + ProductService_ResolveSubcategoryFeaturedCategory_FullMethodName = "/productv1.ProductService/ResolveSubcategoryFeaturedCategory" + ProductService_ResolveSubcategoryItemCount_FullMethodName = "/productv1.ProductService/ResolveSubcategoryItemCount" + ProductService_ResolveTestContainerDetails_FullMethodName = "/productv1.ProductService/ResolveTestContainerDetails" ) // ProductServiceClient is the client API for ProductService service. @@ -143,6 +156,16 @@ type ProductServiceClient interface { QueryTypeWithMultipleFilterFields(ctx context.Context, in *QueryTypeWithMultipleFilterFieldsRequest, opts ...grpc.CallOption) (*QueryTypeWithMultipleFilterFieldsResponse, error) QueryUser(ctx context.Context, in *QueryUserRequest, opts ...grpc.CallOption) (*QueryUserResponse, error) QueryUsers(ctx context.Context, in *QueryUsersRequest, opts ...grpc.CallOption) (*QueryUsersResponse, error) + RequireStorageMetadataScoreById(ctx context.Context, in *RequireStorageMetadataScoreByIdRequest, opts ...grpc.CallOption) (*RequireStorageMetadataScoreByIdResponse, error) + RequireStorageOptionalProcessedMetadataById(ctx context.Context, in *RequireStorageOptionalProcessedMetadataByIdRequest, opts ...grpc.CallOption) (*RequireStorageOptionalProcessedMetadataByIdResponse, error) + RequireStorageOptionalProcessedTagsById(ctx context.Context, in *RequireStorageOptionalProcessedTagsByIdRequest, opts ...grpc.CallOption) (*RequireStorageOptionalProcessedTagsByIdResponse, error) + RequireStorageOptionalTagSummaryById(ctx context.Context, in *RequireStorageOptionalTagSummaryByIdRequest, opts ...grpc.CallOption) (*RequireStorageOptionalTagSummaryByIdResponse, error) + RequireStorageProcessedMetadataById(ctx context.Context, in *RequireStorageProcessedMetadataByIdRequest, opts ...grpc.CallOption) (*RequireStorageProcessedMetadataByIdResponse, error) + RequireStorageProcessedMetadataHistoryById(ctx context.Context, in *RequireStorageProcessedMetadataHistoryByIdRequest, opts ...grpc.CallOption) (*RequireStorageProcessedMetadataHistoryByIdResponse, error) + RequireStorageProcessedTagsById(ctx context.Context, in *RequireStorageProcessedTagsByIdRequest, opts ...grpc.CallOption) (*RequireStorageProcessedTagsByIdResponse, error) + RequireStorageStockHealthScoreById(ctx context.Context, in *RequireStorageStockHealthScoreByIdRequest, opts ...grpc.CallOption) (*RequireStorageStockHealthScoreByIdResponse, error) + RequireStorageTagSummaryById(ctx context.Context, in *RequireStorageTagSummaryByIdRequest, opts ...grpc.CallOption) (*RequireStorageTagSummaryByIdResponse, error) + RequireWarehouseStockHealthScoreById(ctx context.Context, in *RequireWarehouseStockHealthScoreByIdRequest, opts ...grpc.CallOption) (*RequireWarehouseStockHealthScoreByIdResponse, error) ResolveCategoryCategoryMetrics(ctx context.Context, in *ResolveCategoryCategoryMetricsRequest, opts ...grpc.CallOption) (*ResolveCategoryCategoryMetricsResponse, error) ResolveCategoryCategoryStatus(ctx context.Context, in *ResolveCategoryCategoryStatusRequest, opts ...grpc.CallOption) (*ResolveCategoryCategoryStatusResponse, error) ResolveCategoryChildCategories(ctx context.Context, in *ResolveCategoryChildCategoriesRequest, opts ...grpc.CallOption) (*ResolveCategoryChildCategoriesResponse, error) @@ -157,6 +180,9 @@ type ProductServiceClient interface { ResolveProductRecommendedCategory(ctx context.Context, in *ResolveProductRecommendedCategoryRequest, opts ...grpc.CallOption) (*ResolveProductRecommendedCategoryResponse, error) ResolveProductShippingEstimate(ctx context.Context, in *ResolveProductShippingEstimateRequest, opts ...grpc.CallOption) (*ResolveProductShippingEstimateResponse, error) ResolveProductStockStatus(ctx context.Context, in *ResolveProductStockStatusRequest, opts ...grpc.CallOption) (*ResolveProductStockStatusResponse, error) + ResolveStorageLinkedStorages(ctx context.Context, in *ResolveStorageLinkedStoragesRequest, opts ...grpc.CallOption) (*ResolveStorageLinkedStoragesResponse, error) + ResolveStorageNearbyStorages(ctx context.Context, in *ResolveStorageNearbyStoragesRequest, opts ...grpc.CallOption) (*ResolveStorageNearbyStoragesResponse, error) + ResolveStorageStorageStatus(ctx context.Context, in *ResolveStorageStorageStatusRequest, opts ...grpc.CallOption) (*ResolveStorageStorageStatusResponse, error) ResolveSubcategoryFeaturedCategory(ctx context.Context, in *ResolveSubcategoryFeaturedCategoryRequest, opts ...grpc.CallOption) (*ResolveSubcategoryFeaturedCategoryResponse, error) ResolveSubcategoryItemCount(ctx context.Context, in *ResolveSubcategoryItemCountRequest, opts ...grpc.CallOption) (*ResolveSubcategoryItemCountResponse, error) ResolveTestContainerDetails(ctx context.Context, in *ResolveTestContainerDetailsRequest, opts ...grpc.CallOption) (*ResolveTestContainerDetailsResponse, error) @@ -650,6 +676,106 @@ func (c *productServiceClient) QueryUsers(ctx context.Context, in *QueryUsersReq return out, nil } +func (c *productServiceClient) RequireStorageMetadataScoreById(ctx context.Context, in *RequireStorageMetadataScoreByIdRequest, opts ...grpc.CallOption) (*RequireStorageMetadataScoreByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageMetadataScoreByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageMetadataScoreById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageOptionalProcessedMetadataById(ctx context.Context, in *RequireStorageOptionalProcessedMetadataByIdRequest, opts ...grpc.CallOption) (*RequireStorageOptionalProcessedMetadataByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageOptionalProcessedMetadataByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageOptionalProcessedMetadataById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageOptionalProcessedTagsById(ctx context.Context, in *RequireStorageOptionalProcessedTagsByIdRequest, opts ...grpc.CallOption) (*RequireStorageOptionalProcessedTagsByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageOptionalProcessedTagsByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageOptionalProcessedTagsById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageOptionalTagSummaryById(ctx context.Context, in *RequireStorageOptionalTagSummaryByIdRequest, opts ...grpc.CallOption) (*RequireStorageOptionalTagSummaryByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageOptionalTagSummaryByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageOptionalTagSummaryById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageProcessedMetadataById(ctx context.Context, in *RequireStorageProcessedMetadataByIdRequest, opts ...grpc.CallOption) (*RequireStorageProcessedMetadataByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageProcessedMetadataByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageProcessedMetadataById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageProcessedMetadataHistoryById(ctx context.Context, in *RequireStorageProcessedMetadataHistoryByIdRequest, opts ...grpc.CallOption) (*RequireStorageProcessedMetadataHistoryByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageProcessedMetadataHistoryByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageProcessedMetadataHistoryById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageProcessedTagsById(ctx context.Context, in *RequireStorageProcessedTagsByIdRequest, opts ...grpc.CallOption) (*RequireStorageProcessedTagsByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageProcessedTagsByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageProcessedTagsById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageStockHealthScoreById(ctx context.Context, in *RequireStorageStockHealthScoreByIdRequest, opts ...grpc.CallOption) (*RequireStorageStockHealthScoreByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageStockHealthScoreByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageStockHealthScoreById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireStorageTagSummaryById(ctx context.Context, in *RequireStorageTagSummaryByIdRequest, opts ...grpc.CallOption) (*RequireStorageTagSummaryByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireStorageTagSummaryByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireStorageTagSummaryById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) RequireWarehouseStockHealthScoreById(ctx context.Context, in *RequireWarehouseStockHealthScoreByIdRequest, opts ...grpc.CallOption) (*RequireWarehouseStockHealthScoreByIdResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(RequireWarehouseStockHealthScoreByIdResponse) + err := c.cc.Invoke(ctx, ProductService_RequireWarehouseStockHealthScoreById_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *productServiceClient) ResolveCategoryCategoryMetrics(ctx context.Context, in *ResolveCategoryCategoryMetricsRequest, opts ...grpc.CallOption) (*ResolveCategoryCategoryMetricsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ResolveCategoryCategoryMetricsResponse) @@ -790,6 +916,36 @@ func (c *productServiceClient) ResolveProductStockStatus(ctx context.Context, in return out, nil } +func (c *productServiceClient) ResolveStorageLinkedStorages(ctx context.Context, in *ResolveStorageLinkedStoragesRequest, opts ...grpc.CallOption) (*ResolveStorageLinkedStoragesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveStorageLinkedStoragesResponse) + err := c.cc.Invoke(ctx, ProductService_ResolveStorageLinkedStorages_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) ResolveStorageNearbyStorages(ctx context.Context, in *ResolveStorageNearbyStoragesRequest, opts ...grpc.CallOption) (*ResolveStorageNearbyStoragesResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveStorageNearbyStoragesResponse) + err := c.cc.Invoke(ctx, ProductService_ResolveStorageNearbyStorages_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *productServiceClient) ResolveStorageStorageStatus(ctx context.Context, in *ResolveStorageStorageStatusRequest, opts ...grpc.CallOption) (*ResolveStorageStorageStatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ResolveStorageStorageStatusResponse) + err := c.cc.Invoke(ctx, ProductService_ResolveStorageStorageStatus_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *productServiceClient) ResolveSubcategoryFeaturedCategory(ctx context.Context, in *ResolveSubcategoryFeaturedCategoryRequest, opts ...grpc.CallOption) (*ResolveSubcategoryFeaturedCategoryResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(ResolveSubcategoryFeaturedCategoryResponse) @@ -877,6 +1033,16 @@ type ProductServiceServer interface { QueryTypeWithMultipleFilterFields(context.Context, *QueryTypeWithMultipleFilterFieldsRequest) (*QueryTypeWithMultipleFilterFieldsResponse, error) QueryUser(context.Context, *QueryUserRequest) (*QueryUserResponse, error) QueryUsers(context.Context, *QueryUsersRequest) (*QueryUsersResponse, error) + RequireStorageMetadataScoreById(context.Context, *RequireStorageMetadataScoreByIdRequest) (*RequireStorageMetadataScoreByIdResponse, error) + RequireStorageOptionalProcessedMetadataById(context.Context, *RequireStorageOptionalProcessedMetadataByIdRequest) (*RequireStorageOptionalProcessedMetadataByIdResponse, error) + RequireStorageOptionalProcessedTagsById(context.Context, *RequireStorageOptionalProcessedTagsByIdRequest) (*RequireStorageOptionalProcessedTagsByIdResponse, error) + RequireStorageOptionalTagSummaryById(context.Context, *RequireStorageOptionalTagSummaryByIdRequest) (*RequireStorageOptionalTagSummaryByIdResponse, error) + RequireStorageProcessedMetadataById(context.Context, *RequireStorageProcessedMetadataByIdRequest) (*RequireStorageProcessedMetadataByIdResponse, error) + RequireStorageProcessedMetadataHistoryById(context.Context, *RequireStorageProcessedMetadataHistoryByIdRequest) (*RequireStorageProcessedMetadataHistoryByIdResponse, error) + RequireStorageProcessedTagsById(context.Context, *RequireStorageProcessedTagsByIdRequest) (*RequireStorageProcessedTagsByIdResponse, error) + RequireStorageStockHealthScoreById(context.Context, *RequireStorageStockHealthScoreByIdRequest) (*RequireStorageStockHealthScoreByIdResponse, error) + RequireStorageTagSummaryById(context.Context, *RequireStorageTagSummaryByIdRequest) (*RequireStorageTagSummaryByIdResponse, error) + RequireWarehouseStockHealthScoreById(context.Context, *RequireWarehouseStockHealthScoreByIdRequest) (*RequireWarehouseStockHealthScoreByIdResponse, error) ResolveCategoryCategoryMetrics(context.Context, *ResolveCategoryCategoryMetricsRequest) (*ResolveCategoryCategoryMetricsResponse, error) ResolveCategoryCategoryStatus(context.Context, *ResolveCategoryCategoryStatusRequest) (*ResolveCategoryCategoryStatusResponse, error) ResolveCategoryChildCategories(context.Context, *ResolveCategoryChildCategoriesRequest) (*ResolveCategoryChildCategoriesResponse, error) @@ -891,6 +1057,9 @@ type ProductServiceServer interface { ResolveProductRecommendedCategory(context.Context, *ResolveProductRecommendedCategoryRequest) (*ResolveProductRecommendedCategoryResponse, error) ResolveProductShippingEstimate(context.Context, *ResolveProductShippingEstimateRequest) (*ResolveProductShippingEstimateResponse, error) ResolveProductStockStatus(context.Context, *ResolveProductStockStatusRequest) (*ResolveProductStockStatusResponse, error) + ResolveStorageLinkedStorages(context.Context, *ResolveStorageLinkedStoragesRequest) (*ResolveStorageLinkedStoragesResponse, error) + ResolveStorageNearbyStorages(context.Context, *ResolveStorageNearbyStoragesRequest) (*ResolveStorageNearbyStoragesResponse, error) + ResolveStorageStorageStatus(context.Context, *ResolveStorageStorageStatusRequest) (*ResolveStorageStorageStatusResponse, error) ResolveSubcategoryFeaturedCategory(context.Context, *ResolveSubcategoryFeaturedCategoryRequest) (*ResolveSubcategoryFeaturedCategoryResponse, error) ResolveSubcategoryItemCount(context.Context, *ResolveSubcategoryItemCountRequest) (*ResolveSubcategoryItemCountResponse, error) ResolveTestContainerDetails(context.Context, *ResolveTestContainerDetailsRequest) (*ResolveTestContainerDetailsResponse, error) @@ -1048,6 +1217,36 @@ func (UnimplementedProductServiceServer) QueryUser(context.Context, *QueryUserRe func (UnimplementedProductServiceServer) QueryUsers(context.Context, *QueryUsersRequest) (*QueryUsersResponse, error) { return nil, status.Error(codes.Unimplemented, "method QueryUsers not implemented") } +func (UnimplementedProductServiceServer) RequireStorageMetadataScoreById(context.Context, *RequireStorageMetadataScoreByIdRequest) (*RequireStorageMetadataScoreByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageMetadataScoreById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageOptionalProcessedMetadataById(context.Context, *RequireStorageOptionalProcessedMetadataByIdRequest) (*RequireStorageOptionalProcessedMetadataByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageOptionalProcessedMetadataById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageOptionalProcessedTagsById(context.Context, *RequireStorageOptionalProcessedTagsByIdRequest) (*RequireStorageOptionalProcessedTagsByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageOptionalProcessedTagsById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageOptionalTagSummaryById(context.Context, *RequireStorageOptionalTagSummaryByIdRequest) (*RequireStorageOptionalTagSummaryByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageOptionalTagSummaryById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageProcessedMetadataById(context.Context, *RequireStorageProcessedMetadataByIdRequest) (*RequireStorageProcessedMetadataByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageProcessedMetadataById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageProcessedMetadataHistoryById(context.Context, *RequireStorageProcessedMetadataHistoryByIdRequest) (*RequireStorageProcessedMetadataHistoryByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageProcessedMetadataHistoryById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageProcessedTagsById(context.Context, *RequireStorageProcessedTagsByIdRequest) (*RequireStorageProcessedTagsByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageProcessedTagsById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageStockHealthScoreById(context.Context, *RequireStorageStockHealthScoreByIdRequest) (*RequireStorageStockHealthScoreByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageStockHealthScoreById not implemented") +} +func (UnimplementedProductServiceServer) RequireStorageTagSummaryById(context.Context, *RequireStorageTagSummaryByIdRequest) (*RequireStorageTagSummaryByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireStorageTagSummaryById not implemented") +} +func (UnimplementedProductServiceServer) RequireWarehouseStockHealthScoreById(context.Context, *RequireWarehouseStockHealthScoreByIdRequest) (*RequireWarehouseStockHealthScoreByIdResponse, error) { + return nil, status.Error(codes.Unimplemented, "method RequireWarehouseStockHealthScoreById not implemented") +} func (UnimplementedProductServiceServer) ResolveCategoryCategoryMetrics(context.Context, *ResolveCategoryCategoryMetricsRequest) (*ResolveCategoryCategoryMetricsResponse, error) { return nil, status.Error(codes.Unimplemented, "method ResolveCategoryCategoryMetrics not implemented") } @@ -1090,6 +1289,15 @@ func (UnimplementedProductServiceServer) ResolveProductShippingEstimate(context. func (UnimplementedProductServiceServer) ResolveProductStockStatus(context.Context, *ResolveProductStockStatusRequest) (*ResolveProductStockStatusResponse, error) { return nil, status.Error(codes.Unimplemented, "method ResolveProductStockStatus not implemented") } +func (UnimplementedProductServiceServer) ResolveStorageLinkedStorages(context.Context, *ResolveStorageLinkedStoragesRequest) (*ResolveStorageLinkedStoragesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ResolveStorageLinkedStorages not implemented") +} +func (UnimplementedProductServiceServer) ResolveStorageNearbyStorages(context.Context, *ResolveStorageNearbyStoragesRequest) (*ResolveStorageNearbyStoragesResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ResolveStorageNearbyStorages not implemented") +} +func (UnimplementedProductServiceServer) ResolveStorageStorageStatus(context.Context, *ResolveStorageStorageStatusRequest) (*ResolveStorageStorageStatusResponse, error) { + return nil, status.Error(codes.Unimplemented, "method ResolveStorageStorageStatus not implemented") +} func (UnimplementedProductServiceServer) ResolveSubcategoryFeaturedCategory(context.Context, *ResolveSubcategoryFeaturedCategoryRequest) (*ResolveSubcategoryFeaturedCategoryResponse, error) { return nil, status.Error(codes.Unimplemented, "method ResolveSubcategoryFeaturedCategory not implemented") } @@ -1984,6 +2192,186 @@ func _ProductService_QueryUsers_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _ProductService_RequireStorageMetadataScoreById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageMetadataScoreByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageMetadataScoreById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageMetadataScoreById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageMetadataScoreById(ctx, req.(*RequireStorageMetadataScoreByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageOptionalProcessedMetadataById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageOptionalProcessedMetadataByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageOptionalProcessedMetadataById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageOptionalProcessedMetadataById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageOptionalProcessedMetadataById(ctx, req.(*RequireStorageOptionalProcessedMetadataByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageOptionalProcessedTagsById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageOptionalProcessedTagsByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageOptionalProcessedTagsById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageOptionalProcessedTagsById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageOptionalProcessedTagsById(ctx, req.(*RequireStorageOptionalProcessedTagsByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageOptionalTagSummaryById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageOptionalTagSummaryByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageOptionalTagSummaryById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageOptionalTagSummaryById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageOptionalTagSummaryById(ctx, req.(*RequireStorageOptionalTagSummaryByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageProcessedMetadataById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageProcessedMetadataByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageProcessedMetadataById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageProcessedMetadataById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageProcessedMetadataById(ctx, req.(*RequireStorageProcessedMetadataByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageProcessedMetadataHistoryById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageProcessedMetadataHistoryByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageProcessedMetadataHistoryById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageProcessedMetadataHistoryById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageProcessedMetadataHistoryById(ctx, req.(*RequireStorageProcessedMetadataHistoryByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageProcessedTagsById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageProcessedTagsByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageProcessedTagsById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageProcessedTagsById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageProcessedTagsById(ctx, req.(*RequireStorageProcessedTagsByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageStockHealthScoreById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageStockHealthScoreByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageStockHealthScoreById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageStockHealthScoreById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageStockHealthScoreById(ctx, req.(*RequireStorageStockHealthScoreByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireStorageTagSummaryById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireStorageTagSummaryByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireStorageTagSummaryById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireStorageTagSummaryById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireStorageTagSummaryById(ctx, req.(*RequireStorageTagSummaryByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_RequireWarehouseStockHealthScoreById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RequireWarehouseStockHealthScoreByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).RequireWarehouseStockHealthScoreById(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_RequireWarehouseStockHealthScoreById_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).RequireWarehouseStockHealthScoreById(ctx, req.(*RequireWarehouseStockHealthScoreByIdRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ProductService_ResolveCategoryCategoryMetrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ResolveCategoryCategoryMetricsRequest) if err := dec(in); err != nil { @@ -2236,6 +2624,60 @@ func _ProductService_ResolveProductStockStatus_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } +func _ProductService_ResolveStorageLinkedStorages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveStorageLinkedStoragesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).ResolveStorageLinkedStorages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_ResolveStorageLinkedStorages_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).ResolveStorageLinkedStorages(ctx, req.(*ResolveStorageLinkedStoragesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_ResolveStorageNearbyStorages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveStorageNearbyStoragesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).ResolveStorageNearbyStorages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_ResolveStorageNearbyStorages_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).ResolveStorageNearbyStorages(ctx, req.(*ResolveStorageNearbyStoragesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _ProductService_ResolveStorageStorageStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveStorageStorageStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ProductServiceServer).ResolveStorageStorageStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ProductService_ResolveStorageStorageStatus_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ProductServiceServer).ResolveStorageStorageStatus(ctx, req.(*ResolveStorageStorageStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _ProductService_ResolveSubcategoryFeaturedCategory_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ResolveSubcategoryFeaturedCategoryRequest) if err := dec(in); err != nil { @@ -2489,6 +2931,46 @@ var ProductService_ServiceDesc = grpc.ServiceDesc{ MethodName: "QueryUsers", Handler: _ProductService_QueryUsers_Handler, }, + { + MethodName: "RequireStorageMetadataScoreById", + Handler: _ProductService_RequireStorageMetadataScoreById_Handler, + }, + { + MethodName: "RequireStorageOptionalProcessedMetadataById", + Handler: _ProductService_RequireStorageOptionalProcessedMetadataById_Handler, + }, + { + MethodName: "RequireStorageOptionalProcessedTagsById", + Handler: _ProductService_RequireStorageOptionalProcessedTagsById_Handler, + }, + { + MethodName: "RequireStorageOptionalTagSummaryById", + Handler: _ProductService_RequireStorageOptionalTagSummaryById_Handler, + }, + { + MethodName: "RequireStorageProcessedMetadataById", + Handler: _ProductService_RequireStorageProcessedMetadataById_Handler, + }, + { + MethodName: "RequireStorageProcessedMetadataHistoryById", + Handler: _ProductService_RequireStorageProcessedMetadataHistoryById_Handler, + }, + { + MethodName: "RequireStorageProcessedTagsById", + Handler: _ProductService_RequireStorageProcessedTagsById_Handler, + }, + { + MethodName: "RequireStorageStockHealthScoreById", + Handler: _ProductService_RequireStorageStockHealthScoreById_Handler, + }, + { + MethodName: "RequireStorageTagSummaryById", + Handler: _ProductService_RequireStorageTagSummaryById_Handler, + }, + { + MethodName: "RequireWarehouseStockHealthScoreById", + Handler: _ProductService_RequireWarehouseStockHealthScoreById_Handler, + }, { MethodName: "ResolveCategoryCategoryMetrics", Handler: _ProductService_ResolveCategoryCategoryMetrics_Handler, @@ -2545,6 +3027,18 @@ var ProductService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ResolveProductStockStatus", Handler: _ProductService_ResolveProductStockStatus_Handler, }, + { + MethodName: "ResolveStorageLinkedStorages", + Handler: _ProductService_ResolveStorageLinkedStorages_Handler, + }, + { + MethodName: "ResolveStorageNearbyStorages", + Handler: _ProductService_ResolveStorageNearbyStorages_Handler, + }, + { + MethodName: "ResolveStorageStorageStatus", + Handler: _ProductService_ResolveStorageStorageStatus_Handler, + }, { MethodName: "ResolveSubcategoryFeaturedCategory", Handler: _ProductService_ResolveSubcategoryFeaturedCategory_Handler, diff --git a/v2/pkg/grpctest/testdata/products.graphqls b/v2/pkg/grpctest/testdata/products.graphqls index 6b0d26e172..a42df3f68a 100644 --- a/v2/pkg/grpctest/testdata/products.graphqls +++ b/v2/pkg/grpctest/testdata/products.graphqls @@ -21,12 +21,55 @@ type Storage @key(fields: "id") { id: ID! name: String! location: String! + itemCount: Int! @external + restockData: RestockData! @external + stockHealthScore: Float! @requires(fields: "itemCount restockData { lastRestockDate }") + + # External fields for @requires testing + tags: [String!]! @external + optionalTags: [String!] @external + metadata: StorageMetadata! @external + metadataHistory: [StorageMetadata!]! @external + + # @requires fields returning scalars + tagSummary: String! @requires(fields: "tags") + optionalTagSummary: String @requires(fields: "optionalTags") + metadataScore: Float! @requires(fields: "metadata { capacity zone }") + + # @requires fields returning complex types + processedMetadata: StorageMetadata! @requires(fields: "metadata { capacity zone priority }") + optionalProcessedMetadata: StorageMetadata @requires(fields: "metadata { capacity zone }") + + # @requires fields returning lists + processedTags: [String!]! @requires(fields: "tags") + optionalProcessedTags: [String!] @requires(fields: "optionalTags") + + # @requires fields returning lists of complex types + processedMetadataHistory: [StorageMetadata!]! @requires(fields: "metadataHistory { capacity zone }") + + # @connect_fieldResolver fields + storageStatus(checkHealth: Boolean!): ActionResult! @connect__fieldResolver(context: "id name") + linkedStorages(depth: Int!): [Storage!]! @connect__fieldResolver(context: "id name location") + nearbyStorages(radius: Int): [Storage!] @connect__fieldResolver(context: "id location") } type Warehouse @key(fields: "id") { id: ID! name: String! location: String! + inventoryCount: Int! @external + restockData: RestockData! @external + stockHealthScore: Float! @requires(fields: "inventoryCount restockData { lastRestockDate }") +} + +type RestockData { + lastRestockDate: String! +} + +type StorageMetadata { + capacity: Int! + zone: String! + priority: Int! } type User { diff --git a/v2/pkg/introspection/introspection_enum.go b/v2/pkg/introspection/introspection_enum.go index d97bc8db16..97c629a0c3 100644 --- a/v2/pkg/introspection/introspection_enum.go +++ b/v2/pkg/introspection/introspection_enum.go @@ -1,5 +1,5 @@ // Code generated by go-enum DO NOT EDIT. -// Version: v0.9.1 +// Version: v0.9.2 // Built By: go install