From 90436aaae4a72094468ed081cbc9583a02ced2c5 Mon Sep 17 00:00:00 2001 From: Rob Shakir Date: Sat, 4 Nov 2023 11:34:22 -0700 Subject: [PATCH 1/4] Add support for mapping leaf-lists of unions to protobufs. * (M) integration_tests/integration_test.go - Reflect the fact that the gRIBI integration test cases is now implemented. * (M) protomap/proto.go - Add support for mapping both []any and gNMI TypedValue messages to fields within a protobuf from input gNMI paths. * (M) protomap/testdata/... - Additional fields in test protobufs. --- .../integration_tests/integration_test.go | 9 +- protomap/proto.go | 111 ++- protomap/proto_test.go | 103 ++- .../testdata/exschemapath/exschemapath.pb.go | 809 +++++++++++------- .../testdata/exschemapath/exschemapath.proto | 11 + 5 files changed, 711 insertions(+), 332 deletions(-) diff --git a/protomap/integration_tests/integration_test.go b/protomap/integration_tests/integration_test.go index a4bc17ac..171cea0d 100644 --- a/protomap/integration_tests/integration_test.go +++ b/protomap/integration_tests/integration_test.go @@ -231,10 +231,10 @@ func TestGRIBIAFTToStruct(t *testing.T) { Value: &gpb.TypedValue_LeaflistVal{ LeaflistVal: &gpb.ScalarArray{ Element: []*gpb.TypedValue{ - mustValue(t, 20), - mustValue(t, 30), - mustValue(t, 40), - mustValue(t, 50), + mustValue(t, uint64(20)), + mustValue(t, uint64(30)), + mustValue(t, uint64(40)), + mustValue(t, uint64(50)), }, }, }, @@ -253,7 +253,6 @@ func TestGRIBIAFTToStruct(t *testing.T) { PushedMplsLabelStackUint64: 50, }}, }, - wantErr: true, // Currently this is unhandled but was causing a panic, check that it doesn't panic. }} for _, tt := range tests { diff --git a/protomap/proto.go b/protomap/proto.go index 25d62fac..a7fb22c8 100644 --- a/protomap/proto.go +++ b/protomap/proto.go @@ -651,8 +651,13 @@ func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, mapped[chp] = true m.Set(fd, v) case leaflistunion: - rangeErr = fmt.Errorf("%s: unhandled leaf-list of unions", fd.FullName()) - return false + v, err := makeUnionLeafList(m, fd, chv) + if err != nil { + rangeErr = err + return false + } + mapped[chp] = true + m.Set(fd, v) default: v, isWrap, err := makeWrapper(m, fd, chv) if err != nil { @@ -999,6 +1004,108 @@ func isWrapper(msg protoreflect.Message, fd protoreflect.FieldDescriptor) bool { } } +// makeUnionLeafList makes a protoreflect.Value corresponding to the leaf-list field fd of message m, containing +// the values within chv, which is checked to be either a slice of Go inbuilt values, or gNMI TypedValue +// protobufs. It returns an error if the leaf-list cannot be created. +func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor, chv any) (protoreflect.Value, error) { + newV := msg.NewField(fd) + + inputVal := reflect.ValueOf(chv) + switch { + case inputVal.Kind() != reflect.Slice && !util.IsValueStructPtr(inputVal): + return protoreflect.ValueOf(nil), fmt.Errorf("invalid value %v (%T) for a leaf-list of unions", chv, chv) + case util.IsValueStructPtr(inputVal): + tv, ok := inputVal.Interface().(*gpb.TypedValue) + if !ok { + return protoreflect.ValueOf(nil), fmt.Errorf("invalid struct type in slice %v (%T) for a leaf-list of unions", chv, inputVal.Elem().Interface()) + } + + for _, inputVal := range tv.GetLeaflistVal().GetElement() { + protoListElem := newV.List().NewElement() + var retErr error + unpopRange{protoListElem.Message()}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch ee := inputVal.GetValue().(type) { + case *gpb.TypedValue_StringVal: + if fd.Kind() == protoreflect.StringKind { + protoListElem.Message().Set(fd, protoreflect.ValueOfString(ee.StringVal)) + newV.List().Append(protoListElem) + return false + } + if fd.Kind() == protoreflect.EnumKind { + ev, err := enumValue(fd, ee.StringVal) + if err != nil { + retErr = err + return false + } + protoListElem.Message().Set(fd, ev) + newV.List().Append(protoListElem) + return false + } + case *gpb.TypedValue_UintVal: + if fd.Kind() == protoreflect.Uint64Kind { + protoListElem.Message().Set(fd, protoreflect.ValueOfUint64(ee.UintVal)) + newV.List().Append(protoListElem) + return false + } + default: + // TODO(robjs): implement type handling for other TypedValues. + } + return true + }) + if retErr != nil { + return protoreflect.ValueOf(nil), retErr + } + } + return newV, nil + } + var retErr error + for i := 0; i < inputVal.Len(); i++ { + protoListElem := newV.List().NewElement() + inputElem := inputVal.Index(i) + fmt.Printf("running loop with %v\n", inputElem.Elem()) + unpopRange{protoListElem.Message()}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if inputElem.Kind() != reflect.Interface { + retErr = fmt.Errorf("invalid input type for leaf-list of unions, %T, expect []any", inputElem.Interface()) + return false + } + + switch inputElem.Elem().Kind() { + case reflect.String: + if fd.Kind() == protoreflect.StringKind { + protoListElem.Message().Set(fd, protoreflect.ValueOfString(inputElem.Elem().String())) + newV.List().Append(protoListElem) + return false + } + if fd.Kind() == protoreflect.EnumKind { + v, err := enumValue(fd, inputElem.Interface()) + if err != nil { + retErr = err + return false + } + protoListElem.Message().Set(fd, v) + newV.List().Append(protoListElem) + return false + } + case reflect.Uint64: + if fd.Kind() == protoreflect.Uint64Kind { + protoListElem.Message().Set(fd, protoreflect.ValueOfUint64(inputElem.Elem().Uint())) + newV.List().Append(protoListElem) + return false + } + } + + return true + }) + if retErr != nil { + return protoreflect.ValueOf(nil), retErr + } + } + + fmt.Printf("%d\n", newV.List().Len()) + + return newV, nil +} + // makeSimpleLeafList makes a repeated value of wrapper protobufs for the field fd of the message msg containing // the values in chv. It returns an error if the type is unhandled. func makeSimpleLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor, chv any) (protoreflect.Value, error) { diff --git a/protomap/proto_test.go b/protomap/proto_test.go index aa174de7..2bf76f07 100644 --- a/protomap/proto_test.go +++ b/protomap/proto_test.go @@ -1199,23 +1199,116 @@ func TestProtoFromPaths(t *testing.T) { }, wantErrSubstring: "unhandled leaf-list value", }, { - // TODO(robjs): implement handling for leaf-lists of unions. - desc: "leaf-list - unions - currently unhandled", + desc: "leaf-list - unions - enum and uint", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union-b"): &gpb.TypedValue{ + Value: &gpb.TypedValue_LeaflistVal{ + LeaflistVal: &gpb.ScalarArray{ + Element: []*gpb.TypedValue{{ + Value: &gpb.TypedValue_StringVal{StringVal: "VAL_ONE"}, + }, { + Value: &gpb.TypedValue_UintVal{UintVal: 1}, + }}, + }, + }, + }, + }, + wantProto: &epb.ExampleMessage{ + LeaflistUnionB: []*epb.ExampleUnionUnambiguous{{ + Enum: epb.ExampleEnum_ENUM_VALONE, + }, { + Uint: 1, + }}, + }, + }, { + desc: "leaf-list - unions - uint and string", inProto: &epb.ExampleMessage{}, inVals: map[*gpb.Path]any{ mustPath("/leaflist-union"): &gpb.TypedValue{ Value: &gpb.TypedValue_LeaflistVal{ LeaflistVal: &gpb.ScalarArray{ Element: []*gpb.TypedValue{{ - Value: &gpb.TypedValue_StringVal{StringVal: "hello"}, + Value: &gpb.TypedValue_StringVal{StringVal: "hi mars!"}, }, { - Value: &gpb.TypedValue_IntVal{IntVal: 1}, + Value: &gpb.TypedValue_UintVal{UintVal: 1}, }}, }, }, }, }, - wantErrSubstring: "unhandled leaf-list of unions", + wantProto: &epb.ExampleMessage{ + LeaflistUnion: []*epb.ExampleUnion{{ + Str: "hi mars!", + }, { + Uint: 1, + }}, + }, + }, { + desc: "leaf-list - unions - wrong type of input", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): "fish", + }, + wantErrSubstring: "invalid value", + }, { + desc: "leaf-list - unions - slice of non-typed values", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): &gpb.Notification{}, + }, + wantErrSubstring: "invalid struct type", + }, { + desc: "leaf-list - unions - currently unhandled type", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): &gpb.TypedValue{ + Value: &gpb.TypedValue_LeaflistVal{ + LeaflistVal: &gpb.ScalarArray{ + Element: []*gpb.TypedValue{{ + Value: &gpb.TypedValue_IntVal{IntVal: 42}, + }}, + }, + }, + }, + }, + wantErrSubstring: "unhandled type", + }, { + desc: "leaf-list - unions - slice input", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): []any{"hello", "world", uint64(1)}, + }, + wantProto: &epb.ExampleMessage{ + LeaflistUnion: []*epb.ExampleUnion{{ + Str: "hello", + }, { + Str: "world", + }, { + Uint: 1, + }}, + }, + }, { + desc: "leaf-list - unions - slice input - enum", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union-b"): []any{uint64(1), "VAL_ONE"}, + }, + wantProto: &epb.ExampleMessage{ + LeaflistUnionB: []*epb.ExampleUnionUnambiguous{{ + Uint: 1, + }, { + Enum: epb.ExampleEnum_ENUM_VALONE, + }}, + }, + }, { + // TODO(robjs): support unions within fields directly. + desc: "union", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/union"): "fish", + }, + wantErrSubstring: `did not map path elem:{name:"union"}`, }} for _, tt := range tests { diff --git a/protomap/testdata/exschemapath/exschemapath.pb.go b/protomap/testdata/exschemapath/exschemapath.pb.go index 61582332..b4ceaa32 100644 --- a/protomap/testdata/exschemapath/exschemapath.pb.go +++ b/protomap/testdata/exschemapath/exschemapath.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.21.12 +// protoc-gen-go v1.27.1 +// protoc v3.18.1 // source: exschemapath.proto package exschemapath @@ -295,7 +295,6 @@ type ExampleMessage struct { En ExampleEnum `protobuf:"varint,10,opt,name=en,proto3,enum=exschemapath.ExampleEnum" json:"en,omitempty"` Compress *ywrapper.StringValue `protobuf:"bytes,11,opt,name=compress,proto3" json:"compress,omitempty"` // Types that are assignable to OneofField: - // // *ExampleMessage_OneofOne // *ExampleMessage_OneofTwo OneofField isExampleMessage_OneofField `protobuf_oneof:"oneof_field"` @@ -307,6 +306,9 @@ type ExampleMessage struct { LeaflistDecimal64 []*ywrapper.Decimal64Value `protobuf:"bytes,20,rep,name=leaflist_decimal64,json=leaflistDecimal64,proto3" json:"leaflist_decimal64,omitempty"` LeaflistUnion []*ExampleUnion `protobuf:"bytes,15,rep,name=leaflist_union,json=leaflistUnion,proto3" json:"leaflist_union,omitempty"` Nested *ExampleNestedMessage `protobuf:"bytes,21,opt,name=nested,proto3" json:"nested,omitempty"` + // TODO(robjs): support union fields, this needs a new annotation. + Union *BasicUnion `protobuf:"bytes,22,opt,name=union,proto3" json:"union,omitempty"` + LeaflistUnionB []*ExampleUnionUnambiguous `protobuf:"bytes,23,rep,name=leaflist_union_b,json=leaflistUnionB,proto3" json:"leaflist_union_b,omitempty"` } func (x *ExampleMessage) Reset() { @@ -495,6 +497,20 @@ func (x *ExampleMessage) GetNested() *ExampleNestedMessage { return nil } +func (x *ExampleMessage) GetUnion() *BasicUnion { + if x != nil { + return x.Union + } + return nil +} + +func (x *ExampleMessage) GetLeaflistUnionB() []*ExampleUnionUnambiguous { + if x != nil { + return x.LeaflistUnionB + } + return nil +} + type isExampleMessage_OneofField interface { isExampleMessage_OneofField() } @@ -629,6 +645,53 @@ func (x *ExampleNestedGrandchild) GetTwo() *ywrapper.StringValue { return nil } +type BasicUnion struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Str string `protobuf:"bytes,1,opt,name=str,proto3" json:"str,omitempty"` +} + +func (x *BasicUnion) Reset() { + *x = BasicUnion{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BasicUnion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BasicUnion) ProtoMessage() {} + +func (x *BasicUnion) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_proto_msgTypes[7] + 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 BasicUnion.ProtoReflect.Descriptor instead. +func (*BasicUnion) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{7} +} + +func (x *BasicUnion) GetStr() string { + if x != nil { + return x.Str + } + return "" +} + type ExampleUnion struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -642,7 +705,7 @@ type ExampleUnion struct { func (x *ExampleUnion) Reset() { *x = ExampleUnion{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[7] + mi := &file_exschemapath_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -655,7 +718,7 @@ func (x *ExampleUnion) String() string { func (*ExampleUnion) ProtoMessage() {} func (x *ExampleUnion) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[7] + mi := &file_exschemapath_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -668,7 +731,7 @@ func (x *ExampleUnion) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleUnion.ProtoReflect.Descriptor instead. func (*ExampleUnion) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{7} + return file_exschemapath_proto_rawDescGZIP(), []int{8} } func (x *ExampleUnion) GetStr() string { @@ -692,6 +755,61 @@ func (x *ExampleUnion) GetEnum() ExampleEnum { return ExampleEnum_ENUM_UNSET } +type ExampleUnionUnambiguous struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Uint uint64 `protobuf:"varint,1,opt,name=uint,proto3" json:"uint,omitempty"` + Enum ExampleEnum `protobuf:"varint,2,opt,name=enum,proto3,enum=exschemapath.ExampleEnum" json:"enum,omitempty"` +} + +func (x *ExampleUnionUnambiguous) Reset() { + *x = ExampleUnionUnambiguous{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExampleUnionUnambiguous) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExampleUnionUnambiguous) ProtoMessage() {} + +func (x *ExampleUnionUnambiguous) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_proto_msgTypes[9] + 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 ExampleUnionUnambiguous.ProtoReflect.Descriptor instead. +func (*ExampleUnionUnambiguous) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{9} +} + +func (x *ExampleUnionUnambiguous) GetUint() uint64 { + if x != nil { + return x.Uint + } + return 0 +} + +func (x *ExampleUnionUnambiguous) GetEnum() ExampleEnum { + if x != nil { + return x.Enum + } + return ExampleEnum_ENUM_UNSET +} + type ExampleMessageChild struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -703,7 +821,7 @@ type ExampleMessageChild struct { func (x *ExampleMessageChild) Reset() { *x = ExampleMessageChild{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[8] + mi := &file_exschemapath_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -716,7 +834,7 @@ func (x *ExampleMessageChild) String() string { func (*ExampleMessageChild) ProtoMessage() {} func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[8] + mi := &file_exschemapath_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -729,7 +847,7 @@ func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageChild.ProtoReflect.Descriptor instead. func (*ExampleMessageChild) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{8} + return file_exschemapath_proto_rawDescGZIP(), []int{10} } func (x *ExampleMessageChild) GetStr() *ywrapper.StringValue { @@ -751,7 +869,7 @@ type ExampleMessageKey struct { func (x *ExampleMessageKey) Reset() { *x = ExampleMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[9] + mi := &file_exschemapath_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -764,7 +882,7 @@ func (x *ExampleMessageKey) String() string { func (*ExampleMessageKey) ProtoMessage() {} func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[9] + mi := &file_exschemapath_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -777,7 +895,7 @@ func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageKey.ProtoReflect.Descriptor instead. func (*ExampleMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{9} + return file_exschemapath_proto_rawDescGZIP(), []int{11} } func (x *ExampleMessageKey) GetSingleKey() string { @@ -806,7 +924,7 @@ type ExampleMessageListMember struct { func (x *ExampleMessageListMember) Reset() { *x = ExampleMessageListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[10] + mi := &file_exschemapath_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -819,7 +937,7 @@ func (x *ExampleMessageListMember) String() string { func (*ExampleMessageListMember) ProtoMessage() {} func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[10] + mi := &file_exschemapath_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -832,7 +950,7 @@ func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageListMember.ProtoReflect.Descriptor instead. func (*ExampleMessageListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{10} + return file_exschemapath_proto_rawDescGZIP(), []int{12} } func (x *ExampleMessageListMember) GetStr() *ywrapper.StringValue { @@ -861,7 +979,7 @@ type NestedListKey struct { func (x *NestedListKey) Reset() { *x = NestedListKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[11] + mi := &file_exschemapath_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -874,7 +992,7 @@ func (x *NestedListKey) String() string { func (*NestedListKey) ProtoMessage() {} func (x *NestedListKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[11] + mi := &file_exschemapath_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -887,7 +1005,7 @@ func (x *NestedListKey) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListKey.ProtoReflect.Descriptor instead. func (*NestedListKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{11} + return file_exschemapath_proto_rawDescGZIP(), []int{13} } func (x *NestedListKey) GetKeyOne() string { @@ -915,7 +1033,7 @@ type NestedListMember struct { func (x *NestedListMember) Reset() { *x = NestedListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[12] + mi := &file_exschemapath_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -928,7 +1046,7 @@ func (x *NestedListMember) String() string { func (*NestedListMember) ProtoMessage() {} func (x *NestedListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[12] + mi := &file_exschemapath_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -941,7 +1059,7 @@ func (x *NestedListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListMember.ProtoReflect.Descriptor instead. func (*NestedListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{12} + return file_exschemapath_proto_rawDescGZIP(), []int{14} } func (x *NestedListMember) GetStr() *ywrapper.StringValue { @@ -964,7 +1082,7 @@ type ExampleMessageMultiKey struct { func (x *ExampleMessageMultiKey) Reset() { *x = ExampleMessageMultiKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -977,7 +1095,7 @@ func (x *ExampleMessageMultiKey) String() string { func (*ExampleMessageMultiKey) ProtoMessage() {} func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -990,7 +1108,7 @@ func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageMultiKey.ProtoReflect.Descriptor instead. func (*ExampleMessageMultiKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{13} + return file_exschemapath_proto_rawDescGZIP(), []int{15} } func (x *ExampleMessageMultiKey) GetIndex() uint32 { @@ -1025,7 +1143,7 @@ type MultiKeyListMember struct { func (x *MultiKeyListMember) Reset() { *x = MultiKeyListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1038,7 +1156,7 @@ func (x *MultiKeyListMember) String() string { func (*MultiKeyListMember) ProtoMessage() {} func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1051,7 +1169,7 @@ func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiKeyListMember.ProtoReflect.Descriptor instead. func (*MultiKeyListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{14} + return file_exschemapath_proto_rawDescGZIP(), []int{16} } func (x *MultiKeyListMember) GetChild() *ywrapper.StringValue { @@ -1082,7 +1200,7 @@ type InvalidMessage struct { func (x *InvalidMessage) Reset() { *x = InvalidMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1213,7 @@ func (x *InvalidMessage) String() string { func (*InvalidMessage) ProtoMessage() {} func (x *InvalidMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1226,7 @@ func (x *InvalidMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidMessage.ProtoReflect.Descriptor instead. func (*InvalidMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{15} + return file_exschemapath_proto_rawDescGZIP(), []int{17} } func (x *InvalidMessage) GetMapField() map[string]string { @@ -1199,7 +1317,7 @@ type InvalidAnnotationMessage struct { func (x *InvalidAnnotationMessage) Reset() { *x = InvalidAnnotationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1212,7 +1330,7 @@ func (x *InvalidAnnotationMessage) String() string { func (*InvalidAnnotationMessage) ProtoMessage() {} func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1225,7 +1343,7 @@ func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidAnnotationMessage.ProtoReflect.Descriptor instead. func (*InvalidAnnotationMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{16} + return file_exschemapath_proto_rawDescGZIP(), []int{18} } func (x *InvalidAnnotationMessage) GetNoAnnotation() string { @@ -1246,7 +1364,7 @@ type BadMessageKeyTwo struct { func (x *BadMessageKeyTwo) Reset() { *x = BadMessageKeyTwo{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1259,7 +1377,7 @@ func (x *BadMessageKeyTwo) String() string { func (*BadMessageKeyTwo) ProtoMessage() {} func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1272,7 +1390,7 @@ func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKeyTwo.ProtoReflect.Descriptor instead. func (*BadMessageKeyTwo) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{17} + return file_exschemapath_proto_rawDescGZIP(), []int{19} } func (x *BadMessageKeyTwo) GetKey() string { @@ -1293,7 +1411,7 @@ type BadMessageKey struct { func (x *BadMessageKey) Reset() { *x = BadMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1306,7 +1424,7 @@ func (x *BadMessageKey) String() string { func (*BadMessageKey) ProtoMessage() {} func (x *BadMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1319,7 +1437,7 @@ func (x *BadMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKey.ProtoReflect.Descriptor instead. func (*BadMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{18} + return file_exschemapath_proto_rawDescGZIP(), []int{20} } func (x *BadMessageKey) GetBadKeyType() float32 { @@ -1341,7 +1459,7 @@ type BadMessageMember struct { func (x *BadMessageMember) Reset() { *x = BadMessageMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[19] + mi := &file_exschemapath_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1354,7 +1472,7 @@ func (x *BadMessageMember) String() string { func (*BadMessageMember) ProtoMessage() {} func (x *BadMessageMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[19] + mi := &file_exschemapath_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1367,7 +1485,7 @@ func (x *BadMessageMember) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageMember.ProtoReflect.Descriptor instead. func (*BadMessageMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{19} + return file_exschemapath_proto_rawDescGZIP(), []int{21} } func (x *BadMessageMember) GetKey() string { @@ -1395,7 +1513,7 @@ type BadKeyPathMessage struct { func (x *BadKeyPathMessage) Reset() { *x = BadKeyPathMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[20] + mi := &file_exschemapath_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1408,7 +1526,7 @@ func (x *BadKeyPathMessage) String() string { func (*BadKeyPathMessage) ProtoMessage() {} func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[20] + mi := &file_exschemapath_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1421,7 +1539,7 @@ func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BadKeyPathMessage.ProtoReflect.Descriptor instead. func (*BadKeyPathMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{20} + return file_exschemapath_proto_rawDescGZIP(), []int{22} } func (x *BadKeyPathMessage) GetKey() string { @@ -1442,7 +1560,7 @@ type InvalidKeyPathKey struct { func (x *InvalidKeyPathKey) Reset() { *x = InvalidKeyPathKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[21] + mi := &file_exschemapath_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1455,7 +1573,7 @@ func (x *InvalidKeyPathKey) String() string { func (*InvalidKeyPathKey) ProtoMessage() {} func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[21] + mi := &file_exschemapath_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1468,7 +1586,7 @@ func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidKeyPathKey.ProtoReflect.Descriptor instead. func (*InvalidKeyPathKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{21} + return file_exschemapath_proto_rawDescGZIP(), []int{23} } func (x *InvalidKeyPathKey) GetKey() string { @@ -1490,7 +1608,7 @@ type Root_InterfaceKey struct { func (x *Root_InterfaceKey) Reset() { *x = Root_InterfaceKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[22] + mi := &file_exschemapath_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1503,7 +1621,7 @@ func (x *Root_InterfaceKey) String() string { func (*Root_InterfaceKey) ProtoMessage() {} func (x *Root_InterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[22] + mi := &file_exschemapath_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1545,7 +1663,7 @@ type Interface_SubinterfaceKey struct { func (x *Interface_SubinterfaceKey) Reset() { *x = Interface_SubinterfaceKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[23] + mi := &file_exschemapath_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1558,7 +1676,7 @@ func (x *Interface_SubinterfaceKey) String() string { func (*Interface_SubinterfaceKey) ProtoMessage() {} func (x *Interface_SubinterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[23] + mi := &file_exschemapath_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1664,7 +1782,7 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x81, 0x0b, 0x0a, 0x0e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x6e, 0x22, 0xa6, 0x0c, 0x0a, 0x0e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x02, 0x62, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x52, @@ -1751,31 +1869,44 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, - 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x6f, - 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, - 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, - 0x12, 0x4d, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x25, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, - 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, - 0x97, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6f, - 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x77, - 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, - 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x22, 0x9f, 0x01, 0x0a, 0x0c, 0x45, 0x78, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x39, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, + 0x09, 0x82, 0x41, 0x06, 0x2f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x6f, + 0x6e, 0x12, 0x68, 0x0a, 0x10, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x78, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x6d, 0x62, 0x69, 0x67, 0x75, 0x6f, + 0x75, 0x73, 0x42, 0x17, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, + 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0xe0, 0x49, 0x01, 0x52, 0x0e, 0x6c, 0x65, 0x61, + 0x66, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x14, 0x45, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x37, 0x0a, 0x03, + 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x74, 0x77, 0x6f, + 0x52, 0x03, 0x74, 0x77, 0x6f, 0x12, 0x4d, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, + 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x10, 0x82, 0x41, 0x0d, + 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x12, 0x3d, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, + 0x3d, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x22, 0x29, + 0x0a, 0x0a, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x03, + 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x75, + 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x0c, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, @@ -1785,155 +1916,164 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x4f, 0x0a, 0x13, 0x45, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, 0x82, 0x41, 0x0c, 0x2f, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xa9, 0x01, 0x0a, - 0x11, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, - 0x65, 0x79, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, - 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, - 0x7c, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x09, 0x73, - 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x88, 0x01, 0x0a, 0x17, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x6d, + 0x62, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, + 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0x52, 0x04, 0x75, 0x69, 0x6e, + 0x74, 0x12, 0x43, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, + 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, + 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x4f, 0x0a, 0x13, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x38, 0x0a, + 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x0f, 0x82, 0x41, 0x0c, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x73, + 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, + 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, + 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x7c, 0x2f, 0x6c, 0x69, 0x73, + 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, + 0x4b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, + 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6c, - 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, - 0x2d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, - 0x15, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, - 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, - 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x82, 0x41, 0x1d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, - 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6b, - 0x65, 0x79, 0x2d, 0x6f, 0x6e, 0x65, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x4f, 0x6e, 0x65, 0x12, 0x34, - 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x22, 0x59, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1c, 0x82, 0x41, - 0x19, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, - 0xd8, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, - 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x3f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x82, - 0x41, 0x28, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x38, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x12, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x48, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x68, - 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xb1, 0x06, 0x0a, 0x0e, 0x49, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, - 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, - 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, - 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x14, 0x82, 0x41, - 0x11, 0x2f, 0x61, 0x6e, 0x2f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x3d, 0x0a, 0x02, 0x6b, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, - 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0c, - 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x02, 0x6b, 0x6d, - 0x12, 0x19, 0x0a, 0x02, 0x6b, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, - 0x06, 0x2f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x52, 0x02, 0x6b, 0x65, 0x12, 0x35, 0x0a, 0x02, 0x62, - 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x52, 0x02, - 0x62, 0x6b, 0x12, 0x38, 0x0a, 0x02, 0x62, 0x6d, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x08, - 0x82, 0x41, 0x05, 0x2f, 0x66, 0x69, 0x76, 0x65, 0x52, 0x02, 0x62, 0x6d, 0x12, 0x59, 0x0a, 0x16, - 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, - 0x5d, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x62, 0x6b, 0x5f, 0x74, 0x77, - 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x42, 0x07, 0x82, 0x41, 0x04, 0x2f, 0x73, 0x69, 0x78, - 0x52, 0x05, 0x62, 0x6b, 0x54, 0x77, 0x6f, 0x12, 0x79, 0x0a, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x70, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, - 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x73, 0x69, 0x78, 0x7c, 0x2f, 0x73, 0x65, 0x76, 0x65, - 0x6e, 0x52, 0x1f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, - 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x62, 0x6b, - 0x70, 0x6d, 0x12, 0x3d, 0x0a, 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, - 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, - 0x79, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x6e, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x69, 0x6b, 0x70, - 0x6b, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, - 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, - 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x36, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, - 0x54, 0x77, 0x6f, 0x12, 0x22, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x6f, 0x6e, 0x65, 0x2f, 0x74, - 0x77, 0x6f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x3f, 0x0a, 0x0d, 0x42, 0x61, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x62, 0x61, 0x64, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0c, - 0x82, 0x41, 0x09, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x0a, 0x62, 0x61, - 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x22, 0x58, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6f, - 0x6b, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x08, 0x62, 0x61, - 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x82, 0x41, - 0x08, 0x2f, 0x62, 0x61, 0x64, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x07, 0x62, 0x61, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0x82, 0x41, 0x01, 0x2f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, - 0x33, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, - 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x2a, 0x7e, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x45, - 0x54, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x4f, - 0x4e, 0x45, 0x10, 0x01, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x4f, 0x4e, 0x45, - 0x12, 0x1b, 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x54, 0x57, 0x4f, 0x10, - 0x02, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x54, 0x57, 0x4f, 0x12, 0x25, 0x0a, - 0x10, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, - 0x4f, 0x10, 0x2a, 0x1a, 0x0f, 0x82, 0x41, 0x0c, 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x54, - 0x59, 0x54, 0x57, 0x4f, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, - 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x6d, 0x61, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, - 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, - 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x12, 0x44, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, + 0x61, 0x6d, 0x65, 0x2f, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2d, 0x66, 0x69, 0x65, 0x6c, + 0x64, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, 0x2f, 0x6c, 0x69, 0x73, + 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, + 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, + 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x20, 0x82, 0x41, 0x1d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x2d, 0x6f, 0x6e, + 0x65, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, + 0x59, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1c, 0x82, 0x41, 0x19, 0x2f, 0x6c, 0x69, 0x73, + 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xd8, 0x01, 0x0a, 0x16, 0x45, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, + 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x82, 0x41, 0x28, 0x2f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x7c, 0x2f, 0x6d, + 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x78, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, + 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x05, 0x63, + 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, + 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xb1, 0x06, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x65, 0x78, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, + 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x61, 0x6e, 0x2f, + 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x08, 0x6d, + 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x6e, 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x02, + 0x6b, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, + 0x6e, 0x65, 0x7c, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x19, 0x0a, 0x02, 0x6b, + 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x74, 0x68, 0x72, + 0x65, 0x65, 0x52, 0x02, 0x6b, 0x65, 0x12, 0x35, 0x0a, 0x02, 0x62, 0x6b, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, + 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, + 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x52, 0x02, 0x62, 0x6b, 0x12, 0x38, 0x0a, + 0x02, 0x62, 0x6d, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, + 0x69, 0x76, 0x65, 0x52, 0x02, 0x62, 0x6d, 0x12, 0x59, 0x0a, 0x16, 0x69, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0c, + 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x14, 0x69, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x62, 0x6b, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x08, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, + 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, + 0x77, 0x6f, 0x42, 0x07, 0x82, 0x41, 0x04, 0x2f, 0x73, 0x69, 0x78, 0x52, 0x05, 0x62, 0x6b, 0x54, + 0x77, 0x6f, 0x12, 0x79, 0x0a, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0e, 0x82, 0x41, + 0x0b, 0x2f, 0x73, 0x69, 0x78, 0x7c, 0x2f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x52, 0x1f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x3e, 0x0a, + 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4b, 0x65, + 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x82, 0x41, + 0x06, 0x2f, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x12, 0x3d, 0x0a, + 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, + 0x05, 0x2f, 0x6e, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x1a, 0x3b, 0x0a, 0x0d, + 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x18, 0x49, 0x6e, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x10, 0x42, 0x61, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x12, 0x22, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0x82, 0x41, 0x0d, + 0x2f, 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x6f, 0x6e, 0x65, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x22, 0x3f, 0x0a, 0x0d, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x62, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x66, + 0x6f, 0x75, 0x72, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x0a, 0x62, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x22, 0x58, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6f, 0x6b, 0x2d, 0x6b, 0x65, 0x79, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x08, 0x62, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, 0x62, 0x61, 0x64, + 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x07, 0x62, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, + 0x11, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x04, 0x82, 0x41, 0x01, 0x2f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x33, 0x0a, 0x11, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, + 0x1e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x82, 0x41, + 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x2a, + 0x7e, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0e, + 0x0a, 0x0a, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x1b, + 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x1a, + 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x4f, 0x4e, 0x45, 0x12, 0x1b, 0x0a, 0x0b, 0x45, + 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x1a, 0x0a, 0x82, 0x41, + 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x54, 0x57, 0x4f, 0x12, 0x25, 0x0a, 0x10, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x56, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x10, 0x2a, 0x1a, 0x0f, + 0x82, 0x41, 0x0c, 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x42, + 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x6d, 0x61, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1949,7 +2089,7 @@ func file_exschemapath_proto_rawDescGZIP() []byte { } var file_exschemapath_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 25) +var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 27) var file_exschemapath_proto_goTypes = []interface{}{ (ExampleEnum)(0), // 0: exschemapath.ExampleEnum (*Root)(nil), // 1: exschemapath.Root @@ -1959,87 +2099,92 @@ var file_exschemapath_proto_goTypes = []interface{}{ (*ExampleMessage)(nil), // 5: exschemapath.ExampleMessage (*ExampleNestedMessage)(nil), // 6: exschemapath.ExampleNestedMessage (*ExampleNestedGrandchild)(nil), // 7: exschemapath.ExampleNestedGrandchild - (*ExampleUnion)(nil), // 8: exschemapath.ExampleUnion - (*ExampleMessageChild)(nil), // 9: exschemapath.ExampleMessageChild - (*ExampleMessageKey)(nil), // 10: exschemapath.ExampleMessageKey - (*ExampleMessageListMember)(nil), // 11: exschemapath.ExampleMessageListMember - (*NestedListKey)(nil), // 12: exschemapath.NestedListKey - (*NestedListMember)(nil), // 13: exschemapath.NestedListMember - (*ExampleMessageMultiKey)(nil), // 14: exschemapath.ExampleMessageMultiKey - (*MultiKeyListMember)(nil), // 15: exschemapath.MultiKeyListMember - (*InvalidMessage)(nil), // 16: exschemapath.InvalidMessage - (*InvalidAnnotationMessage)(nil), // 17: exschemapath.InvalidAnnotationMessage - (*BadMessageKeyTwo)(nil), // 18: exschemapath.BadMessageKeyTwo - (*BadMessageKey)(nil), // 19: exschemapath.BadMessageKey - (*BadMessageMember)(nil), // 20: exschemapath.BadMessageMember - (*BadKeyPathMessage)(nil), // 21: exschemapath.BadKeyPathMessage - (*InvalidKeyPathKey)(nil), // 22: exschemapath.InvalidKeyPathKey - (*Root_InterfaceKey)(nil), // 23: exschemapath.Root.InterfaceKey - (*Interface_SubinterfaceKey)(nil), // 24: exschemapath.Interface.SubinterfaceKey - nil, // 25: exschemapath.InvalidMessage.MapFieldEntry - (*ywrapper.StringValue)(nil), // 26: ywrapper.StringValue - (*ywrapper.BoolValue)(nil), // 27: ywrapper.BoolValue - (*ywrapper.BytesValue)(nil), // 28: ywrapper.BytesValue - (*ywrapper.Decimal64Value)(nil), // 29: ywrapper.Decimal64Value - (*ywrapper.IntValue)(nil), // 30: ywrapper.IntValue - (*ywrapper.UintValue)(nil), // 31: ywrapper.UintValue + (*BasicUnion)(nil), // 8: exschemapath.BasicUnion + (*ExampleUnion)(nil), // 9: exschemapath.ExampleUnion + (*ExampleUnionUnambiguous)(nil), // 10: exschemapath.ExampleUnionUnambiguous + (*ExampleMessageChild)(nil), // 11: exschemapath.ExampleMessageChild + (*ExampleMessageKey)(nil), // 12: exschemapath.ExampleMessageKey + (*ExampleMessageListMember)(nil), // 13: exschemapath.ExampleMessageListMember + (*NestedListKey)(nil), // 14: exschemapath.NestedListKey + (*NestedListMember)(nil), // 15: exschemapath.NestedListMember + (*ExampleMessageMultiKey)(nil), // 16: exschemapath.ExampleMessageMultiKey + (*MultiKeyListMember)(nil), // 17: exschemapath.MultiKeyListMember + (*InvalidMessage)(nil), // 18: exschemapath.InvalidMessage + (*InvalidAnnotationMessage)(nil), // 19: exschemapath.InvalidAnnotationMessage + (*BadMessageKeyTwo)(nil), // 20: exschemapath.BadMessageKeyTwo + (*BadMessageKey)(nil), // 21: exschemapath.BadMessageKey + (*BadMessageMember)(nil), // 22: exschemapath.BadMessageMember + (*BadKeyPathMessage)(nil), // 23: exschemapath.BadKeyPathMessage + (*InvalidKeyPathKey)(nil), // 24: exschemapath.InvalidKeyPathKey + (*Root_InterfaceKey)(nil), // 25: exschemapath.Root.InterfaceKey + (*Interface_SubinterfaceKey)(nil), // 26: exschemapath.Interface.SubinterfaceKey + nil, // 27: exschemapath.InvalidMessage.MapFieldEntry + (*ywrapper.StringValue)(nil), // 28: ywrapper.StringValue + (*ywrapper.BoolValue)(nil), // 29: ywrapper.BoolValue + (*ywrapper.BytesValue)(nil), // 30: ywrapper.BytesValue + (*ywrapper.Decimal64Value)(nil), // 31: ywrapper.Decimal64Value + (*ywrapper.IntValue)(nil), // 32: ywrapper.IntValue + (*ywrapper.UintValue)(nil), // 33: ywrapper.UintValue } var file_exschemapath_proto_depIdxs = []int32{ 3, // 0: exschemapath.Root.system:type_name -> exschemapath.System - 23, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey - 26, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue - 24, // 3: exschemapath.Interface.subinterface:type_name -> exschemapath.Interface.SubinterfaceKey - 26, // 4: exschemapath.System.hostname:type_name -> ywrapper.StringValue - 26, // 5: exschemapath.Subinterface.description:type_name -> ywrapper.StringValue - 27, // 6: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue - 28, // 7: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue - 29, // 8: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value - 30, // 9: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue - 26, // 10: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue - 31, // 11: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue - 9, // 12: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild - 10, // 13: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey - 14, // 14: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey + 25, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey + 28, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue + 26, // 3: exschemapath.Interface.subinterface:type_name -> exschemapath.Interface.SubinterfaceKey + 28, // 4: exschemapath.System.hostname:type_name -> ywrapper.StringValue + 28, // 5: exschemapath.Subinterface.description:type_name -> ywrapper.StringValue + 29, // 6: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue + 30, // 7: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue + 31, // 8: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value + 32, // 9: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue + 28, // 10: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue + 33, // 11: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue + 11, // 12: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild + 12, // 13: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey + 16, // 14: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey 0, // 15: exschemapath.ExampleMessage.en:type_name -> exschemapath.ExampleEnum - 26, // 16: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue - 26, // 17: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue - 27, // 18: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue - 30, // 19: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue - 31, // 20: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue - 28, // 21: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue - 29, // 22: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value - 8, // 23: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion + 28, // 16: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue + 28, // 17: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue + 29, // 18: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue + 32, // 19: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue + 33, // 20: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue + 30, // 21: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue + 31, // 22: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value + 9, // 23: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion 6, // 24: exschemapath.ExampleMessage.nested:type_name -> exschemapath.ExampleNestedMessage - 26, // 25: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue - 26, // 26: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue - 7, // 27: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild - 26, // 28: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue - 26, // 29: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue - 0, // 30: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum - 26, // 31: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue - 11, // 32: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember - 26, // 33: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue - 12, // 34: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey - 13, // 35: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember - 26, // 36: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue - 15, // 37: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember - 26, // 38: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue - 25, // 39: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry - 10, // 40: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey - 19, // 41: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey - 20, // 42: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember - 26, // 43: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue - 18, // 44: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo - 16, // 45: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage - 21, // 46: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage - 22, // 47: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey - 2, // 48: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface - 4, // 49: exschemapath.Interface.SubinterfaceKey.subinterface:type_name -> exschemapath.Subinterface - 50, // [50:50] is the sub-list for method output_type - 50, // [50:50] is the sub-list for method input_type - 50, // [50:50] is the sub-list for extension type_name - 50, // [50:50] is the sub-list for extension extendee - 0, // [0:50] is the sub-list for field type_name + 8, // 25: exschemapath.ExampleMessage.union:type_name -> exschemapath.BasicUnion + 10, // 26: exschemapath.ExampleMessage.leaflist_union_b:type_name -> exschemapath.ExampleUnionUnambiguous + 28, // 27: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue + 28, // 28: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue + 7, // 29: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild + 28, // 30: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue + 28, // 31: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue + 0, // 32: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum + 0, // 33: exschemapath.ExampleUnionUnambiguous.enum:type_name -> exschemapath.ExampleEnum + 28, // 34: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue + 13, // 35: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember + 28, // 36: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue + 14, // 37: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey + 15, // 38: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember + 28, // 39: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue + 17, // 40: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember + 28, // 41: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue + 27, // 42: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry + 12, // 43: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey + 21, // 44: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey + 22, // 45: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember + 28, // 46: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue + 20, // 47: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo + 18, // 48: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage + 23, // 49: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage + 24, // 50: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey + 2, // 51: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface + 4, // 52: exschemapath.Interface.SubinterfaceKey.subinterface:type_name -> exschemapath.Subinterface + 53, // [53:53] is the sub-list for method output_type + 53, // [53:53] is the sub-list for method input_type + 53, // [53:53] is the sub-list for extension type_name + 53, // [53:53] is the sub-list for extension extendee + 0, // [0:53] is the sub-list for field type_name } func init() { file_exschemapath_proto_init() } @@ -2133,7 +2278,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleUnion); i { + switch v := v.(*BasicUnion); i { case 0: return &v.state case 1: @@ -2145,7 +2290,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageChild); i { + switch v := v.(*ExampleUnion); i { case 0: return &v.state case 1: @@ -2157,7 +2302,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageKey); i { + switch v := v.(*ExampleUnionUnambiguous); i { case 0: return &v.state case 1: @@ -2169,7 +2314,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageListMember); i { + switch v := v.(*ExampleMessageChild); i { case 0: return &v.state case 1: @@ -2181,7 +2326,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListKey); i { + switch v := v.(*ExampleMessageKey); i { case 0: return &v.state case 1: @@ -2193,7 +2338,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListMember); i { + switch v := v.(*ExampleMessageListMember); i { case 0: return &v.state case 1: @@ -2205,7 +2350,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageMultiKey); i { + switch v := v.(*NestedListKey); i { case 0: return &v.state case 1: @@ -2217,7 +2362,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiKeyListMember); i { + switch v := v.(*NestedListMember); i { case 0: return &v.state case 1: @@ -2229,7 +2374,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidMessage); i { + switch v := v.(*ExampleMessageMultiKey); i { case 0: return &v.state case 1: @@ -2241,7 +2386,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidAnnotationMessage); i { + switch v := v.(*MultiKeyListMember); i { case 0: return &v.state case 1: @@ -2253,7 +2398,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKeyTwo); i { + switch v := v.(*InvalidMessage); i { case 0: return &v.state case 1: @@ -2265,7 +2410,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKey); i { + switch v := v.(*InvalidAnnotationMessage); i { case 0: return &v.state case 1: @@ -2277,7 +2422,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageMember); i { + switch v := v.(*BadMessageKeyTwo); i { case 0: return &v.state case 1: @@ -2289,7 +2434,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadKeyPathMessage); i { + switch v := v.(*BadMessageKey); i { case 0: return &v.state case 1: @@ -2301,7 +2446,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidKeyPathKey); i { + switch v := v.(*BadMessageMember); i { case 0: return &v.state case 1: @@ -2313,7 +2458,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Root_InterfaceKey); i { + switch v := v.(*BadKeyPathMessage); i { case 0: return &v.state case 1: @@ -2325,6 +2470,30 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InvalidKeyPathKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_exschemapath_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Root_InterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_exschemapath_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Interface_SubinterfaceKey); i { case 0: return &v.state @@ -2347,7 +2516,7 @@ func file_exschemapath_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_exschemapath_proto_rawDesc, NumEnums: 1, - NumMessages: 25, + NumMessages: 27, NumExtensions: 0, NumServices: 0, }, diff --git a/protomap/testdata/exschemapath/exschemapath.proto b/protomap/testdata/exschemapath/exschemapath.proto index 3a2e60fa..70237a6a 100644 --- a/protomap/testdata/exschemapath/exschemapath.proto +++ b/protomap/testdata/exschemapath/exschemapath.proto @@ -57,6 +57,9 @@ message ExampleMessage { repeated ywrapper.Decimal64Value leaflist_decimal64 = 20 [(yext.schemapath) = "/leaflist-decimal64", (yext.leaflist) = true]; repeated ExampleUnion leaflist_union = 15 [(yext.schemapath) = "/leaflist-union", (yext.leaflistunion) = true]; ExampleNestedMessage nested = 21 [(yext.schemapath) = "/nested"]; + // TODO(robjs): support union fields, this needs a new annotation. + BasicUnion union = 22 [(yext.schemapath) = "/union"]; + repeated ExampleUnionUnambiguous leaflist_union_b = 23 [(yext.schemapath) = "/leaflist-union-b", (yext.leaflistunion) = true]; } message ExampleNestedMessage { @@ -70,6 +73,9 @@ message ExampleNestedGrandchild { ywrapper.StringValue two = 2 [(yext.schemapath) = "/nested/child/two"]; } +message BasicUnion { + string str = 1 [(yext.schemapath) = "/union"]; +} message ExampleUnion { string str = 1 [(yext.schemapath) = "/leaflist-union"]; @@ -77,6 +83,11 @@ message ExampleUnion { ExampleEnum enum = 3 [(yext.schemapath) = "/leaflist-union"]; } +message ExampleUnionUnambiguous { + uint64 uint = 1 [(yext.schemapath) = "/leaflist-union-b"]; + ExampleEnum enum = 2 [(yext.schemapath) = "/leaflist-union-b"]; +} + enum ExampleEnum { ENUM_UNSET = 0; ENUM_VALONE = 1 [(yext.yang_name) = "VAL_ONE"]; From 737fc47bfcc7b7bf3a22110aa754ccc4da8c037d Mon Sep 17 00:00:00 2001 From: Rob Shakir Date: Sat, 4 Nov 2023 15:51:59 -0700 Subject: [PATCH 2/4] Add outdated file. --- protomap/proto.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protomap/proto.go b/protomap/proto.go index a7fb22c8..3c4f2cbf 100644 --- a/protomap/proto.go +++ b/protomap/proto.go @@ -1049,6 +1049,8 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor } default: // TODO(robjs): implement type handling for other TypedValues. + retErr = fmt.Errorf("unhandled type %T in leaf-list of unions", ee) + return false } return true }) From 3ff6621e6f61e034bf36bdbe7257e888312385ea Mon Sep 17 00:00:00 2001 From: Rob Shakir Date: Sat, 4 Nov 2023 15:53:20 -0700 Subject: [PATCH 3/4] Remove stale output. --- protomap/proto.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/protomap/proto.go b/protomap/proto.go index 3c4f2cbf..d1d8f4a1 100644 --- a/protomap/proto.go +++ b/protomap/proto.go @@ -1064,7 +1064,7 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor for i := 0; i < inputVal.Len(); i++ { protoListElem := newV.List().NewElement() inputElem := inputVal.Index(i) - fmt.Printf("running loop with %v\n", inputElem.Elem()) + unpopRange{protoListElem.Message()}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { if inputElem.Kind() != reflect.Interface { retErr = fmt.Errorf("invalid input type for leaf-list of unions, %T, expect []any", inputElem.Interface()) @@ -1103,8 +1103,6 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor } } - fmt.Printf("%d\n", newV.List().Len()) - return newV, nil } From 627e0d47f1169bfe11a3f5b7c48e9151c8418aba Mon Sep 17 00:00:00 2001 From: Rob Shakir Date: Mon, 6 Nov 2023 17:59:31 -0800 Subject: [PATCH 4/4] Improve test coverage - add handling for bool. --- protomap/proto.go | 44 +- protomap/proto_test.go | 69 ++ .../testdata/exschemapath/exschemapath.pb.go | 763 ++++++++++-------- .../testdata/exschemapath/exschemapath.proto | 6 + 4 files changed, 541 insertions(+), 341 deletions(-) diff --git a/protomap/proto.go b/protomap/proto.go index d1d8f4a1..170f40dd 100644 --- a/protomap/proto.go +++ b/protomap/proto.go @@ -1022,13 +1022,17 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor for _, inputVal := range tv.GetLeaflistVal().GetElement() { protoListElem := newV.List().NewElement() - var retErr error + var ( + retErr error + handled bool + ) unpopRange{protoListElem.Message()}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { switch ee := inputVal.GetValue().(type) { case *gpb.TypedValue_StringVal: if fd.Kind() == protoreflect.StringKind { protoListElem.Message().Set(fd, protoreflect.ValueOfString(ee.StringVal)) newV.List().Append(protoListElem) + handled = true return false } if fd.Kind() == protoreflect.EnumKind { @@ -1039,12 +1043,21 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor } protoListElem.Message().Set(fd, ev) newV.List().Append(protoListElem) + handled = true return false } case *gpb.TypedValue_UintVal: if fd.Kind() == protoreflect.Uint64Kind { protoListElem.Message().Set(fd, protoreflect.ValueOfUint64(ee.UintVal)) newV.List().Append(protoListElem) + handled = true + return false + } + case *gpb.TypedValue_BoolVal: + if fd.Kind() == protoreflect.BoolKind { + protoListElem.Message().Set(fd, protoreflect.ValueOfBool(ee.BoolVal)) + newV.List().Append(protoListElem) + handled = true return false } default: @@ -1057,13 +1070,20 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor if retErr != nil { return protoreflect.ValueOf(nil), retErr } + if !handled { + return protoreflect.ValueOf(nil), fmt.Errorf("invalid type %T for value %v in union", inputVal.GetValue(), inputVal) + } } return newV, nil } - var retErr error + for i := 0; i < inputVal.Len(); i++ { protoListElem := newV.List().NewElement() inputElem := inputVal.Index(i) + var ( + retErr error + handled bool + ) unpopRange{protoListElem.Message()}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { if inputElem.Kind() != reflect.Interface { @@ -1076,6 +1096,7 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor if fd.Kind() == protoreflect.StringKind { protoListElem.Message().Set(fd, protoreflect.ValueOfString(inputElem.Elem().String())) newV.List().Append(protoListElem) + handled = true return false } if fd.Kind() == protoreflect.EnumKind { @@ -1086,14 +1107,26 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor } protoListElem.Message().Set(fd, v) newV.List().Append(protoListElem) + handled = true return false } case reflect.Uint64: if fd.Kind() == protoreflect.Uint64Kind { protoListElem.Message().Set(fd, protoreflect.ValueOfUint64(inputElem.Elem().Uint())) newV.List().Append(protoListElem) + handled = true return false } + case reflect.Bool: + if fd.Kind() == protoreflect.BoolKind { + protoListElem.Message().Set(fd, protoreflect.ValueOfBool(inputElem.Elem().Bool())) + newV.List().Append(protoListElem) + handled = true + return false + } + default: + retErr = fmt.Errorf("unhandled type %T for union", inputElem.Interface()) + return false } return true @@ -1101,6 +1134,9 @@ func makeUnionLeafList(msg protoreflect.Message, fd protoreflect.FieldDescriptor if retErr != nil { return protoreflect.ValueOf(nil), retErr } + if !handled { + return protoreflect.ValueOf(nil), fmt.Errorf("invalid type %T for value %v in union", inputElem.Interface(), inputElem.Interface()) + } } return newV, nil @@ -1205,9 +1241,9 @@ func makeSimpleLeafList(msg protoreflect.Message, fd protoreflect.FieldDescripto return protoreflect.ValueOf(nil), fmt.Errorf("invalid type %T (value: %v) for repeated byte field", lv, lv) } return newV, nil + default: + return protoreflect.ValueOf(nil), fmt.Errorf("unhandled leaf-list value, %v", chv) } - - return protoreflect.ValueOf(nil), fmt.Errorf("unhandled leaf-list value, %v", chv) } // enumValue returns the concrete implementation of the enumeration with the yang_name annotation set diff --git a/protomap/proto_test.go b/protomap/proto_test.go index 2bf76f07..13e581ea 100644 --- a/protomap/proto_test.go +++ b/protomap/proto_test.go @@ -1244,6 +1244,25 @@ func TestProtoFromPaths(t *testing.T) { Uint: 1, }}, }, + }, { + desc: "leaf-list - unions - mix of invalid and valid types", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): &gpb.TypedValue{ + Value: &gpb.TypedValue_LeaflistVal{ + LeaflistVal: &gpb.ScalarArray{ + Element: []*gpb.TypedValue{{ + Value: &gpb.TypedValue_StringVal{StringVal: "hi mars!"}, + }, { + Value: &gpb.TypedValue_UintVal{UintVal: 1}, + }, { + Value: &gpb.TypedValue_BoolVal{BoolVal: true}, + }}, + }, + }, + }, + }, + wantErrSubstring: "invalid type *gnmi.TypedValue_BoolVal", }, { desc: "leaf-list - unions - wrong type of input", inProto: &epb.ExampleMessage{}, @@ -1288,6 +1307,20 @@ func TestProtoFromPaths(t *testing.T) { Uint: 1, }}, }, + }, { + desc: "leaf-list - unions - mix of valid and unhandled types", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): []any{"hello", "world", uint64(1), float64(1.0)}, + }, + wantErrSubstring: "unhandled type float64", + }, { + desc: "leaf-list - unions - mix of valid and invalid types", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union"): []any{"hello", "world", uint64(1), true}, + }, + wantErrSubstring: "invalid type bool for value true", }, { desc: "leaf-list - unions - slice input - enum", inProto: &epb.ExampleMessage{}, @@ -1301,6 +1334,42 @@ func TestProtoFromPaths(t *testing.T) { Enum: epb.ExampleEnum_ENUM_VALONE, }}, }, + }, { + desc: "leaf-list unions with bool in - slice", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union-c"): []any{true, false}, + }, + wantProto: &epb.ExampleMessage{ + LeaflistUnionC: []*epb.ExampleUnionTwo{{ + B: true, + }, { + B: false, + }}, + }, + }, { + desc: "leaf-list unions with bool in - typed value", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/leaflist-union-c"): &gpb.TypedValue{ + Value: &gpb.TypedValue_LeaflistVal{ + LeaflistVal: &gpb.ScalarArray{ + Element: []*gpb.TypedValue{{ + Value: &gpb.TypedValue_BoolVal{BoolVal: true}, + }, { + Value: &gpb.TypedValue_BoolVal{BoolVal: false}, + }}, + }, + }, + }, + }, + wantProto: &epb.ExampleMessage{ + LeaflistUnionC: []*epb.ExampleUnionTwo{{ + B: true, + }, { + B: false, + }}, + }, }, { // TODO(robjs): support unions within fields directly. desc: "union", diff --git a/protomap/testdata/exschemapath/exschemapath.pb.go b/protomap/testdata/exschemapath/exschemapath.pb.go index b4ceaa32..f7672286 100644 --- a/protomap/testdata/exschemapath/exschemapath.pb.go +++ b/protomap/testdata/exschemapath/exschemapath.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.18.1 +// protoc v3.21.9 // source: exschemapath.proto package exschemapath @@ -309,6 +309,7 @@ type ExampleMessage struct { // TODO(robjs): support union fields, this needs a new annotation. Union *BasicUnion `protobuf:"bytes,22,opt,name=union,proto3" json:"union,omitempty"` LeaflistUnionB []*ExampleUnionUnambiguous `protobuf:"bytes,23,rep,name=leaflist_union_b,json=leaflistUnionB,proto3" json:"leaflist_union_b,omitempty"` + LeaflistUnionC []*ExampleUnionTwo `protobuf:"bytes,24,rep,name=leaflist_union_c,json=leaflistUnionC,proto3" json:"leaflist_union_c,omitempty"` } func (x *ExampleMessage) Reset() { @@ -511,6 +512,13 @@ func (x *ExampleMessage) GetLeaflistUnionB() []*ExampleUnionUnambiguous { return nil } +func (x *ExampleMessage) GetLeaflistUnionC() []*ExampleUnionTwo { + if x != nil { + return x.LeaflistUnionC + } + return nil +} + type isExampleMessage_OneofField interface { isExampleMessage_OneofField() } @@ -755,6 +763,61 @@ func (x *ExampleUnion) GetEnum() ExampleEnum { return ExampleEnum_ENUM_UNSET } +type ExampleUnionTwo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + B bool `protobuf:"varint,1,opt,name=b,proto3" json:"b,omitempty"` + F float32 `protobuf:"fixed32,2,opt,name=f,proto3" json:"f,omitempty"` +} + +func (x *ExampleUnionTwo) Reset() { + *x = ExampleUnionTwo{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExampleUnionTwo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExampleUnionTwo) ProtoMessage() {} + +func (x *ExampleUnionTwo) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_proto_msgTypes[9] + 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 ExampleUnionTwo.ProtoReflect.Descriptor instead. +func (*ExampleUnionTwo) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{9} +} + +func (x *ExampleUnionTwo) GetB() bool { + if x != nil { + return x.B + } + return false +} + +func (x *ExampleUnionTwo) GetF() float32 { + if x != nil { + return x.F + } + return 0 +} + type ExampleUnionUnambiguous struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -767,7 +830,7 @@ type ExampleUnionUnambiguous struct { func (x *ExampleUnionUnambiguous) Reset() { *x = ExampleUnionUnambiguous{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[9] + mi := &file_exschemapath_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -780,7 +843,7 @@ func (x *ExampleUnionUnambiguous) String() string { func (*ExampleUnionUnambiguous) ProtoMessage() {} func (x *ExampleUnionUnambiguous) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[9] + mi := &file_exschemapath_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -793,7 +856,7 @@ func (x *ExampleUnionUnambiguous) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleUnionUnambiguous.ProtoReflect.Descriptor instead. func (*ExampleUnionUnambiguous) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{9} + return file_exschemapath_proto_rawDescGZIP(), []int{10} } func (x *ExampleUnionUnambiguous) GetUint() uint64 { @@ -821,7 +884,7 @@ type ExampleMessageChild struct { func (x *ExampleMessageChild) Reset() { *x = ExampleMessageChild{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[10] + mi := &file_exschemapath_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -834,7 +897,7 @@ func (x *ExampleMessageChild) String() string { func (*ExampleMessageChild) ProtoMessage() {} func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[10] + mi := &file_exschemapath_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -847,7 +910,7 @@ func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageChild.ProtoReflect.Descriptor instead. func (*ExampleMessageChild) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{10} + return file_exschemapath_proto_rawDescGZIP(), []int{11} } func (x *ExampleMessageChild) GetStr() *ywrapper.StringValue { @@ -869,7 +932,7 @@ type ExampleMessageKey struct { func (x *ExampleMessageKey) Reset() { *x = ExampleMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[11] + mi := &file_exschemapath_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -882,7 +945,7 @@ func (x *ExampleMessageKey) String() string { func (*ExampleMessageKey) ProtoMessage() {} func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[11] + mi := &file_exschemapath_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -895,7 +958,7 @@ func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageKey.ProtoReflect.Descriptor instead. func (*ExampleMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{11} + return file_exschemapath_proto_rawDescGZIP(), []int{12} } func (x *ExampleMessageKey) GetSingleKey() string { @@ -924,7 +987,7 @@ type ExampleMessageListMember struct { func (x *ExampleMessageListMember) Reset() { *x = ExampleMessageListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[12] + mi := &file_exschemapath_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -937,7 +1000,7 @@ func (x *ExampleMessageListMember) String() string { func (*ExampleMessageListMember) ProtoMessage() {} func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[12] + mi := &file_exschemapath_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -950,7 +1013,7 @@ func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageListMember.ProtoReflect.Descriptor instead. func (*ExampleMessageListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{12} + return file_exschemapath_proto_rawDescGZIP(), []int{13} } func (x *ExampleMessageListMember) GetStr() *ywrapper.StringValue { @@ -979,7 +1042,7 @@ type NestedListKey struct { func (x *NestedListKey) Reset() { *x = NestedListKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -992,7 +1055,7 @@ func (x *NestedListKey) String() string { func (*NestedListKey) ProtoMessage() {} func (x *NestedListKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,7 +1068,7 @@ func (x *NestedListKey) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListKey.ProtoReflect.Descriptor instead. func (*NestedListKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{13} + return file_exschemapath_proto_rawDescGZIP(), []int{14} } func (x *NestedListKey) GetKeyOne() string { @@ -1033,7 +1096,7 @@ type NestedListMember struct { func (x *NestedListMember) Reset() { *x = NestedListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1046,7 +1109,7 @@ func (x *NestedListMember) String() string { func (*NestedListMember) ProtoMessage() {} func (x *NestedListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1059,7 +1122,7 @@ func (x *NestedListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListMember.ProtoReflect.Descriptor instead. func (*NestedListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{14} + return file_exschemapath_proto_rawDescGZIP(), []int{15} } func (x *NestedListMember) GetStr() *ywrapper.StringValue { @@ -1082,7 +1145,7 @@ type ExampleMessageMultiKey struct { func (x *ExampleMessageMultiKey) Reset() { *x = ExampleMessageMultiKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1158,7 @@ func (x *ExampleMessageMultiKey) String() string { func (*ExampleMessageMultiKey) ProtoMessage() {} func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1171,7 @@ func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageMultiKey.ProtoReflect.Descriptor instead. func (*ExampleMessageMultiKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{15} + return file_exschemapath_proto_rawDescGZIP(), []int{16} } func (x *ExampleMessageMultiKey) GetIndex() uint32 { @@ -1143,7 +1206,7 @@ type MultiKeyListMember struct { func (x *MultiKeyListMember) Reset() { *x = MultiKeyListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1156,7 +1219,7 @@ func (x *MultiKeyListMember) String() string { func (*MultiKeyListMember) ProtoMessage() {} func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1169,7 +1232,7 @@ func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiKeyListMember.ProtoReflect.Descriptor instead. func (*MultiKeyListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{16} + return file_exschemapath_proto_rawDescGZIP(), []int{17} } func (x *MultiKeyListMember) GetChild() *ywrapper.StringValue { @@ -1200,7 +1263,7 @@ type InvalidMessage struct { func (x *InvalidMessage) Reset() { *x = InvalidMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1213,7 +1276,7 @@ func (x *InvalidMessage) String() string { func (*InvalidMessage) ProtoMessage() {} func (x *InvalidMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1226,7 +1289,7 @@ func (x *InvalidMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidMessage.ProtoReflect.Descriptor instead. func (*InvalidMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{17} + return file_exschemapath_proto_rawDescGZIP(), []int{18} } func (x *InvalidMessage) GetMapField() map[string]string { @@ -1317,7 +1380,7 @@ type InvalidAnnotationMessage struct { func (x *InvalidAnnotationMessage) Reset() { *x = InvalidAnnotationMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1330,7 +1393,7 @@ func (x *InvalidAnnotationMessage) String() string { func (*InvalidAnnotationMessage) ProtoMessage() {} func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1343,7 +1406,7 @@ func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidAnnotationMessage.ProtoReflect.Descriptor instead. func (*InvalidAnnotationMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{18} + return file_exschemapath_proto_rawDescGZIP(), []int{19} } func (x *InvalidAnnotationMessage) GetNoAnnotation() string { @@ -1364,7 +1427,7 @@ type BadMessageKeyTwo struct { func (x *BadMessageKeyTwo) Reset() { *x = BadMessageKeyTwo{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[19] + mi := &file_exschemapath_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1377,7 +1440,7 @@ func (x *BadMessageKeyTwo) String() string { func (*BadMessageKeyTwo) ProtoMessage() {} func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[19] + mi := &file_exschemapath_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1390,7 +1453,7 @@ func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKeyTwo.ProtoReflect.Descriptor instead. func (*BadMessageKeyTwo) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{19} + return file_exschemapath_proto_rawDescGZIP(), []int{20} } func (x *BadMessageKeyTwo) GetKey() string { @@ -1411,7 +1474,7 @@ type BadMessageKey struct { func (x *BadMessageKey) Reset() { *x = BadMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[20] + mi := &file_exschemapath_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1424,7 +1487,7 @@ func (x *BadMessageKey) String() string { func (*BadMessageKey) ProtoMessage() {} func (x *BadMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[20] + mi := &file_exschemapath_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1437,7 +1500,7 @@ func (x *BadMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKey.ProtoReflect.Descriptor instead. func (*BadMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{20} + return file_exschemapath_proto_rawDescGZIP(), []int{21} } func (x *BadMessageKey) GetBadKeyType() float32 { @@ -1459,7 +1522,7 @@ type BadMessageMember struct { func (x *BadMessageMember) Reset() { *x = BadMessageMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[21] + mi := &file_exschemapath_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1472,7 +1535,7 @@ func (x *BadMessageMember) String() string { func (*BadMessageMember) ProtoMessage() {} func (x *BadMessageMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[21] + mi := &file_exschemapath_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1485,7 +1548,7 @@ func (x *BadMessageMember) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageMember.ProtoReflect.Descriptor instead. func (*BadMessageMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{21} + return file_exschemapath_proto_rawDescGZIP(), []int{22} } func (x *BadMessageMember) GetKey() string { @@ -1513,7 +1576,7 @@ type BadKeyPathMessage struct { func (x *BadKeyPathMessage) Reset() { *x = BadKeyPathMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[22] + mi := &file_exschemapath_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1526,7 +1589,7 @@ func (x *BadKeyPathMessage) String() string { func (*BadKeyPathMessage) ProtoMessage() {} func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[22] + mi := &file_exschemapath_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1539,7 +1602,7 @@ func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BadKeyPathMessage.ProtoReflect.Descriptor instead. func (*BadKeyPathMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{22} + return file_exschemapath_proto_rawDescGZIP(), []int{23} } func (x *BadKeyPathMessage) GetKey() string { @@ -1560,7 +1623,7 @@ type InvalidKeyPathKey struct { func (x *InvalidKeyPathKey) Reset() { *x = InvalidKeyPathKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[23] + mi := &file_exschemapath_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1573,7 +1636,7 @@ func (x *InvalidKeyPathKey) String() string { func (*InvalidKeyPathKey) ProtoMessage() {} func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[23] + mi := &file_exschemapath_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1586,7 +1649,7 @@ func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidKeyPathKey.ProtoReflect.Descriptor instead. func (*InvalidKeyPathKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{23} + return file_exschemapath_proto_rawDescGZIP(), []int{24} } func (x *InvalidKeyPathKey) GetKey() string { @@ -1608,7 +1671,7 @@ type Root_InterfaceKey struct { func (x *Root_InterfaceKey) Reset() { *x = Root_InterfaceKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[24] + mi := &file_exschemapath_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1621,7 +1684,7 @@ func (x *Root_InterfaceKey) String() string { func (*Root_InterfaceKey) ProtoMessage() {} func (x *Root_InterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[24] + mi := &file_exschemapath_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1663,7 +1726,7 @@ type Interface_SubinterfaceKey struct { func (x *Interface_SubinterfaceKey) Reset() { *x = Interface_SubinterfaceKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[25] + mi := &file_exschemapath_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1676,7 +1739,7 @@ func (x *Interface_SubinterfaceKey) String() string { func (*Interface_SubinterfaceKey) ProtoMessage() {} func (x *Interface_SubinterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[25] + mi := &file_exschemapath_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1782,7 +1845,7 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x61, 0x63, 0x65, 0x73, 0x2f, 0x73, 0x75, 0x62, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0xa6, 0x0c, 0x0a, 0x0e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, + 0x6e, 0x22, 0x88, 0x0d, 0x0a, 0x0e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x02, 0x62, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x62, 0x6f, 0x6f, 0x6c, 0x52, @@ -1879,201 +1942,213 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x6d, 0x62, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x42, 0x17, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0xe0, 0x49, 0x01, 0x52, 0x0e, 0x6c, 0x65, 0x61, - 0x66, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, - 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xd7, 0x01, 0x0a, 0x14, 0x45, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, - 0x74, 0x65, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x37, 0x0a, 0x03, - 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x74, 0x77, 0x6f, - 0x52, 0x03, 0x74, 0x77, 0x6f, 0x12, 0x4d, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, - 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x10, 0x82, 0x41, 0x0d, - 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x12, 0x3d, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, - 0x3d, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x22, 0x29, - 0x0a, 0x0a, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x03, - 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x75, - 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x0c, 0x45, 0x78, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x03, 0x73, 0x74, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, - 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, - 0x12, 0x26, 0x0a, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x42, 0x12, - 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, - 0x6f, 0x6e, 0x52, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, - 0x6d, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, - 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x88, 0x01, 0x0a, 0x17, - 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x6d, - 0x62, 0x69, 0x67, 0x75, 0x6f, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, - 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0x52, 0x04, 0x75, 0x69, 0x6e, - 0x74, 0x12, 0x43, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, - 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, - 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x4f, 0x0a, 0x13, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x38, 0x0a, + 0x66, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x60, 0x0a, 0x10, 0x6c, + 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x18, + 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, + 0x6e, 0x54, 0x77, 0x6f, 0x42, 0x17, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, + 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x63, 0xe0, 0x49, 0x01, 0x52, 0x0e, 0x6c, + 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x43, 0x42, 0x0d, 0x0a, + 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0xd7, 0x01, 0x0a, + 0x14, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, 0x65, 0x12, 0x37, + 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x74, + 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, 0x12, 0x4d, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4e, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x42, 0x10, 0x82, + 0x41, 0x0d, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, + 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x6e, 0x64, 0x63, 0x68, 0x69, + 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x03, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x6f, 0x6e, 0x65, 0x52, 0x03, 0x6f, 0x6e, + 0x65, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x77, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x74, 0x77, 0x6f, + 0x22, 0x29, 0x0a, 0x0a, 0x42, 0x61, 0x73, 0x69, 0x63, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x1b, + 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, + 0x2f, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x0c, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x03, + 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, + 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x73, + 0x74, 0x72, 0x12, 0x26, 0x0a, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, + 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x65, 0x6e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x42, 0x12, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, + 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x22, 0x59, 0x0a, + 0x0f, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x54, 0x77, 0x6f, + 0x12, 0x22, 0x0a, 0x01, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x14, 0x82, 0x41, 0x11, + 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, + 0x63, 0x52, 0x01, 0x62, 0x12, 0x22, 0x0a, 0x01, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x42, + 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, + 0x69, 0x6f, 0x6e, 0x2d, 0x63, 0x52, 0x01, 0x66, 0x22, 0x88, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x55, 0x6e, 0x61, 0x6d, 0x62, 0x69, 0x67, + 0x75, 0x6f, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, + 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0x52, 0x04, 0x75, 0x69, 0x6e, 0x74, 0x12, 0x43, + 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x65, + 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x6c, 0x65, 0x61, + 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x2d, 0x62, 0x52, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x22, 0x4f, 0x0a, 0x13, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x73, 0x74, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, + 0x82, 0x41, 0x0c, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x52, + 0x03, 0x73, 0x74, 0x72, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x0a, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, + 0x82, 0x41, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x73, 0x69, + 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x7c, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, + 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, + 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4b, 0x65, 0x79, + 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x0f, 0x82, 0x41, 0x0c, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2f, 0x73, - 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x45, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x54, 0x0a, - 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x35, 0x82, 0x41, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, - 0x2f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x7c, 0x2f, 0x6c, 0x69, 0x73, - 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x69, - 0x6e, 0x67, 0x6c, 0x65, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, - 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x44, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, + 0x2f, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2d, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x03, + 0x73, 0x74, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x6c, 0x69, 0x73, + 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, + 0x74, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, + 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x52, 0x09, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x0d, 0x4e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x07, 0x6b, + 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x82, 0x41, + 0x1d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x2d, 0x6f, 0x6e, 0x65, 0x52, 0x06, + 0x6b, 0x65, 0x79, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, 0x59, 0x0a, 0x10, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x45, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, - 0x61, 0x6d, 0x65, 0x2f, 0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x2d, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x52, 0x03, 0x73, 0x74, 0x72, 0x12, 0x54, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, - 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x42, 0x18, 0x82, 0x41, 0x15, 0x2f, 0x6c, 0x69, 0x73, - 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x80, 0x01, 0x0a, - 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, - 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x20, 0x82, 0x41, 0x1d, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x2d, 0x6f, 0x6e, - 0x65, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x4f, 0x6e, 0x65, 0x12, 0x34, 0x0a, 0x05, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x22, - 0x59, 0x0a, 0x10, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x03, 0x73, 0x74, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1c, 0x82, 0x41, 0x19, 0x2f, 0x6c, 0x69, 0x73, - 0x74, 0x2d, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x2f, 0x73, 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xd8, 0x01, 0x0a, 0x16, 0x45, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, - 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x82, 0x41, 0x28, 0x2f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x7c, 0x2f, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x78, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x4b, 0x65, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, - 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x05, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x1b, 0x82, 0x41, 0x18, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, - 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x22, 0xb1, 0x06, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x65, 0x78, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1c, 0x82, 0x41, 0x19, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x6e, + 0x61, 0x6d, 0x65, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x73, + 0x74, 0x72, 0x52, 0x03, 0x73, 0x74, 0x72, 0x22, 0xd8, 0x01, 0x0a, 0x16, 0x45, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, + 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x42, 0x2d, 0x82, 0x41, 0x2a, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, + 0x74, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, + 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x3f, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0x82, 0x41, 0x28, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x7c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6e, 0x61, + 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x12, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x4b, 0x65, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1b, + 0x82, 0x41, 0x18, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x2d, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x63, 0x68, 0x69, + 0x6c, 0x64, 0x22, 0xb1, 0x06, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x66, 0x69, 0x65, + 0x6c, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x61, 0x6e, 0x2f, 0x69, 0x6e, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x46, + 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x02, 0x6b, 0x6d, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x7c, + 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x19, 0x0a, 0x02, 0x6b, 0x65, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x74, 0x68, 0x72, 0x65, 0x65, 0x52, + 0x02, 0x6b, 0x65, 0x12, 0x35, 0x0a, 0x02, 0x62, 0x6b, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, + 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, + 0x05, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x52, 0x02, 0x62, 0x6b, 0x12, 0x38, 0x0a, 0x02, 0x62, 0x6d, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, 0x69, 0x76, 0x65, + 0x52, 0x02, 0x62, 0x6d, 0x12, 0x59, 0x0a, 0x16, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0c, 0x82, 0x41, 0x09, + 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x74, 0x68, 0x12, + 0x3e, 0x0a, 0x06, 0x62, 0x6b, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, + 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x42, + 0x07, 0x82, 0x41, 0x04, 0x2f, 0x73, 0x69, 0x78, 0x52, 0x05, 0x62, 0x6b, 0x54, 0x77, 0x6f, 0x12, + 0x79, 0x0a, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x14, 0x82, 0x41, 0x11, 0x2f, 0x61, 0x6e, 0x2f, - 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x08, 0x6d, - 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x6e, 0x6f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x02, - 0x6b, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, - 0x6e, 0x65, 0x7c, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x02, 0x6b, 0x6d, 0x12, 0x19, 0x0a, 0x02, 0x6b, - 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x74, 0x68, 0x72, - 0x65, 0x65, 0x52, 0x02, 0x6b, 0x65, 0x12, 0x35, 0x0a, 0x02, 0x62, 0x6b, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, - 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x42, - 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, 0x6f, 0x75, 0x72, 0x52, 0x02, 0x62, 0x6b, 0x12, 0x38, 0x0a, - 0x02, 0x62, 0x6d, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x66, - 0x69, 0x76, 0x65, 0x52, 0x02, 0x62, 0x6d, 0x12, 0x59, 0x0a, 0x16, 0x69, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0c, - 0x82, 0x41, 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x14, 0x69, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x3e, 0x0a, 0x06, 0x62, 0x6b, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x08, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, - 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, - 0x77, 0x6f, 0x42, 0x07, 0x82, 0x41, 0x04, 0x2f, 0x73, 0x69, 0x78, 0x52, 0x05, 0x62, 0x6b, 0x54, - 0x77, 0x6f, 0x12, 0x79, 0x0a, 0x22, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0e, 0x82, 0x41, - 0x0b, 0x2f, 0x73, 0x69, 0x78, 0x7c, 0x2f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x52, 0x1f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x46, 0x6f, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x3e, 0x0a, - 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4b, 0x65, - 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x82, 0x41, - 0x06, 0x2f, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x12, 0x3d, 0x0a, - 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, - 0x05, 0x2f, 0x6e, 0x69, 0x6e, 0x65, 0x52, 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x1a, 0x3b, 0x0a, 0x0d, - 0x4d, 0x61, 0x70, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x18, 0x49, 0x6e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, - 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x10, 0x42, 0x61, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x12, 0x22, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0x82, 0x41, 0x0d, - 0x2f, 0x6f, 0x6e, 0x65, 0x7c, 0x2f, 0x6f, 0x6e, 0x65, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x22, 0x3f, 0x0a, 0x0d, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x4b, 0x65, 0x79, 0x12, 0x2e, 0x0a, 0x0c, 0x62, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x66, - 0x6f, 0x75, 0x72, 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x0a, 0x62, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x22, 0x58, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6f, 0x6b, 0x2d, 0x6b, 0x65, 0x79, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x08, 0x62, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, 0x62, 0x61, 0x64, - 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x07, 0x62, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, - 0x11, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x04, 0x82, 0x41, 0x01, 0x2f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x33, 0x0a, 0x11, 0x49, 0x6e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, - 0x1e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x82, 0x41, - 0x09, 0x2f, 0x6f, 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x2a, - 0x7e, 0x0a, 0x0b, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0e, - 0x0a, 0x0a, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x1b, - 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x1a, - 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x4f, 0x4e, 0x45, 0x12, 0x1b, 0x0a, 0x0b, 0x45, - 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x1a, 0x0a, 0x82, 0x41, - 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x54, 0x57, 0x4f, 0x12, 0x25, 0x0a, 0x10, 0x45, 0x4e, 0x55, 0x4d, - 0x5f, 0x56, 0x41, 0x4c, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x10, 0x2a, 0x1a, 0x0f, - 0x82, 0x41, 0x0c, 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x42, - 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, - 0x65, 0x6e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x6d, 0x61, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, - 0x65, 0x78, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0e, 0x82, 0x41, 0x0b, 0x2f, 0x73, + 0x69, 0x78, 0x7c, 0x2f, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x52, 0x1f, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x70, 0x6c, 0x65, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x46, 0x6f, + 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x04, 0x62, 0x6b, + 0x70, 0x6d, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x42, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, + 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x82, 0x41, 0x06, 0x2f, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x52, 0x04, 0x62, 0x6b, 0x70, 0x6d, 0x12, 0x3d, 0x0a, 0x04, 0x69, 0x6b, + 0x70, 0x6b, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x65, 0x78, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4b, + 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x42, 0x08, 0x82, 0x41, 0x05, 0x2f, 0x6e, + 0x69, 0x6e, 0x65, 0x52, 0x04, 0x69, 0x6b, 0x70, 0x6b, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x61, 0x70, + 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x41, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x36, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x54, 0x77, 0x6f, 0x12, 0x22, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0x82, 0x41, 0x0d, 0x2f, 0x6f, 0x6e, + 0x65, 0x7c, 0x2f, 0x6f, 0x6e, 0x65, 0x2f, 0x74, 0x77, 0x6f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, + 0x3f, 0x0a, 0x0d, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, + 0x12, 0x2e, 0x0a, 0x0c, 0x62, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x66, 0x6f, 0x75, 0x72, + 0x2f, 0x6b, 0x65, 0x79, 0x52, 0x0a, 0x62, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, + 0x22, 0x58, 0x0a, 0x10, 0x42, 0x61, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0x82, 0x41, 0x07, 0x2f, 0x6f, 0x6b, 0x2d, 0x6b, 0x65, 0x79, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x26, 0x0a, 0x08, 0x62, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x82, 0x41, 0x08, 0x2f, 0x62, 0x61, 0x64, 0x2d, 0x6b, 0x65, + 0x79, 0x52, 0x07, 0x62, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x11, 0x42, 0x61, + 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0x82, 0x41, + 0x01, 0x2f, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x33, 0x0a, 0x11, 0x49, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x1e, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0x82, 0x41, 0x09, 0x2f, 0x6f, + 0x6e, 0x65, 0x5b, 0x74, 0x77, 0x6f, 0x5d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x2a, 0x7e, 0x0a, 0x0b, + 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x0e, 0x0a, 0x0a, 0x45, + 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x0b, 0x45, + 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, 0x4c, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x1a, 0x0a, 0x82, 0x41, + 0x07, 0x56, 0x41, 0x4c, 0x5f, 0x4f, 0x4e, 0x45, 0x12, 0x1b, 0x0a, 0x0b, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x56, 0x41, 0x4c, 0x54, 0x57, 0x4f, 0x10, 0x02, 0x1a, 0x0a, 0x82, 0x41, 0x07, 0x56, 0x41, + 0x4c, 0x5f, 0x54, 0x57, 0x4f, 0x12, 0x25, 0x0a, 0x10, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x56, 0x41, + 0x4c, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x10, 0x2a, 0x1a, 0x0f, 0x82, 0x41, 0x0c, + 0x56, 0x41, 0x4c, 0x5f, 0x46, 0x4f, 0x52, 0x54, 0x59, 0x54, 0x57, 0x4f, 0x42, 0x3b, 0x5a, 0x39, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x79, 0x67, 0x6f, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x6d, 0x61, 0x70, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, 0x78, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x61, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2089,7 +2164,7 @@ func file_exschemapath_proto_rawDescGZIP() []byte { } var file_exschemapath_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 27) +var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_exschemapath_proto_goTypes = []interface{}{ (ExampleEnum)(0), // 0: exschemapath.ExampleEnum (*Root)(nil), // 1: exschemapath.Root @@ -2101,90 +2176,92 @@ var file_exschemapath_proto_goTypes = []interface{}{ (*ExampleNestedGrandchild)(nil), // 7: exschemapath.ExampleNestedGrandchild (*BasicUnion)(nil), // 8: exschemapath.BasicUnion (*ExampleUnion)(nil), // 9: exschemapath.ExampleUnion - (*ExampleUnionUnambiguous)(nil), // 10: exschemapath.ExampleUnionUnambiguous - (*ExampleMessageChild)(nil), // 11: exschemapath.ExampleMessageChild - (*ExampleMessageKey)(nil), // 12: exschemapath.ExampleMessageKey - (*ExampleMessageListMember)(nil), // 13: exschemapath.ExampleMessageListMember - (*NestedListKey)(nil), // 14: exschemapath.NestedListKey - (*NestedListMember)(nil), // 15: exschemapath.NestedListMember - (*ExampleMessageMultiKey)(nil), // 16: exschemapath.ExampleMessageMultiKey - (*MultiKeyListMember)(nil), // 17: exschemapath.MultiKeyListMember - (*InvalidMessage)(nil), // 18: exschemapath.InvalidMessage - (*InvalidAnnotationMessage)(nil), // 19: exschemapath.InvalidAnnotationMessage - (*BadMessageKeyTwo)(nil), // 20: exschemapath.BadMessageKeyTwo - (*BadMessageKey)(nil), // 21: exschemapath.BadMessageKey - (*BadMessageMember)(nil), // 22: exschemapath.BadMessageMember - (*BadKeyPathMessage)(nil), // 23: exschemapath.BadKeyPathMessage - (*InvalidKeyPathKey)(nil), // 24: exschemapath.InvalidKeyPathKey - (*Root_InterfaceKey)(nil), // 25: exschemapath.Root.InterfaceKey - (*Interface_SubinterfaceKey)(nil), // 26: exschemapath.Interface.SubinterfaceKey - nil, // 27: exschemapath.InvalidMessage.MapFieldEntry - (*ywrapper.StringValue)(nil), // 28: ywrapper.StringValue - (*ywrapper.BoolValue)(nil), // 29: ywrapper.BoolValue - (*ywrapper.BytesValue)(nil), // 30: ywrapper.BytesValue - (*ywrapper.Decimal64Value)(nil), // 31: ywrapper.Decimal64Value - (*ywrapper.IntValue)(nil), // 32: ywrapper.IntValue - (*ywrapper.UintValue)(nil), // 33: ywrapper.UintValue + (*ExampleUnionTwo)(nil), // 10: exschemapath.ExampleUnionTwo + (*ExampleUnionUnambiguous)(nil), // 11: exschemapath.ExampleUnionUnambiguous + (*ExampleMessageChild)(nil), // 12: exschemapath.ExampleMessageChild + (*ExampleMessageKey)(nil), // 13: exschemapath.ExampleMessageKey + (*ExampleMessageListMember)(nil), // 14: exschemapath.ExampleMessageListMember + (*NestedListKey)(nil), // 15: exschemapath.NestedListKey + (*NestedListMember)(nil), // 16: exschemapath.NestedListMember + (*ExampleMessageMultiKey)(nil), // 17: exschemapath.ExampleMessageMultiKey + (*MultiKeyListMember)(nil), // 18: exschemapath.MultiKeyListMember + (*InvalidMessage)(nil), // 19: exschemapath.InvalidMessage + (*InvalidAnnotationMessage)(nil), // 20: exschemapath.InvalidAnnotationMessage + (*BadMessageKeyTwo)(nil), // 21: exschemapath.BadMessageKeyTwo + (*BadMessageKey)(nil), // 22: exschemapath.BadMessageKey + (*BadMessageMember)(nil), // 23: exschemapath.BadMessageMember + (*BadKeyPathMessage)(nil), // 24: exschemapath.BadKeyPathMessage + (*InvalidKeyPathKey)(nil), // 25: exschemapath.InvalidKeyPathKey + (*Root_InterfaceKey)(nil), // 26: exschemapath.Root.InterfaceKey + (*Interface_SubinterfaceKey)(nil), // 27: exschemapath.Interface.SubinterfaceKey + nil, // 28: exschemapath.InvalidMessage.MapFieldEntry + (*ywrapper.StringValue)(nil), // 29: ywrapper.StringValue + (*ywrapper.BoolValue)(nil), // 30: ywrapper.BoolValue + (*ywrapper.BytesValue)(nil), // 31: ywrapper.BytesValue + (*ywrapper.Decimal64Value)(nil), // 32: ywrapper.Decimal64Value + (*ywrapper.IntValue)(nil), // 33: ywrapper.IntValue + (*ywrapper.UintValue)(nil), // 34: ywrapper.UintValue } var file_exschemapath_proto_depIdxs = []int32{ 3, // 0: exschemapath.Root.system:type_name -> exschemapath.System - 25, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey - 28, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue - 26, // 3: exschemapath.Interface.subinterface:type_name -> exschemapath.Interface.SubinterfaceKey - 28, // 4: exschemapath.System.hostname:type_name -> ywrapper.StringValue - 28, // 5: exschemapath.Subinterface.description:type_name -> ywrapper.StringValue - 29, // 6: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue - 30, // 7: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue - 31, // 8: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value - 32, // 9: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue - 28, // 10: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue - 33, // 11: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue - 11, // 12: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild - 12, // 13: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey - 16, // 14: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey + 26, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey + 29, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue + 27, // 3: exschemapath.Interface.subinterface:type_name -> exschemapath.Interface.SubinterfaceKey + 29, // 4: exschemapath.System.hostname:type_name -> ywrapper.StringValue + 29, // 5: exschemapath.Subinterface.description:type_name -> ywrapper.StringValue + 30, // 6: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue + 31, // 7: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue + 32, // 8: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value + 33, // 9: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue + 29, // 10: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue + 34, // 11: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue + 12, // 12: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild + 13, // 13: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey + 17, // 14: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey 0, // 15: exschemapath.ExampleMessage.en:type_name -> exschemapath.ExampleEnum - 28, // 16: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue - 28, // 17: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue - 29, // 18: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue - 32, // 19: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue - 33, // 20: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue - 30, // 21: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue - 31, // 22: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value + 29, // 16: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue + 29, // 17: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue + 30, // 18: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue + 33, // 19: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue + 34, // 20: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue + 31, // 21: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue + 32, // 22: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value 9, // 23: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion 6, // 24: exschemapath.ExampleMessage.nested:type_name -> exschemapath.ExampleNestedMessage 8, // 25: exschemapath.ExampleMessage.union:type_name -> exschemapath.BasicUnion - 10, // 26: exschemapath.ExampleMessage.leaflist_union_b:type_name -> exschemapath.ExampleUnionUnambiguous - 28, // 27: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue - 28, // 28: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue - 7, // 29: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild - 28, // 30: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue - 28, // 31: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue - 0, // 32: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum - 0, // 33: exschemapath.ExampleUnionUnambiguous.enum:type_name -> exschemapath.ExampleEnum - 28, // 34: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue - 13, // 35: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember - 28, // 36: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue - 14, // 37: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey - 15, // 38: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember - 28, // 39: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue - 17, // 40: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember - 28, // 41: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue - 27, // 42: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry - 12, // 43: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey - 21, // 44: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey - 22, // 45: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember - 28, // 46: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue - 20, // 47: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo - 18, // 48: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage - 23, // 49: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage - 24, // 50: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey - 2, // 51: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface - 4, // 52: exschemapath.Interface.SubinterfaceKey.subinterface:type_name -> exschemapath.Subinterface - 53, // [53:53] is the sub-list for method output_type - 53, // [53:53] is the sub-list for method input_type - 53, // [53:53] is the sub-list for extension type_name - 53, // [53:53] is the sub-list for extension extendee - 0, // [0:53] is the sub-list for field type_name + 11, // 26: exschemapath.ExampleMessage.leaflist_union_b:type_name -> exschemapath.ExampleUnionUnambiguous + 10, // 27: exschemapath.ExampleMessage.leaflist_union_c:type_name -> exschemapath.ExampleUnionTwo + 29, // 28: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue + 29, // 29: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue + 7, // 30: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild + 29, // 31: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue + 29, // 32: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue + 0, // 33: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum + 0, // 34: exschemapath.ExampleUnionUnambiguous.enum:type_name -> exschemapath.ExampleEnum + 29, // 35: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue + 14, // 36: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember + 29, // 37: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue + 15, // 38: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey + 16, // 39: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember + 29, // 40: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue + 18, // 41: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember + 29, // 42: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue + 28, // 43: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry + 13, // 44: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey + 22, // 45: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey + 23, // 46: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember + 29, // 47: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue + 21, // 48: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo + 19, // 49: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage + 24, // 50: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage + 25, // 51: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey + 2, // 52: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface + 4, // 53: exschemapath.Interface.SubinterfaceKey.subinterface:type_name -> exschemapath.Subinterface + 54, // [54:54] is the sub-list for method output_type + 54, // [54:54] is the sub-list for method input_type + 54, // [54:54] is the sub-list for extension type_name + 54, // [54:54] is the sub-list for extension extendee + 0, // [0:54] is the sub-list for field type_name } func init() { file_exschemapath_proto_init() } @@ -2302,7 +2379,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleUnionUnambiguous); i { + switch v := v.(*ExampleUnionTwo); i { case 0: return &v.state case 1: @@ -2314,7 +2391,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageChild); i { + switch v := v.(*ExampleUnionUnambiguous); i { case 0: return &v.state case 1: @@ -2326,7 +2403,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageKey); i { + switch v := v.(*ExampleMessageChild); i { case 0: return &v.state case 1: @@ -2338,7 +2415,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageListMember); i { + switch v := v.(*ExampleMessageKey); i { case 0: return &v.state case 1: @@ -2350,7 +2427,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListKey); i { + switch v := v.(*ExampleMessageListMember); i { case 0: return &v.state case 1: @@ -2362,7 +2439,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListMember); i { + switch v := v.(*NestedListKey); i { case 0: return &v.state case 1: @@ -2374,7 +2451,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageMultiKey); i { + switch v := v.(*NestedListMember); i { case 0: return &v.state case 1: @@ -2386,7 +2463,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiKeyListMember); i { + switch v := v.(*ExampleMessageMultiKey); i { case 0: return &v.state case 1: @@ -2398,7 +2475,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidMessage); i { + switch v := v.(*MultiKeyListMember); i { case 0: return &v.state case 1: @@ -2410,7 +2487,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidAnnotationMessage); i { + switch v := v.(*InvalidMessage); i { case 0: return &v.state case 1: @@ -2422,7 +2499,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKeyTwo); i { + switch v := v.(*InvalidAnnotationMessage); i { case 0: return &v.state case 1: @@ -2434,7 +2511,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKey); i { + switch v := v.(*BadMessageKeyTwo); i { case 0: return &v.state case 1: @@ -2446,7 +2523,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageMember); i { + switch v := v.(*BadMessageKey); i { case 0: return &v.state case 1: @@ -2458,7 +2535,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadKeyPathMessage); i { + switch v := v.(*BadMessageMember); i { case 0: return &v.state case 1: @@ -2470,7 +2547,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidKeyPathKey); i { + switch v := v.(*BadKeyPathMessage); i { case 0: return &v.state case 1: @@ -2482,7 +2559,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Root_InterfaceKey); i { + switch v := v.(*InvalidKeyPathKey); i { case 0: return &v.state case 1: @@ -2494,6 +2571,18 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Root_InterfaceKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_exschemapath_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Interface_SubinterfaceKey); i { case 0: return &v.state @@ -2516,7 +2605,7 @@ func file_exschemapath_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_exschemapath_proto_rawDesc, NumEnums: 1, - NumMessages: 27, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/protomap/testdata/exschemapath/exschemapath.proto b/protomap/testdata/exschemapath/exschemapath.proto index 70237a6a..b7f4a4a3 100644 --- a/protomap/testdata/exschemapath/exschemapath.proto +++ b/protomap/testdata/exschemapath/exschemapath.proto @@ -60,6 +60,7 @@ message ExampleMessage { // TODO(robjs): support union fields, this needs a new annotation. BasicUnion union = 22 [(yext.schemapath) = "/union"]; repeated ExampleUnionUnambiguous leaflist_union_b = 23 [(yext.schemapath) = "/leaflist-union-b", (yext.leaflistunion) = true]; + repeated ExampleUnionTwo leaflist_union_c = 24 [(yext.schemapath) = "/leaflist-union-c", (yext.leaflistunion) = true]; } message ExampleNestedMessage { @@ -83,6 +84,11 @@ message ExampleUnion { ExampleEnum enum = 3 [(yext.schemapath) = "/leaflist-union"]; } +message ExampleUnionTwo { + bool b = 1 [(yext.schemapath) = "/leaflist-union-c"]; + float f = 2 [(yext.schemapath) = "/leaflist-union-c"]; +} + message ExampleUnionUnambiguous { uint64 uint = 1 [(yext.schemapath) = "/leaflist-union-b"]; ExampleEnum enum = 2 [(yext.schemapath) = "/leaflist-union-b"];