diff --git a/docker-compose.yml b/docker-compose.yml index 79fcfb69b0..2368377b86 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -286,6 +286,7 @@ services: - CART_SERVICE_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR + - FEATURE_FLAG_GRPC_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - SHIPPING_SERVICE_ADDR diff --git a/pb/demo.proto b/pb/demo.proto index aed0c2ce8b..76ce899e65 100644 --- a/pb/demo.proto +++ b/pb/demo.proto @@ -266,46 +266,52 @@ message Ad { service FeatureFlagService { rpc GetFlag(GetFlagRequest) returns (GetFlagResponse) {} rpc CreateFlag(CreateFlagRequest) returns (CreateFlagResponse) {} - rpc UpdateFlag(UpdateFlagRequest) returns (UpdateFlagResponse) {} + rpc UpdateFlagProbability(UpdateFlagProbabilityRequest) returns (UpdateFlagProbabilityResponse) {} rpc ListFlags(ListFlagsRequest) returns (ListFlagsResponse) {} rpc DeleteFlag(DeleteFlagRequest) returns (DeleteFlagResponse) {} } -message Flag { +message FlagEvaluationResult { string name = 1; string description = 2; bool enabled = 3; } +message FlagDefinition { + string name = 1; + string description = 2; + float enabled = 3; +} + message GetFlagRequest { string name = 1; } message GetFlagResponse { - Flag flag = 1; + FlagEvaluationResult flag = 1; } message CreateFlagRequest { string name = 1; string description = 2; - bool enabled = 3; + float enabled = 3; } message CreateFlagResponse { - Flag flag = 1; + FlagDefinition flag = 1; } -message UpdateFlagRequest { +message UpdateFlagProbabilityRequest { string name = 1; - bool enabled = 2; + float enabled = 2; } -message UpdateFlagResponse {} +message UpdateFlagProbabilityResponse {} message ListFlagsRequest {} message ListFlagsResponse { - repeated Flag flag = 1; + repeated FlagDefinition flag = 1; } message DeleteFlagRequest { diff --git a/regenerate-grpc-code.sh b/regenerate-grpc-code.sh new file mode 100755 index 0000000000..c50eb78b59 --- /dev/null +++ b/regenerate-grpc-code.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +set -euo pipefail + +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +# This script is used to update generated code after changing demo.proto. + +cd -P -- "$(dirname -- "$0")" +pwd + +command -v npm >/dev/null 2>&1 || { + cat <&2 +npm needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + +command -v go >/dev/null 2>&1 || { + cat <&2 +go needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + +command -v rebar3 >/dev/null 2>&1 || { + cat <&2 +rebar3 needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + + +command -v protoc >/dev/null 2>&1 || { + cat <&2 +protoc needs to be installed but it isn't. + +Aborting. +EOF + exit 1 +} + +echo "Regenerating typescript code in src/frontend based on demo.proto" +pushd src/frontend > /dev/null +# The npm script grpc:generate expects the pb directory to be available in the current directory (src/frontend) because it is +# intended to be used during Docker build, where pb is copied to the same working directory as src/frontend. To get around that +# difference, we temporarily create a symlink to pb and then remove it after the script is done. +ln -s ../../pb pb +npm run grpc:generate +rm pb +popd > /dev/null + +echo "Regenerating Go code in src/accountingservice based on demo.proto" +pushd src/accountingservice > /dev/null +go generate +popd > /dev/null + +echo "Regenerating Go code in src/checkoutservice based on demo.proto" +pushd src/checkoutservice > /dev/null +go generate +popd > /dev/null + +echo "Regenerating Go code in src/productcatalogservice based on demo.proto" +pushd src/productcatalogservice > /dev/null +go generate +popd > /dev/null + +echo "Regenerating Java code in src/adservice based on demo.proto" +pushd src/adservice > /dev/null +./gradlew generateProto +popd > /dev/null + +echo "Recompiling Erlang code in src/featureflagservice based on demo.proto" +pushd src/featureflagservice > /dev/null +# The Erlang build expects the proto file to be available in src/featureflagservice/proto) because it is +# intended to be used during Docker build, where demo.proto is copied to the the proto directory in the same working directory +# as the Erlang source code. To get around that difference, we temporarily create a symlink to ../../pb as proto and then remove +# it after the script is done. +ln -s ../../pb proto +rebar3 grpc_regen +rm proto +popd > /dev/null + + +echo done \ No newline at end of file diff --git a/restart-service.sh b/restart-service.sh index 5f80919dbe..365edad3a8 100755 --- a/restart-service.sh +++ b/restart-service.sh @@ -1,4 +1,7 @@ #!/bin/sh + +set -euo pipefail + # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 diff --git a/src/accountingservice/genproto/oteldemo/demo.pb.go b/src/accountingservice/genproto/oteldemo/demo.pb.go index a788255384..d441e2da55 100644 --- a/src/accountingservice/genproto/oteldemo/demo.pb.go +++ b/src/accountingservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.32.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagDefinition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagDefinition) Reset() { + *x = FlagDefinition{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagDefinition) ProtoMessage() {} + +func (x *FlagDefinition) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagDefinition.ProtoReflect.Descriptor instead. +func (*FlagDefinition) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagDefinition) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagDefinition) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagDefinition) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagDefinition `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,42 +2130,42 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagDefinition { if x != nil { return x.Flag } return nil } -type UpdateFlagRequest struct { +type UpdateFlagProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *UpdateFlagRequest) Reset() { - *x = UpdateFlagRequest{} +func (x *UpdateFlagProbabilityRequest) Reset() { + *x = UpdateFlagProbabilityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagRequest) String() string { +func (x *UpdateFlagProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagRequest) ProtoMessage() {} +func (*UpdateFlagProbabilityRequest) ProtoMessage() {} -func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] +func (x *UpdateFlagProbabilityRequest) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,48 +2176,48 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. -func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} +// Deprecated: Use UpdateFlagProbabilityRequest.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityRequest) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{38} } -func (x *UpdateFlagRequest) GetName() string { +func (x *UpdateFlagProbabilityRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagProbabilityRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } -type UpdateFlagResponse struct { +type UpdateFlagProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *UpdateFlagResponse) Reset() { - *x = UpdateFlagResponse{} +func (x *UpdateFlagProbabilityResponse) Reset() { + *x = UpdateFlagProbabilityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagResponse) String() string { +func (x *UpdateFlagProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagResponse) ProtoMessage() {} +func (*UpdateFlagProbabilityResponse) ProtoMessage() {} -func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] +func (x *UpdateFlagProbabilityResponse) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,9 +2228,9 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. -func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} +// Deprecated: Use UpdateFlagProbabilityResponse.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityResponse) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagDefinition `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagDefinition { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,159 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, + 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, + 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, + 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, + 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, + 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, + 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x32, 0xa0, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, + 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2755,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2789,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagDefinition)(nil), // 33: oteldemo.FlagDefinition + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagProbabilityRequest)(nil), // 38: oteldemo.UpdateFlagProbabilityRequest + (*UpdateFlagProbabilityResponse)(nil), // 39: oteldemo.UpdateFlagProbabilityResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2826,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagDefinition + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagDefinition 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2844,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlagProbability:input_type -> oteldemo.UpdateFlagProbabilityRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2864,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlagProbability:output_type -> oteldemo.UpdateFlagProbabilityResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3267,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3279,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagDefinition); i { case 0: return &v.state case 1: @@ -3214,7 +3291,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3303,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3315,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3327,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3339,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagProbabilityRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3351,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagProbabilityResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3363,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3375,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3387,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3417,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go b/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..184b7696d3 100644 --- a/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo @@ -1065,11 +1065,11 @@ var AdService_ServiceDesc = grpc.ServiceDesc{ } const ( - FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" - FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" - FeatureFlagService_UpdateFlag_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlag" - FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" - FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" + FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" + FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" + FeatureFlagService_UpdateFlagProbability_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlagProbability" + FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" + FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" ) // FeatureFlagServiceClient is the client API for FeatureFlagService service. @@ -1078,7 +1078,7 @@ const ( type FeatureFlagServiceClient interface { GetFlag(ctx context.Context, in *GetFlagRequest, opts ...grpc.CallOption) (*GetFlagResponse, error) CreateFlag(ctx context.Context, in *CreateFlagRequest, opts ...grpc.CallOption) (*CreateFlagResponse, error) - UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) + UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) ListFlags(ctx context.Context, in *ListFlagsRequest, opts ...grpc.CallOption) (*ListFlagsResponse, error) DeleteFlag(ctx context.Context, in *DeleteFlagRequest, opts ...grpc.CallOption) (*DeleteFlagResponse, error) } @@ -1109,9 +1109,9 @@ func (c *featureFlagServiceClient) CreateFlag(ctx context.Context, in *CreateFla return out, nil } -func (c *featureFlagServiceClient) UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) { - out := new(UpdateFlagResponse) - err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlag_FullMethodName, in, out, opts...) +func (c *featureFlagServiceClient) UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) { + out := new(UpdateFlagProbabilityResponse) + err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlagProbability_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -1142,7 +1142,7 @@ func (c *featureFlagServiceClient) DeleteFlag(ctx context.Context, in *DeleteFla type FeatureFlagServiceServer interface { GetFlag(context.Context, *GetFlagRequest) (*GetFlagResponse, error) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) - UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) + UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) DeleteFlag(context.Context, *DeleteFlagRequest) (*DeleteFlagResponse, error) mustEmbedUnimplementedFeatureFlagServiceServer() @@ -1158,8 +1158,8 @@ func (UnimplementedFeatureFlagServiceServer) GetFlag(context.Context, *GetFlagRe func (UnimplementedFeatureFlagServiceServer) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFlag not implemented") } -func (UnimplementedFeatureFlagServiceServer) UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFlag not implemented") +func (UnimplementedFeatureFlagServiceServer) UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateFlagProbability not implemented") } func (UnimplementedFeatureFlagServiceServer) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListFlags not implemented") @@ -1216,20 +1216,20 @@ func _FeatureFlagService_CreateFlag_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _FeatureFlagService_UpdateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateFlagRequest) +func _FeatureFlagService_UpdateFlagProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFlagProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, in) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: FeatureFlagService_UpdateFlag_FullMethodName, + FullMethod: FeatureFlagService_UpdateFlagProbability_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, req.(*UpdateFlagRequest)) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, req.(*UpdateFlagProbabilityRequest)) } return interceptor(ctx, in, info, handler) } @@ -1286,8 +1286,8 @@ var FeatureFlagService_ServiceDesc = grpc.ServiceDesc{ Handler: _FeatureFlagService_CreateFlag_Handler, }, { - MethodName: "UpdateFlag", - Handler: _FeatureFlagService_UpdateFlag_Handler, + MethodName: "UpdateFlagProbability", + Handler: _FeatureFlagService_UpdateFlagProbability_Handler, }, { MethodName: "ListFlags", diff --git a/src/checkoutservice/genproto/oteldemo/demo.pb.go b/src/checkoutservice/genproto/oteldemo/demo.pb.go index 5d61c9f147..329c7b9603 100644 --- a/src/checkoutservice/genproto/oteldemo/demo.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagDefinition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagDefinition) Reset() { + *x = FlagDefinition{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagDefinition) ProtoMessage() {} + +func (x *FlagDefinition) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagDefinition.ProtoReflect.Descriptor instead. +func (*FlagDefinition) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagDefinition) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagDefinition) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagDefinition) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagDefinition `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,42 +2130,42 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagDefinition { if x != nil { return x.Flag } return nil } -type UpdateFlagRequest struct { +type UpdateFlagProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *UpdateFlagRequest) Reset() { - *x = UpdateFlagRequest{} +func (x *UpdateFlagProbabilityRequest) Reset() { + *x = UpdateFlagProbabilityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagRequest) String() string { +func (x *UpdateFlagProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagRequest) ProtoMessage() {} +func (*UpdateFlagProbabilityRequest) ProtoMessage() {} -func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] +func (x *UpdateFlagProbabilityRequest) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,48 +2176,48 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. -func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} +// Deprecated: Use UpdateFlagProbabilityRequest.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityRequest) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{38} } -func (x *UpdateFlagRequest) GetName() string { +func (x *UpdateFlagProbabilityRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagProbabilityRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } -type UpdateFlagResponse struct { +type UpdateFlagProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *UpdateFlagResponse) Reset() { - *x = UpdateFlagResponse{} +func (x *UpdateFlagProbabilityResponse) Reset() { + *x = UpdateFlagProbabilityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagResponse) String() string { +func (x *UpdateFlagProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagResponse) ProtoMessage() {} +func (*UpdateFlagProbabilityResponse) ProtoMessage() {} -func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] +func (x *UpdateFlagProbabilityResponse) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,9 +2228,9 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. -func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} +// Deprecated: Use UpdateFlagProbabilityResponse.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityResponse) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagDefinition `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagDefinition { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,159 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, + 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, + 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, + 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, + 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, + 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, + 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x32, 0xa0, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, + 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2755,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2789,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagDefinition)(nil), // 33: oteldemo.FlagDefinition + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagProbabilityRequest)(nil), // 38: oteldemo.UpdateFlagProbabilityRequest + (*UpdateFlagProbabilityResponse)(nil), // 39: oteldemo.UpdateFlagProbabilityResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2826,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagDefinition + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagDefinition 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2844,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlagProbability:input_type -> oteldemo.UpdateFlagProbabilityRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2864,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlagProbability:output_type -> oteldemo.UpdateFlagProbabilityResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3267,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3279,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagDefinition); i { case 0: return &v.state case 1: @@ -3214,7 +3291,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3303,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3315,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3327,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3339,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagProbabilityRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3351,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagProbabilityResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3363,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3375,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3387,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3417,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go b/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..184b7696d3 100644 --- a/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo @@ -1065,11 +1065,11 @@ var AdService_ServiceDesc = grpc.ServiceDesc{ } const ( - FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" - FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" - FeatureFlagService_UpdateFlag_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlag" - FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" - FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" + FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" + FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" + FeatureFlagService_UpdateFlagProbability_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlagProbability" + FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" + FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" ) // FeatureFlagServiceClient is the client API for FeatureFlagService service. @@ -1078,7 +1078,7 @@ const ( type FeatureFlagServiceClient interface { GetFlag(ctx context.Context, in *GetFlagRequest, opts ...grpc.CallOption) (*GetFlagResponse, error) CreateFlag(ctx context.Context, in *CreateFlagRequest, opts ...grpc.CallOption) (*CreateFlagResponse, error) - UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) + UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) ListFlags(ctx context.Context, in *ListFlagsRequest, opts ...grpc.CallOption) (*ListFlagsResponse, error) DeleteFlag(ctx context.Context, in *DeleteFlagRequest, opts ...grpc.CallOption) (*DeleteFlagResponse, error) } @@ -1109,9 +1109,9 @@ func (c *featureFlagServiceClient) CreateFlag(ctx context.Context, in *CreateFla return out, nil } -func (c *featureFlagServiceClient) UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) { - out := new(UpdateFlagResponse) - err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlag_FullMethodName, in, out, opts...) +func (c *featureFlagServiceClient) UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) { + out := new(UpdateFlagProbabilityResponse) + err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlagProbability_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -1142,7 +1142,7 @@ func (c *featureFlagServiceClient) DeleteFlag(ctx context.Context, in *DeleteFla type FeatureFlagServiceServer interface { GetFlag(context.Context, *GetFlagRequest) (*GetFlagResponse, error) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) - UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) + UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) DeleteFlag(context.Context, *DeleteFlagRequest) (*DeleteFlagResponse, error) mustEmbedUnimplementedFeatureFlagServiceServer() @@ -1158,8 +1158,8 @@ func (UnimplementedFeatureFlagServiceServer) GetFlag(context.Context, *GetFlagRe func (UnimplementedFeatureFlagServiceServer) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFlag not implemented") } -func (UnimplementedFeatureFlagServiceServer) UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFlag not implemented") +func (UnimplementedFeatureFlagServiceServer) UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateFlagProbability not implemented") } func (UnimplementedFeatureFlagServiceServer) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListFlags not implemented") @@ -1216,20 +1216,20 @@ func _FeatureFlagService_CreateFlag_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _FeatureFlagService_UpdateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateFlagRequest) +func _FeatureFlagService_UpdateFlagProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFlagProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, in) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: FeatureFlagService_UpdateFlag_FullMethodName, + FullMethod: FeatureFlagService_UpdateFlagProbability_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, req.(*UpdateFlagRequest)) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, req.(*UpdateFlagProbabilityRequest)) } return interceptor(ctx, in, info, handler) } @@ -1286,8 +1286,8 @@ var FeatureFlagService_ServiceDesc = grpc.ServiceDesc{ Handler: _FeatureFlagService_CreateFlag_Handler, }, { - MethodName: "UpdateFlag", - Handler: _FeatureFlagService_UpdateFlag_Handler, + MethodName: "UpdateFlagProbability", + Handler: _FeatureFlagService_UpdateFlagProbability_Handler, }, { MethodName: "ListFlags", diff --git a/src/featureflagservice/src/ffs_service.erl b/src/featureflagservice/src/ffs_service.erl index 421ce7ce23..fbebe53c20 100644 --- a/src/featureflagservice/src/ffs_service.erl +++ b/src/featureflagservice/src/ffs_service.erl @@ -18,7 +18,7 @@ -export([get_flag/2, create_flag/2, - update_flag/2, + update_flag_probability/2, list_flags/2, delete_flag/2]). @@ -32,6 +32,7 @@ get_flag(Ctx, #{name := Name}) -> case 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name) of nil -> {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', description := Description, enabled := Enabled @@ -48,25 +49,76 @@ get_flag(Ctx, #{name := Name}) -> description => Description, enabled => FlagEnabledValue}, - {ok, #{flag => Flag}, Ctx} + {ok, #{flag => Flag}, Ctx}; + + _ -> + {grpc_error, {?GRPC_STATUS_INTERNAL, <<"unexpected response from get_feature_flag_by_name">>}} + end. -spec create_flag(ctx:t(), ffs_demo_pb:create_flag_request()) -> {ok, ffs_demo_pb:create_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -create_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to create flags.">>}}. +create_flag(Ctx, Flag) -> + 'Elixir.Featureflagservice.FeatureFlags':create_feature_flag(Flag), + {ok, #{}, Ctx}. + +-spec update_flag_probability(ctx:t(), ffs_demo_pb:update_flag_probability_request()) -> + {ok, ffs_demo_pb:update_flag_probability_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). +update_flag_probability(Ctx, #{name := Name, enabled := Probability}) -> + Flag = 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name), + case Flag of + nil -> + {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; --spec update_flag(ctx:t(), ffs_demo_pb:update_flag_request()) -> - {ok, ffs_demo_pb:update_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -update_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to update flags.">>}}. + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := _, + description := _, + enabled := _ + } -> + 'Elixir.Featureflagservice.FeatureFlags':update_feature_flag( + Flag, + #{enabled => Probability} + ), + {ok, #{}, Ctx}; + + _ -> + {grpc_error, {?GRPC_STATUS_INTERNAL, <<"unexpected response from get_feature_flag_by_name">>}} + end. -spec list_flags(ctx:t(), ffs_demo_pb:list_flags_request()) -> {ok, ffs_demo_pb:list_flags_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -list_flags(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to view all flags.">>}}. +list_flags(Ctx, _) -> + Flags = lists:map(fun unpack_flag/1, 'Elixir.Featureflagservice.FeatureFlags':list_feature_flags()), + {ok, #{flag => Flags}, Ctx}. + +unpack_flag(Flag) -> + case Flag of + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := Name, + description := Description, + enabled := Probability + } -> + #{name => Name, + description => Description, + enabled => Probability} + end. -spec delete_flag(ctx:t(), ffs_demo_pb:delete_flag_request()) -> {ok, ffs_demo_pb:delete_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -delete_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to delete flags.">>}}. +delete_flag(Ctx, #{name := Name}) -> + Flag = 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name), + case Flag of + nil -> + {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; + + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := _, + description := _, + enabled := _ + } -> + 'Elixir.Featureflagservice.FeatureFlags':delete_feature_flag(Flag), + {ok, #{}, Ctx}; + + _ -> + {grpc_error, {?GRPC_STATUS_INTERNAL, <<"unexpected response from get_feature_flag_by_name">>}} + end. diff --git a/src/frontend/gateways/rpc/FeatureFlag.gateway.ts b/src/frontend/gateways/rpc/FeatureFlag.gateway.ts new file mode 100644 index 0000000000..39b9fa7f76 --- /dev/null +++ b/src/frontend/gateways/rpc/FeatureFlag.gateway.ts @@ -0,0 +1,63 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import {ChannelCredentials, status} from '@grpc/grpc-js'; +import { + CreateFlagRequest, + CreateFlagResponse, + DeleteFlagResponse, + FeatureFlagServiceClient, + GetFlagResponse, + ListFlagsResponse, + UpdateFlagProbabilityRequest, + UpdateFlagProbabilityResponse +} from '../../protos/demo'; + +const {FEATURE_FLAG_GRPC_SERVICE_ADDR = ''} = process.env; + +const client = new FeatureFlagServiceClient(FEATURE_FLAG_GRPC_SERVICE_ADDR, ChannelCredentials.createInsecure()); + +const FeatureFlagGateway = () => ({ + + getFeatureFlag(name: string) { + return new Promise((resolve, reject) => + client.getFlag({name}, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + createFeatureFlag(flag: CreateFlagRequest) { + return new Promise((resolve, reject) => + client.createFlag(flag, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + updateFeatureFlag(name: string, flag: UpdateFlagProbabilityRequest) { + return new Promise((resolve, reject) => client.updateFlagProbability(flag, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + listFeatureFlags() { + return new Promise((resolve, reject) => + client.listFlags({}, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + deleteFeatureFlag(name: string) { + return new Promise((resolve, reject) => client.deleteFlag({name}, + (error, response) => { + if (error) { + if (error.code === status.NOT_FOUND) { + return resolve({} as DeleteFlagResponse) + } else { + return reject(error) + } + } + resolve(response) + } + ) + ); + }, + +}); + +export default FeatureFlagGateway(); diff --git a/src/frontend/pages/api/featureflags/[name]/index.ts b/src/frontend/pages/api/featureflags/[name]/index.ts new file mode 100644 index 0000000000..a677e0e379 --- /dev/null +++ b/src/frontend/pages/api/featureflags/[name]/index.ts @@ -0,0 +1,46 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import type {NextApiRequest, NextApiResponse} from 'next'; +import FeatureFlagGateway from '../../../../gateways/rpc/FeatureFlag.gateway'; +import {Empty, FlagEvaluationResult, UpdateFlagProbabilityRequest} from '../../../../protos/demo'; + +type TResponse = FlagEvaluationResult | Empty; + +const handler = async ({method, query, body}: NextApiRequest, res: NextApiResponse) => { + switch (method) { + case 'GET': { + const {name = ''} = query + const flag = await FeatureFlagGateway.getFeatureFlag(name as string); + return res.status(200).json(flag); + } + + case 'PUT': { + const {name} = query + if (!name || Array.isArray(name)) { + return res.status(400).end() + } + if (!body || typeof body.enabled !== 'number'){ + return res.status(400).end() + } + const updateFlagProbabilityRequest = body as UpdateFlagProbabilityRequest; + // The name is part of the resource path, and we do not want to require clients to repeat the name in the request + // body; but on the grpc level the name needs to be in the message body, so we move it there. + updateFlagProbabilityRequest.name = name; + await FeatureFlagGateway.updateFeatureFlag(name as string, updateFlagProbabilityRequest); + return res.status(204).end(); + } + + case 'DELETE': { + const {name = ''} = query + await FeatureFlagGateway.deleteFeatureFlag(name as string); + return res.status(204).end(); + } + + default: { + return res.status(405).end(); + } + } +}; + +export default handler; diff --git a/src/frontend/pages/api/featureflags/index.ts b/src/frontend/pages/api/featureflags/index.ts new file mode 100644 index 0000000000..0f7595fc5f --- /dev/null +++ b/src/frontend/pages/api/featureflags/index.ts @@ -0,0 +1,32 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import type {NextApiRequest, NextApiResponse} from 'next'; +import FeatureFlagGateway from '../../../gateways/rpc/FeatureFlag.gateway'; +import {CreateFlagRequest, Empty, FlagDefinition} from '../../../protos/demo'; + +type TResponse = FlagDefinition[] | FlagDefinition | Empty; + +const handler = async ({method, body}: NextApiRequest, res: NextApiResponse) => { + switch (method) { + case 'POST': { + if (!body || typeof body.name !== 'string' || typeof body.description !== 'string' || typeof body.enabled !== 'number') { + return res.status(400).end() + } + const flagFromRequest = body as CreateFlagRequest + const {flag: flagFromResponse} = await FeatureFlagGateway.createFeatureFlag(flagFromRequest); + return res.status(200).json(flagFromResponse!); + } + + case 'GET': { + const {flag: allFlags} = await FeatureFlagGateway.listFeatureFlags(); + return res.status(200).json(allFlags); + } + + default: { + return res.status(405).send(''); + } + } +}; + +export default handler; diff --git a/src/productcatalogservice/genproto/oteldemo/demo.pb.go b/src/productcatalogservice/genproto/oteldemo/demo.pb.go index 5d61c9f147..329c7b9603 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagDefinition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagDefinition) Reset() { + *x = FlagDefinition{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagDefinition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagDefinition) ProtoMessage() {} + +func (x *FlagDefinition) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagDefinition.ProtoReflect.Descriptor instead. +func (*FlagDefinition) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagDefinition) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagDefinition) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagDefinition) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagDefinition `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,42 +2130,42 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagDefinition { if x != nil { return x.Flag } return nil } -type UpdateFlagRequest struct { +type UpdateFlagProbabilityRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *UpdateFlagRequest) Reset() { - *x = UpdateFlagRequest{} +func (x *UpdateFlagProbabilityRequest) Reset() { + *x = UpdateFlagProbabilityRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagRequest) String() string { +func (x *UpdateFlagProbabilityRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagRequest) ProtoMessage() {} +func (*UpdateFlagProbabilityRequest) ProtoMessage() {} -func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] +func (x *UpdateFlagProbabilityRequest) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2113,48 +2176,48 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. -func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} +// Deprecated: Use UpdateFlagProbabilityRequest.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityRequest) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{38} } -func (x *UpdateFlagRequest) GetName() string { +func (x *UpdateFlagProbabilityRequest) GetName() string { if x != nil { return x.Name } return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagProbabilityRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } -type UpdateFlagResponse struct { +type UpdateFlagProbabilityResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *UpdateFlagResponse) Reset() { - *x = UpdateFlagResponse{} +func (x *UpdateFlagProbabilityResponse) Reset() { + *x = UpdateFlagProbabilityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *UpdateFlagResponse) String() string { +func (x *UpdateFlagProbabilityResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UpdateFlagResponse) ProtoMessage() {} +func (*UpdateFlagProbabilityResponse) ProtoMessage() {} -func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] +func (x *UpdateFlagProbabilityResponse) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2165,9 +2228,9 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. -func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} +// Deprecated: Use UpdateFlagProbabilityResponse.ProtoReflect.Descriptor instead. +func (*UpdateFlagProbabilityResponse) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagDefinition `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagDefinition { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,159 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x6c, 0x65, 0x64, 0x22, 0x60, 0x0a, 0x0e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, 0x6c, + 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x42, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x4c, 0x0a, 0x1c, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x1f, 0x0a, 0x1d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, + 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, + 0x67, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x6c, 0x61, + 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, + 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, + 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, + 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, + 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, + 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, + 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, + 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, + 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x32, 0xa0, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, + 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x50, + 0x72, 0x6f, 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2755,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2789,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagDefinition)(nil), // 33: oteldemo.FlagDefinition + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagProbabilityRequest)(nil), // 38: oteldemo.UpdateFlagProbabilityRequest + (*UpdateFlagProbabilityResponse)(nil), // 39: oteldemo.UpdateFlagProbabilityResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2826,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagDefinition + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagDefinition 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2844,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlagProbability:input_type -> oteldemo.UpdateFlagProbabilityRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2864,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlagProbability:output_type -> oteldemo.UpdateFlagProbabilityResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3267,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3279,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagDefinition); i { case 0: return &v.state case 1: @@ -3214,7 +3291,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3303,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3315,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3327,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3339,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagProbabilityRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3351,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagProbabilityResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3363,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3375,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3387,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3417,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go b/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..184b7696d3 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo @@ -1065,11 +1065,11 @@ var AdService_ServiceDesc = grpc.ServiceDesc{ } const ( - FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" - FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" - FeatureFlagService_UpdateFlag_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlag" - FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" - FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" + FeatureFlagService_GetFlag_FullMethodName = "/oteldemo.FeatureFlagService/GetFlag" + FeatureFlagService_CreateFlag_FullMethodName = "/oteldemo.FeatureFlagService/CreateFlag" + FeatureFlagService_UpdateFlagProbability_FullMethodName = "/oteldemo.FeatureFlagService/UpdateFlagProbability" + FeatureFlagService_ListFlags_FullMethodName = "/oteldemo.FeatureFlagService/ListFlags" + FeatureFlagService_DeleteFlag_FullMethodName = "/oteldemo.FeatureFlagService/DeleteFlag" ) // FeatureFlagServiceClient is the client API for FeatureFlagService service. @@ -1078,7 +1078,7 @@ const ( type FeatureFlagServiceClient interface { GetFlag(ctx context.Context, in *GetFlagRequest, opts ...grpc.CallOption) (*GetFlagResponse, error) CreateFlag(ctx context.Context, in *CreateFlagRequest, opts ...grpc.CallOption) (*CreateFlagResponse, error) - UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) + UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) ListFlags(ctx context.Context, in *ListFlagsRequest, opts ...grpc.CallOption) (*ListFlagsResponse, error) DeleteFlag(ctx context.Context, in *DeleteFlagRequest, opts ...grpc.CallOption) (*DeleteFlagResponse, error) } @@ -1109,9 +1109,9 @@ func (c *featureFlagServiceClient) CreateFlag(ctx context.Context, in *CreateFla return out, nil } -func (c *featureFlagServiceClient) UpdateFlag(ctx context.Context, in *UpdateFlagRequest, opts ...grpc.CallOption) (*UpdateFlagResponse, error) { - out := new(UpdateFlagResponse) - err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlag_FullMethodName, in, out, opts...) +func (c *featureFlagServiceClient) UpdateFlagProbability(ctx context.Context, in *UpdateFlagProbabilityRequest, opts ...grpc.CallOption) (*UpdateFlagProbabilityResponse, error) { + out := new(UpdateFlagProbabilityResponse) + err := c.cc.Invoke(ctx, FeatureFlagService_UpdateFlagProbability_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -1142,7 +1142,7 @@ func (c *featureFlagServiceClient) DeleteFlag(ctx context.Context, in *DeleteFla type FeatureFlagServiceServer interface { GetFlag(context.Context, *GetFlagRequest) (*GetFlagResponse, error) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) - UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) + UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) DeleteFlag(context.Context, *DeleteFlagRequest) (*DeleteFlagResponse, error) mustEmbedUnimplementedFeatureFlagServiceServer() @@ -1158,8 +1158,8 @@ func (UnimplementedFeatureFlagServiceServer) GetFlag(context.Context, *GetFlagRe func (UnimplementedFeatureFlagServiceServer) CreateFlag(context.Context, *CreateFlagRequest) (*CreateFlagResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateFlag not implemented") } -func (UnimplementedFeatureFlagServiceServer) UpdateFlag(context.Context, *UpdateFlagRequest) (*UpdateFlagResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdateFlag not implemented") +func (UnimplementedFeatureFlagServiceServer) UpdateFlagProbability(context.Context, *UpdateFlagProbabilityRequest) (*UpdateFlagProbabilityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateFlagProbability not implemented") } func (UnimplementedFeatureFlagServiceServer) ListFlags(context.Context, *ListFlagsRequest) (*ListFlagsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ListFlags not implemented") @@ -1216,20 +1216,20 @@ func _FeatureFlagService_CreateFlag_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _FeatureFlagService_UpdateFlag_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdateFlagRequest) +func _FeatureFlagService_UpdateFlagProbability_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateFlagProbabilityRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, in) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: FeatureFlagService_UpdateFlag_FullMethodName, + FullMethod: FeatureFlagService_UpdateFlagProbability_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(FeatureFlagServiceServer).UpdateFlag(ctx, req.(*UpdateFlagRequest)) + return srv.(FeatureFlagServiceServer).UpdateFlagProbability(ctx, req.(*UpdateFlagProbabilityRequest)) } return interceptor(ctx, in, info, handler) } @@ -1286,8 +1286,8 @@ var FeatureFlagService_ServiceDesc = grpc.ServiceDesc{ Handler: _FeatureFlagService_CreateFlag_Handler, }, { - MethodName: "UpdateFlag", - Handler: _FeatureFlagService_UpdateFlag_Handler, + MethodName: "UpdateFlagProbability", + Handler: _FeatureFlagService_UpdateFlagProbability_Handler, }, { MethodName: "ListFlags",