From 5cf59cd465f05a45d210aa3ce889f5847edb2858 Mon Sep 17 00:00:00 2001 From: Rob Shakir Date: Sat, 23 Sep 2023 17:05:42 -0700 Subject: [PATCH] Support nested containers in gNMI->Protobuf unmarshalling. (#914) * Support nested containers in gNMI->Protobuf unmarshalling. * (M) protomap/{proto,proto_test.go} - Support nested messages when unmarshalling protobufs, previously such messages did not have their contents mapped. * (M) protomap/integration_tests/integration_test.go - Add a testcase for gRIBI's real protobufs to ensure that unmarshalling is covered. * Address review comments. --- .../integration_tests/integration_test.go | 111 +++ protomap/proto.go | 185 ++-- protomap/proto_test.go | 46 +- .../testdata/exschemapath/exschemapath.pb.go | 821 ++++++++++++------ .../testdata/exschemapath/exschemapath.proto | 19 +- 5 files changed, 833 insertions(+), 349 deletions(-) diff --git a/protomap/integration_tests/integration_test.go b/protomap/integration_tests/integration_test.go index 38d66028e..c1fe6096a 100644 --- a/protomap/integration_tests/integration_test.go +++ b/protomap/integration_tests/integration_test.go @@ -6,6 +6,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" + "github.com/openconfig/gnmi/value" "github.com/openconfig/ygot/protomap" "github.com/openconfig/ygot/protomap/integration_tests/testdata/gribi_aft" "github.com/openconfig/ygot/testutil" @@ -14,6 +15,7 @@ import ( "google.golang.org/protobuf/testing/protocmp" gpb "github.com/openconfig/gnmi/proto/gnmi" + wpb "github.com/openconfig/ygot/proto/ywrapper" ) func mustPath(p string) *gpb.Path { @@ -89,6 +91,28 @@ func TestGRIBIAFT(t *testing.T) { mustPath("afts/next-hops/next-hop[index=1]/index"): uint64(1), mustPath("afts/next-hops/next-hop[index=1]/state/index"): uint64(1), }, + }, { + desc: "NHG entry", + inProto: &gribi_aft.Afts{ + NextHopGroup: []*gribi_aft.Afts_NextHopGroupKey{{ + Id: 1, + NextHopGroup: &gribi_aft.Afts_NextHopGroup{ + NextHop: []*gribi_aft.Afts_NextHopGroup_NextHopKey{{ + Index: 1, + NextHop: &gribi_aft.Afts_NextHopGroup_NextHop{ + Weight: &wpb.UintValue{Value: 1}, + }, + }}, + }, + }}, + }, + wantPaths: map[*gpb.Path]interface{}{ + mustPath("afts/next-hop-groups/next-hop-group[id=1]/id"): uint64(1), + mustPath("afts/next-hop-groups/next-hop-group[id=1]/state/id"): uint64(1), + mustPath("afts/next-hop-groups/next-hop-group[id=1]/next-hops/next-hop[index=1]/index"): uint64(1), + mustPath("afts/next-hop-groups/next-hop-group[id=1]/next-hops/next-hop[index=1]/state/index"): uint64(1), + mustPath("afts/next-hop-groups/next-hop-group[id=1]/next-hops/next-hop[index=1]/state/weight"): uint64(1), + }, }} for _, tt := range tests { @@ -103,3 +127,90 @@ func TestGRIBIAFT(t *testing.T) { }) } } + +func mustValue(t *testing.T, v any) *gpb.TypedValue { + tv, err := value.FromScalar(v) + if err != nil { + t.Fatalf("cannot create gNMI TypedValue from %v %T, err: %v", v, v, err) + } + return tv +} + +func TestGRIBIAFTToStruct(t *testing.T) { + tests := []struct { + desc string + inPaths map[*gpb.Path]interface{} + inProto proto.Message + inPrefix *gpb.Path + wantProto proto.Message + wantErr bool + }{{ + desc: "ipv4 prefix", + inPaths: map[*gpb.Path]interface{}{ + mustPath("state/entry-metadata"): mustValue(t, []byte{1, 2, 3}), + }, + inProto: &gribi_aft.Afts_Ipv4Entry{}, + inPrefix: mustPath("afts/ipv4-unicast/ipv4-entry"), + wantProto: &gribi_aft.Afts_Ipv4Entry{ + EntryMetadata: &wpb.BytesValue{Value: []byte{1, 2, 3}}, + }, + }, { + desc: "map next-hop-group", + inPaths: map[*gpb.Path]interface{}{ + mustPath("next-hops/next-hop[index=1]/index"): mustValue(t, 1), + mustPath("next-hops/next-hop[index=1]/state/index"): mustValue(t, 1), + mustPath("next-hops/next-hop[index=1]/state/weight"): mustValue(t, 1), + }, + inProto: &gribi_aft.Afts_NextHopGroup{}, + inPrefix: &gpb.Path{ + Elem: []*gpb.PathElem{{ + Name: "afts", + }, { + Name: "next-hop-groups", + }, { + Name: "next-hop-group", + }}, + }, + wantProto: &gribi_aft.Afts_NextHopGroup{ + // Currently this error is ignored for backwards compatibility with other + // messages where there are repeated fields that are not covered. + /* NextHop: []*gribi_aft.Afts_NextHopGroup_NextHopKey{{ + Index: 1, + NextHop: &gribi_aft.Afts_NextHopGroup_NextHop{ + Weight: &wpb.UintValue{Value: 1}, + }, + }}, + */ + }, + }, { + desc: "embedded field in next-hop", + inPaths: map[*gpb.Path]interface{}{ + mustPath("ip-in-ip/state/src-ip"): mustValue(t, "1.1.1.1"), + }, + inProto: &gribi_aft.Afts_NextHop{}, + inPrefix: mustPath("afts/next-hops/next-hop"), + wantProto: &gribi_aft.Afts_NextHop{ + IpInIp: &gribi_aft.Afts_NextHop_IpInIp{ + SrcIp: &wpb.StringValue{Value: "1.1.1.1"}, + }, + }, + }} + + for _, tt := range tests { + t.Run(tt.desc, func(t *testing.T) { + if err := protomap.ProtoFromPaths(tt.inProto, tt.inPaths, + protomap.ProtobufMessagePrefix(tt.inPrefix), + protomap.ValuePathPrefix(tt.inPrefix), + ); err != nil { + if !tt.wantErr { + t.Fatalf("cannot unmarshal paths, err: %v, wantErr? %v", err, tt.wantErr) + } + return + } + + if diff := cmp.Diff(tt.inProto, tt.wantProto, protocmp.Transform()); diff != "" { + t.Fatalf("did not get expected protobuf, diff(-got,+want):\n%s", diff) + } + }) + } +} diff --git a/protomap/proto.go b/protomap/proto.go index 49bdd01c9..e65a662d4 100644 --- a/protomap/proto.go +++ b/protomap/proto.go @@ -536,6 +536,10 @@ func ProtoFromPaths(p proto.Message, vals map[*gpb.Path]interface{}, opt ...Unma return fmt.Errorf("invalid protobuf message prefix supplied in options, %v", err) } + return protoFromPathsInternal(p, vals, valPrefix, protoPrefix, hasIgnoreExtraPaths(opt)) +} + +func protoFromPathsInternal(p proto.Message, vals map[*gpb.Path]any, valPrefix, protoPrefix *gpb.Path, ignoreExtras bool) error { schemaPath := func(p *gpb.Path) *gpb.Path { np := proto.Clone(p).(*gpb.Path) for _, e := range np.Elem { @@ -544,82 +548,144 @@ func ProtoFromPaths(p proto.Message, vals map[*gpb.Path]interface{}, opt ...Unma return np } - // directCh is a map between the absolute schema path for a particular value, and - // the value specified. - directCh := map[*gpb.Path]interface{}{} - for p, v := range vals { - absPath := &gpb.Path{ - Elem: append(append([]*gpb.PathElem{}, schemaPath(valPrefix).Elem...), p.Elem...), - } + findChildren := func(vals map[*gpb.Path]any, valPrefix *gpb.Path, protoPrefix *gpb.Path, directOnly, mustBeChildren bool) (map[*gpb.Path]any, error) { + // directCh is a map between the absolute schema path for a particular value, and + // the value specified. + directCh := map[*gpb.Path]interface{}{} + for p, v := range vals { + absPath := &gpb.Path{ + Elem: append(append([]*gpb.PathElem{}, schemaPath(valPrefix).Elem...), p.Elem...), + } - if !util.PathMatchesPathElemPrefix(absPath, protoPrefix) { - return fmt.Errorf("invalid path provided, absolute paths must be used, %s does not have prefix %s", absPath, protoPrefix) - } + if !util.PathMatchesPathElemPrefix(absPath, protoPrefix) { + if mustBeChildren { + return nil, fmt.Errorf("invalid path provided, absolute paths must be used, %s does not have prefix %s", absPath, protoPrefix) + } + continue + } - // make the path absolute, and a schema path. - pp := util.TrimGNMIPathElemPrefix(absPath, protoPrefix) + // make the path absolute, and a schema path. + pp := util.TrimGNMIPathElemPrefix(absPath, protoPrefix) - if len(pp.GetElem()) == 1 { - directCh[pp] = v - } - // TODO(robjs): it'd be good to have something here that tells us whether we are in - // a compressed schema. Potentially we should add something to the generated protobuf - // as a fileoption that would give us this indication. - if len(pp.Elem) == 2 { - if pp.Elem[len(pp.Elem)-2].Name == "config" || pp.Elem[len(pp.Elem)-2].Name == "state" { + switch directOnly { + case true: + if len(pp.GetElem()) == 1 { + directCh[pp] = v + } + // TODO(robjs): it'd be good to have something here that tells us whether we are in + // a compressed schema. Potentially we should add something to the generated protobuf + // as a fileoption that would give us this indication. + if len(pp.Elem) == 2 { + if pp.Elem[len(pp.Elem)-2].Name == "config" || pp.Elem[len(pp.Elem)-2].Name == "state" { + directCh[pp] = v + } + } + case false: directCh[pp] = v } } + return directCh, nil + } + + // It is safe for us to call findChldren setting mustBeChildren to true since we are in one of two cases: + // + // * the first iteration through the function, at which point we expect that vals can only + // contain paths that are descendents of this path. + // * a subsequent iteration, at which point we are called with the subtree that corresponds to + // the protobuf that was handed into this function. + directCh, err := findChildren(vals, valPrefix, protoPrefix, true, true) + if err != nil { + return err } mapped := map[*gpb.Path]bool{} + // Clone so we don't change something we're iterating. + origM := proto.Clone(p).ProtoReflect() m := p.ProtoReflect() var rangeErr error - unpopRange{m}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + unpopRange{origM}.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { annotatedPath, err := annotatedSchemaPath(fd) if err != nil { rangeErr = err return false } - for _, ap := range annotatedPath { - if !util.PathMatchesPathElemPrefix(ap, protoPrefix) { - rangeErr = fmt.Errorf("annotation %s does not match the supplied prefix %s", ap, protoPrefix) - return false - } - trimmedAP := util.TrimGNMIPathElemPrefix(ap, protoPrefix) - for chp, chv := range directCh { - if proto.Equal(trimmedAP, chp) { - switch fd.Kind() { - case protoreflect.MessageKind: - v, isWrap, err := makeWrapper(m, fd, chv) - if err != nil { - rangeErr = err - return false - } - if !isWrap { - // TODO(robjs): recurse into the message if it wasn't a wrapper - // type. - rangeErr = fmt.Errorf("unimplemented: child messages, field %s", fd.FullName()) - return false - } - mapped[chp] = true - m.Set(fd, protoreflect.ValueOfMessage(v)) - case protoreflect.EnumKind: - v, err := enumValue(fd, chv) - if err != nil { - rangeErr = err + if len(directCh) != 0 { + for _, ap := range annotatedPath { + if !util.PathMatchesPathElemPrefix(ap, protoPrefix) { + rangeErr = fmt.Errorf("annotation %s does not match the supplied prefix %s", ap, protoPrefix) + return false + } + trimmedAP := util.TrimGNMIPathElemPrefix(ap, protoPrefix) + + // Map the values that we have that a direct children of this message. + for chp, chv := range directCh { + if proto.Equal(trimmedAP, chp) { + switch fd.Kind() { + case protoreflect.MessageKind: + v, isWrap, err := makeWrapper(m, fd, chv) + if err != nil { + rangeErr = err + return false + } + // Only handle wrapper messages here, other embedded messages are covered by + // checking the field type below (since we must handle cases where there are + // indirect children). + if isWrap { + mapped[chp] = true + m.Set(fd, protoreflect.ValueOfMessage(v)) + } + case protoreflect.EnumKind: + v, err := enumValue(fd, chv) + if err != nil { + rangeErr = err + return false + } + mapped[chp] = true + m.Set(fd, v) + default: + rangeErr = fmt.Errorf("unknown field kind %s for %s", fd.Kind(), fd.FullName()) return false } - mapped[chp] = true - m.Set(fd, v) - default: - rangeErr = fmt.Errorf("unknown field kind %s for %s", fd.Kind(), fd.FullName()) - return false } } } } + + // If we find a message field, then we need to recurse into it to check whether there were paths that match + // its children. + if fd.Kind() == protoreflect.MessageKind { + switch { + case fd.IsList(): + // TODO(robjs): Support mapping these fields -- currently we silently drop them for backwards compatibility. + case fd.IsMap(): + rangeErr = fmt.Errorf("map fields are not supported in mapped protobufs at field %s", fd.FullName()) + return false + case isWrapper(m, fd): + return true + default: + childMsg := m.NewField(fd).Message() + np := proto.Clone(valPrefix).(*gpb.Path) + np.Elem = append(np.Elem, util.TrimGNMIPathElemPrefix(annotatedPath[0], protoPrefix).Elem...) + + // There may be paths that are not direct descendents, so do not error. Return indirect children too. + children, err := findChildren(vals, valPrefix, np, false, false) + if err != nil { + rangeErr = fmt.Errorf("logic error, findChildren returned an error") + return false + } + if len(children) == 0 { + return true + } + + if err := protoFromPathsInternal(childMsg.Interface(), children, np, np, ignoreExtras); err != nil { + rangeErr = err + return false + } + m.Set(fd, protoreflect.ValueOfMessage(childMsg)) + } + + } return true }) @@ -627,7 +693,7 @@ func ProtoFromPaths(p proto.Message, vals map[*gpb.Path]interface{}, opt ...Unma return rangeErr } - if !hasIgnoreExtraPaths(opt) { + if !ignoreExtras { for chp := range directCh { if !mapped[chp] { return fmt.Errorf("did not map path %s to a proto field", chp) @@ -725,6 +791,17 @@ func makeWrapper(msg protoreflect.Message, fd protoreflect.FieldDescriptor, val } } +// isWrapper returns true if the field fd of the message msg is a ywrapper protobuf type. +func isWrapper(msg protoreflect.Message, fd protoreflect.FieldDescriptor) bool { + newV := msg.NewField(fd) + switch newV.Message().Interface().(type) { + case *wpb.StringValue, *wpb.UintValue, *wpb.BytesValue, *wpb.BoolValue, *wpb.Decimal64Value, *wpb.IntValue: + return true + default: + return false + } +} + // enumValue returns the concrete implementation of the enumeration with the yang_name annotation set // to the string contained in val of the enumeration within the field descriptor fd. It returns an // error if the value cannot be found, or the input value is not valid. diff --git a/protomap/proto_test.go b/protomap/proto_test.go index ec765cf0d..ec4d70e22 100644 --- a/protomap/proto_test.go +++ b/protomap/proto_test.go @@ -479,13 +479,6 @@ func TestProtoFromPaths(t *testing.T) { mustPath("/string"): 42, }, wantErrSubstring: "got non-string value for string field", - }, { - desc: "not a wrapper message", - inProto: &epb.ExampleMessage{}, - inVals: map[*gpb.Path]interface{}{ - mustPath("/message"): &gpb.Path{}, - }, - wantErrSubstring: "unimplemented", }, { desc: "unknown field", inProto: &epb.ExampleMessage{}, @@ -603,12 +596,19 @@ func TestProtoFromPaths(t *testing.T) { Description: &wpb.StringValue{Value: "interface-42"}, }, }, { - desc: "invalid message with no annotation on one of its other fields", + desc: "invalid message with unsupported field", inProto: &epb.InvalidMessage{}, inVals: map[*gpb.Path]interface{}{ mustPath("three"): "str", }, - wantErrSubstring: "received field with invalid annotation", + wantErrSubstring: "map fields are not supported", + }, { + desc: "missing annotation", + inProto: &epb.InvalidAnnotationMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("three"): "str", + }, + wantErrSubstring: "invalid annotation", }, { desc: "invalid message with bad field type", inProto: &epb.BadMessageKeyTwo{}, @@ -702,6 +702,34 @@ func TestProtoFromPaths(t *testing.T) { wantProto: &epb.Interface{ Description: &wpb.StringValue{Value: "value"}, }, + }, { + desc: "child message", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/message/str"): "hello", + }, + wantProto: &epb.ExampleMessage{ + Ex: &epb.ExampleMessageChild{ + Str: &wpb.StringValue{Value: "hello"}, + }, + }, + }, { + desc: "nested children", + inProto: &epb.ExampleMessage{}, + inVals: map[*gpb.Path]any{ + mustPath("/nested/one"): "one", + mustPath("/nested/child/one"): "one", + mustPath("/nested/child/two"): "two", + }, + wantProto: &epb.ExampleMessage{ + Nested: &epb.ExampleNestedMessage{ + One: &wpb.StringValue{Value: "one"}, + Child: &epb.ExampleNestedGrandchild{ + One: &wpb.StringValue{Value: "one"}, + Two: &wpb.StringValue{Value: "two"}, + }, + }, + }, }} for _, tt := range tests { diff --git a/protomap/testdata/exschemapath/exschemapath.pb.go b/protomap/testdata/exschemapath/exschemapath.pb.go index f32071c01..119c220ae 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.21.9 +// protoc-gen-go v1.28.1 +// protoc v3.21.12 // source: exschemapath.proto package exschemapath @@ -240,6 +240,7 @@ 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"` @@ -250,6 +251,7 @@ type ExampleMessage struct { LeaflistBytes []*ywrapper.BytesValue `protobuf:"bytes,19,rep,name=leaflist_bytes,json=leaflistBytes,proto3" json:"leaflist_bytes,omitempty"` 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"` } func (x *ExampleMessage) Reset() { @@ -431,6 +433,13 @@ func (x *ExampleMessage) GetLeaflistUnion() []*ExampleUnion { return nil } +func (x *ExampleMessage) GetNested() *ExampleNestedMessage { + if x != nil { + return x.Nested + } + return nil +} + type isExampleMessage_OneofField interface { isExampleMessage_OneofField() } @@ -447,6 +456,124 @@ func (*ExampleMessage_OneofOne) isExampleMessage_OneofField() {} func (*ExampleMessage_OneofTwo) isExampleMessage_OneofField() {} +type ExampleNestedMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + One *ywrapper.StringValue `protobuf:"bytes,1,opt,name=one,proto3" json:"one,omitempty"` + Two *ywrapper.StringValue `protobuf:"bytes,2,opt,name=two,proto3" json:"two,omitempty"` + Child *ExampleNestedGrandchild `protobuf:"bytes,3,opt,name=child,proto3" json:"child,omitempty"` +} + +func (x *ExampleNestedMessage) Reset() { + *x = ExampleNestedMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExampleNestedMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExampleNestedMessage) ProtoMessage() {} + +func (x *ExampleNestedMessage) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_proto_msgTypes[4] + 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 ExampleNestedMessage.ProtoReflect.Descriptor instead. +func (*ExampleNestedMessage) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{4} +} + +func (x *ExampleNestedMessage) GetOne() *ywrapper.StringValue { + if x != nil { + return x.One + } + return nil +} + +func (x *ExampleNestedMessage) GetTwo() *ywrapper.StringValue { + if x != nil { + return x.Two + } + return nil +} + +func (x *ExampleNestedMessage) GetChild() *ExampleNestedGrandchild { + if x != nil { + return x.Child + } + return nil +} + +type ExampleNestedGrandchild struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + One *ywrapper.StringValue `protobuf:"bytes,1,opt,name=one,proto3" json:"one,omitempty"` + Two *ywrapper.StringValue `protobuf:"bytes,2,opt,name=two,proto3" json:"two,omitempty"` +} + +func (x *ExampleNestedGrandchild) Reset() { + *x = ExampleNestedGrandchild{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExampleNestedGrandchild) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExampleNestedGrandchild) ProtoMessage() {} + +func (x *ExampleNestedGrandchild) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_proto_msgTypes[5] + 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 ExampleNestedGrandchild.ProtoReflect.Descriptor instead. +func (*ExampleNestedGrandchild) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{5} +} + +func (x *ExampleNestedGrandchild) GetOne() *ywrapper.StringValue { + if x != nil { + return x.One + } + return nil +} + +func (x *ExampleNestedGrandchild) GetTwo() *ywrapper.StringValue { + if x != nil { + return x.Two + } + return nil +} + type ExampleUnion struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -460,7 +587,7 @@ type ExampleUnion struct { func (x *ExampleUnion) Reset() { *x = ExampleUnion{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[4] + mi := &file_exschemapath_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -473,7 +600,7 @@ func (x *ExampleUnion) String() string { func (*ExampleUnion) ProtoMessage() {} func (x *ExampleUnion) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[4] + mi := &file_exschemapath_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -486,7 +613,7 @@ func (x *ExampleUnion) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleUnion.ProtoReflect.Descriptor instead. func (*ExampleUnion) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{4} + return file_exschemapath_proto_rawDescGZIP(), []int{6} } func (x *ExampleUnion) GetStr() string { @@ -521,7 +648,7 @@ type ExampleMessageChild struct { func (x *ExampleMessageChild) Reset() { *x = ExampleMessageChild{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[5] + mi := &file_exschemapath_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -534,7 +661,7 @@ func (x *ExampleMessageChild) String() string { func (*ExampleMessageChild) ProtoMessage() {} func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[5] + mi := &file_exschemapath_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -547,7 +674,7 @@ func (x *ExampleMessageChild) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageChild.ProtoReflect.Descriptor instead. func (*ExampleMessageChild) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{5} + return file_exschemapath_proto_rawDescGZIP(), []int{7} } func (x *ExampleMessageChild) GetStr() *ywrapper.StringValue { @@ -569,7 +696,7 @@ type ExampleMessageKey struct { func (x *ExampleMessageKey) Reset() { *x = ExampleMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[6] + mi := &file_exschemapath_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -582,7 +709,7 @@ func (x *ExampleMessageKey) String() string { func (*ExampleMessageKey) ProtoMessage() {} func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[6] + mi := &file_exschemapath_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -595,7 +722,7 @@ func (x *ExampleMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageKey.ProtoReflect.Descriptor instead. func (*ExampleMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{6} + return file_exschemapath_proto_rawDescGZIP(), []int{8} } func (x *ExampleMessageKey) GetSingleKey() string { @@ -624,7 +751,7 @@ type ExampleMessageListMember struct { func (x *ExampleMessageListMember) Reset() { *x = ExampleMessageListMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[7] + mi := &file_exschemapath_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -637,7 +764,7 @@ func (x *ExampleMessageListMember) String() string { func (*ExampleMessageListMember) ProtoMessage() {} func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[7] + mi := &file_exschemapath_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -650,7 +777,7 @@ func (x *ExampleMessageListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageListMember.ProtoReflect.Descriptor instead. func (*ExampleMessageListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{7} + return file_exschemapath_proto_rawDescGZIP(), []int{9} } func (x *ExampleMessageListMember) GetStr() *ywrapper.StringValue { @@ -679,7 +806,7 @@ type NestedListKey struct { func (x *NestedListKey) Reset() { *x = NestedListKey{} 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) } @@ -692,7 +819,7 @@ func (x *NestedListKey) String() string { func (*NestedListKey) ProtoMessage() {} func (x *NestedListKey) 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 { @@ -705,7 +832,7 @@ func (x *NestedListKey) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListKey.ProtoReflect.Descriptor instead. func (*NestedListKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{8} + return file_exschemapath_proto_rawDescGZIP(), []int{10} } func (x *NestedListKey) GetKeyOne() string { @@ -733,7 +860,7 @@ type NestedListMember struct { func (x *NestedListMember) Reset() { *x = NestedListMember{} 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) } @@ -746,7 +873,7 @@ func (x *NestedListMember) String() string { func (*NestedListMember) ProtoMessage() {} func (x *NestedListMember) 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 { @@ -759,7 +886,7 @@ func (x *NestedListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use NestedListMember.ProtoReflect.Descriptor instead. func (*NestedListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{9} + return file_exschemapath_proto_rawDescGZIP(), []int{11} } func (x *NestedListMember) GetStr() *ywrapper.StringValue { @@ -782,7 +909,7 @@ type ExampleMessageMultiKey struct { func (x *ExampleMessageMultiKey) Reset() { *x = ExampleMessageMultiKey{} 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) } @@ -795,7 +922,7 @@ func (x *ExampleMessageMultiKey) String() string { func (*ExampleMessageMultiKey) ProtoMessage() {} func (x *ExampleMessageMultiKey) 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 { @@ -808,7 +935,7 @@ func (x *ExampleMessageMultiKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ExampleMessageMultiKey.ProtoReflect.Descriptor instead. func (*ExampleMessageMultiKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{10} + return file_exschemapath_proto_rawDescGZIP(), []int{12} } func (x *ExampleMessageMultiKey) GetIndex() uint32 { @@ -843,7 +970,7 @@ type MultiKeyListMember struct { func (x *MultiKeyListMember) Reset() { *x = MultiKeyListMember{} 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) } @@ -856,7 +983,7 @@ func (x *MultiKeyListMember) String() string { func (*MultiKeyListMember) ProtoMessage() {} func (x *MultiKeyListMember) 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 { @@ -869,7 +996,7 @@ func (x *MultiKeyListMember) ProtoReflect() protoreflect.Message { // Deprecated: Use MultiKeyListMember.ProtoReflect.Descriptor instead. func (*MultiKeyListMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{11} + return file_exschemapath_proto_rawDescGZIP(), []int{13} } func (x *MultiKeyListMember) GetChild() *ywrapper.StringValue { @@ -900,7 +1027,7 @@ type InvalidMessage struct { func (x *InvalidMessage) Reset() { *x = InvalidMessage{} 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) } @@ -913,7 +1040,7 @@ func (x *InvalidMessage) String() string { func (*InvalidMessage) ProtoMessage() {} func (x *InvalidMessage) 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 { @@ -926,7 +1053,7 @@ func (x *InvalidMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidMessage.ProtoReflect.Descriptor instead. func (*InvalidMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{12} + return file_exschemapath_proto_rawDescGZIP(), []int{14} } func (x *InvalidMessage) GetMapField() map[string]string { @@ -1006,6 +1133,53 @@ func (x *InvalidMessage) GetIkpk() []*InvalidKeyPathKey { return nil } +type InvalidAnnotationMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NoAnnotation string `protobuf:"bytes,1,opt,name=no_annotation,json=noAnnotation,proto3" json:"no_annotation,omitempty"` +} + +func (x *InvalidAnnotationMessage) Reset() { + *x = InvalidAnnotationMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_exschemapath_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InvalidAnnotationMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InvalidAnnotationMessage) ProtoMessage() {} + +func (x *InvalidAnnotationMessage) ProtoReflect() protoreflect.Message { + mi := &file_exschemapath_proto_msgTypes[15] + 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 InvalidAnnotationMessage.ProtoReflect.Descriptor instead. +func (*InvalidAnnotationMessage) Descriptor() ([]byte, []int) { + return file_exschemapath_proto_rawDescGZIP(), []int{15} +} + +func (x *InvalidAnnotationMessage) GetNoAnnotation() string { + if x != nil { + return x.NoAnnotation + } + return "" +} + type BadMessageKeyTwo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1017,7 +1191,7 @@ type BadMessageKeyTwo struct { func (x *BadMessageKeyTwo) Reset() { *x = BadMessageKeyTwo{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1030,7 +1204,7 @@ func (x *BadMessageKeyTwo) String() string { func (*BadMessageKeyTwo) ProtoMessage() {} func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[13] + mi := &file_exschemapath_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1043,7 +1217,7 @@ func (x *BadMessageKeyTwo) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKeyTwo.ProtoReflect.Descriptor instead. func (*BadMessageKeyTwo) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{13} + return file_exschemapath_proto_rawDescGZIP(), []int{16} } func (x *BadMessageKeyTwo) GetKey() string { @@ -1064,7 +1238,7 @@ type BadMessageKey struct { func (x *BadMessageKey) Reset() { *x = BadMessageKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1077,7 +1251,7 @@ func (x *BadMessageKey) String() string { func (*BadMessageKey) ProtoMessage() {} func (x *BadMessageKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[14] + mi := &file_exschemapath_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1090,7 +1264,7 @@ func (x *BadMessageKey) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageKey.ProtoReflect.Descriptor instead. func (*BadMessageKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{14} + return file_exschemapath_proto_rawDescGZIP(), []int{17} } func (x *BadMessageKey) GetBadKeyType() float32 { @@ -1112,7 +1286,7 @@ type BadMessageMember struct { func (x *BadMessageMember) Reset() { *x = BadMessageMember{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1125,7 +1299,7 @@ func (x *BadMessageMember) String() string { func (*BadMessageMember) ProtoMessage() {} func (x *BadMessageMember) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[15] + mi := &file_exschemapath_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1138,7 +1312,7 @@ func (x *BadMessageMember) ProtoReflect() protoreflect.Message { // Deprecated: Use BadMessageMember.ProtoReflect.Descriptor instead. func (*BadMessageMember) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{15} + return file_exschemapath_proto_rawDescGZIP(), []int{18} } func (x *BadMessageMember) GetKey() string { @@ -1166,7 +1340,7 @@ type BadKeyPathMessage struct { func (x *BadKeyPathMessage) Reset() { *x = BadKeyPathMessage{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1179,7 +1353,7 @@ func (x *BadKeyPathMessage) String() string { func (*BadKeyPathMessage) ProtoMessage() {} func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[16] + mi := &file_exschemapath_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1192,7 +1366,7 @@ func (x *BadKeyPathMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use BadKeyPathMessage.ProtoReflect.Descriptor instead. func (*BadKeyPathMessage) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{16} + return file_exschemapath_proto_rawDescGZIP(), []int{19} } func (x *BadKeyPathMessage) GetKey() string { @@ -1213,7 +1387,7 @@ type InvalidKeyPathKey struct { func (x *InvalidKeyPathKey) Reset() { *x = InvalidKeyPathKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1226,7 +1400,7 @@ func (x *InvalidKeyPathKey) String() string { func (*InvalidKeyPathKey) ProtoMessage() {} func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[17] + mi := &file_exschemapath_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1239,7 +1413,7 @@ func (x *InvalidKeyPathKey) ProtoReflect() protoreflect.Message { // Deprecated: Use InvalidKeyPathKey.ProtoReflect.Descriptor instead. func (*InvalidKeyPathKey) Descriptor() ([]byte, []int) { - return file_exschemapath_proto_rawDescGZIP(), []int{17} + return file_exschemapath_proto_rawDescGZIP(), []int{20} } func (x *InvalidKeyPathKey) GetKey() string { @@ -1261,7 +1435,7 @@ type Root_InterfaceKey struct { func (x *Root_InterfaceKey) Reset() { *x = Root_InterfaceKey{} if protoimpl.UnsafeEnabled { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1274,7 +1448,7 @@ func (x *Root_InterfaceKey) String() string { func (*Root_InterfaceKey) ProtoMessage() {} func (x *Root_InterfaceKey) ProtoReflect() protoreflect.Message { - mi := &file_exschemapath_proto_msgTypes[18] + mi := &file_exschemapath_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1347,7 +1521,7 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x2e, 0x79, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x1a, 0x82, 0x41, 0x17, 0x2f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xb9, 0x0a, 0x0a, 0x0e, + 0x65, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x81, 0x0b, 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, @@ -1430,162 +1604,194 @@ var file_exschemapath_proto_rawDesc = []byte{ 0x61, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x15, 0x82, 0x41, 0x0f, 0x2f, 0x6c, 0x65, 0x61, 0x66, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0xe0, 0x49, 0x01, 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x66, 0x6c, - 0x69, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, - 0x66, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 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, 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, 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, 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, 0x73, 0x74, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 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, 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, 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, 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 ( @@ -1601,83 +1807,92 @@ func file_exschemapath_proto_rawDescGZIP() []byte { } var file_exschemapath_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_exschemapath_proto_msgTypes = make([]protoimpl.MessageInfo, 23) var file_exschemapath_proto_goTypes = []interface{}{ (ExampleEnum)(0), // 0: exschemapath.ExampleEnum (*Root)(nil), // 1: exschemapath.Root (*Interface)(nil), // 2: exschemapath.Interface (*System)(nil), // 3: exschemapath.System (*ExampleMessage)(nil), // 4: exschemapath.ExampleMessage - (*ExampleUnion)(nil), // 5: exschemapath.ExampleUnion - (*ExampleMessageChild)(nil), // 6: exschemapath.ExampleMessageChild - (*ExampleMessageKey)(nil), // 7: exschemapath.ExampleMessageKey - (*ExampleMessageListMember)(nil), // 8: exschemapath.ExampleMessageListMember - (*NestedListKey)(nil), // 9: exschemapath.NestedListKey - (*NestedListMember)(nil), // 10: exschemapath.NestedListMember - (*ExampleMessageMultiKey)(nil), // 11: exschemapath.ExampleMessageMultiKey - (*MultiKeyListMember)(nil), // 12: exschemapath.MultiKeyListMember - (*InvalidMessage)(nil), // 13: exschemapath.InvalidMessage - (*BadMessageKeyTwo)(nil), // 14: exschemapath.BadMessageKeyTwo - (*BadMessageKey)(nil), // 15: exschemapath.BadMessageKey - (*BadMessageMember)(nil), // 16: exschemapath.BadMessageMember - (*BadKeyPathMessage)(nil), // 17: exschemapath.BadKeyPathMessage - (*InvalidKeyPathKey)(nil), // 18: exschemapath.InvalidKeyPathKey - (*Root_InterfaceKey)(nil), // 19: exschemapath.Root.InterfaceKey - nil, // 20: exschemapath.InvalidMessage.MapFieldEntry - (*ywrapper.StringValue)(nil), // 21: ywrapper.StringValue - (*ywrapper.BoolValue)(nil), // 22: ywrapper.BoolValue - (*ywrapper.BytesValue)(nil), // 23: ywrapper.BytesValue - (*ywrapper.Decimal64Value)(nil), // 24: ywrapper.Decimal64Value - (*ywrapper.IntValue)(nil), // 25: ywrapper.IntValue - (*ywrapper.UintValue)(nil), // 26: ywrapper.UintValue + (*ExampleNestedMessage)(nil), // 5: exschemapath.ExampleNestedMessage + (*ExampleNestedGrandchild)(nil), // 6: exschemapath.ExampleNestedGrandchild + (*ExampleUnion)(nil), // 7: exschemapath.ExampleUnion + (*ExampleMessageChild)(nil), // 8: exschemapath.ExampleMessageChild + (*ExampleMessageKey)(nil), // 9: exschemapath.ExampleMessageKey + (*ExampleMessageListMember)(nil), // 10: exschemapath.ExampleMessageListMember + (*NestedListKey)(nil), // 11: exschemapath.NestedListKey + (*NestedListMember)(nil), // 12: exschemapath.NestedListMember + (*ExampleMessageMultiKey)(nil), // 13: exschemapath.ExampleMessageMultiKey + (*MultiKeyListMember)(nil), // 14: exschemapath.MultiKeyListMember + (*InvalidMessage)(nil), // 15: exschemapath.InvalidMessage + (*InvalidAnnotationMessage)(nil), // 16: exschemapath.InvalidAnnotationMessage + (*BadMessageKeyTwo)(nil), // 17: exschemapath.BadMessageKeyTwo + (*BadMessageKey)(nil), // 18: exschemapath.BadMessageKey + (*BadMessageMember)(nil), // 19: exschemapath.BadMessageMember + (*BadKeyPathMessage)(nil), // 20: exschemapath.BadKeyPathMessage + (*InvalidKeyPathKey)(nil), // 21: exschemapath.InvalidKeyPathKey + (*Root_InterfaceKey)(nil), // 22: exschemapath.Root.InterfaceKey + nil, // 23: exschemapath.InvalidMessage.MapFieldEntry + (*ywrapper.StringValue)(nil), // 24: ywrapper.StringValue + (*ywrapper.BoolValue)(nil), // 25: ywrapper.BoolValue + (*ywrapper.BytesValue)(nil), // 26: ywrapper.BytesValue + (*ywrapper.Decimal64Value)(nil), // 27: ywrapper.Decimal64Value + (*ywrapper.IntValue)(nil), // 28: ywrapper.IntValue + (*ywrapper.UintValue)(nil), // 29: ywrapper.UintValue } var file_exschemapath_proto_depIdxs = []int32{ 3, // 0: exschemapath.Root.system:type_name -> exschemapath.System - 19, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey - 21, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue - 21, // 3: exschemapath.System.hostname:type_name -> ywrapper.StringValue - 22, // 4: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue - 23, // 5: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue - 24, // 6: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value - 25, // 7: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue - 21, // 8: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue - 26, // 9: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue - 6, // 10: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild - 7, // 11: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey - 11, // 12: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey + 22, // 1: exschemapath.Root.interface:type_name -> exschemapath.Root.InterfaceKey + 24, // 2: exschemapath.Interface.description:type_name -> ywrapper.StringValue + 24, // 3: exschemapath.System.hostname:type_name -> ywrapper.StringValue + 25, // 4: exschemapath.ExampleMessage.bo:type_name -> ywrapper.BoolValue + 26, // 5: exschemapath.ExampleMessage.by:type_name -> ywrapper.BytesValue + 27, // 6: exschemapath.ExampleMessage.de:type_name -> ywrapper.Decimal64Value + 28, // 7: exschemapath.ExampleMessage.in:type_name -> ywrapper.IntValue + 24, // 8: exschemapath.ExampleMessage.str:type_name -> ywrapper.StringValue + 29, // 9: exschemapath.ExampleMessage.ui:type_name -> ywrapper.UintValue + 8, // 10: exschemapath.ExampleMessage.ex:type_name -> exschemapath.ExampleMessageChild + 9, // 11: exschemapath.ExampleMessage.em:type_name -> exschemapath.ExampleMessageKey + 13, // 12: exschemapath.ExampleMessage.multi:type_name -> exschemapath.ExampleMessageMultiKey 0, // 13: exschemapath.ExampleMessage.en:type_name -> exschemapath.ExampleEnum - 21, // 14: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue - 21, // 15: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue - 22, // 16: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue - 25, // 17: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue - 26, // 18: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue - 23, // 19: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue - 24, // 20: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value - 5, // 21: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion - 0, // 22: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum - 21, // 23: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue - 8, // 24: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember - 21, // 25: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue - 9, // 26: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey - 10, // 27: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember - 21, // 28: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue - 12, // 29: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember - 21, // 30: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue - 20, // 31: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry - 7, // 32: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey - 15, // 33: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey - 16, // 34: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember - 21, // 35: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue - 14, // 36: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo - 13, // 37: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage - 17, // 38: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage - 18, // 39: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey - 2, // 40: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface - 41, // [41:41] is the sub-list for method output_type - 41, // [41:41] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 24, // 14: exschemapath.ExampleMessage.compress:type_name -> ywrapper.StringValue + 24, // 15: exschemapath.ExampleMessage.leaflist_string:type_name -> ywrapper.StringValue + 25, // 16: exschemapath.ExampleMessage.leaflist_bool:type_name -> ywrapper.BoolValue + 28, // 17: exschemapath.ExampleMessage.leaflist_int:type_name -> ywrapper.IntValue + 29, // 18: exschemapath.ExampleMessage.leaflist_uint:type_name -> ywrapper.UintValue + 26, // 19: exschemapath.ExampleMessage.leaflist_bytes:type_name -> ywrapper.BytesValue + 27, // 20: exschemapath.ExampleMessage.leaflist_decimal64:type_name -> ywrapper.Decimal64Value + 7, // 21: exschemapath.ExampleMessage.leaflist_union:type_name -> exschemapath.ExampleUnion + 5, // 22: exschemapath.ExampleMessage.nested:type_name -> exschemapath.ExampleNestedMessage + 24, // 23: exschemapath.ExampleNestedMessage.one:type_name -> ywrapper.StringValue + 24, // 24: exschemapath.ExampleNestedMessage.two:type_name -> ywrapper.StringValue + 6, // 25: exschemapath.ExampleNestedMessage.child:type_name -> exschemapath.ExampleNestedGrandchild + 24, // 26: exschemapath.ExampleNestedGrandchild.one:type_name -> ywrapper.StringValue + 24, // 27: exschemapath.ExampleNestedGrandchild.two:type_name -> ywrapper.StringValue + 0, // 28: exschemapath.ExampleUnion.enum:type_name -> exschemapath.ExampleEnum + 24, // 29: exschemapath.ExampleMessageChild.str:type_name -> ywrapper.StringValue + 10, // 30: exschemapath.ExampleMessageKey.member:type_name -> exschemapath.ExampleMessageListMember + 24, // 31: exschemapath.ExampleMessageListMember.str:type_name -> ywrapper.StringValue + 11, // 32: exschemapath.ExampleMessageListMember.child_list:type_name -> exschemapath.NestedListKey + 12, // 33: exschemapath.NestedListKey.field:type_name -> exschemapath.NestedListMember + 24, // 34: exschemapath.NestedListMember.str:type_name -> ywrapper.StringValue + 14, // 35: exschemapath.ExampleMessageMultiKey.member:type_name -> exschemapath.MultiKeyListMember + 24, // 36: exschemapath.MultiKeyListMember.child:type_name -> ywrapper.StringValue + 23, // 37: exschemapath.InvalidMessage.map_field:type_name -> exschemapath.InvalidMessage.MapFieldEntry + 9, // 38: exschemapath.InvalidMessage.km:type_name -> exschemapath.ExampleMessageKey + 18, // 39: exschemapath.InvalidMessage.bk:type_name -> exschemapath.BadMessageKey + 19, // 40: exschemapath.InvalidMessage.bm:type_name -> exschemapath.BadMessageMember + 24, // 41: exschemapath.InvalidMessage.invalid_annotated_path:type_name -> ywrapper.StringValue + 17, // 42: exschemapath.InvalidMessage.bk_two:type_name -> exschemapath.BadMessageKeyTwo + 15, // 43: exschemapath.InvalidMessage.multiple_annotations_for_container:type_name -> exschemapath.InvalidMessage + 20, // 44: exschemapath.InvalidMessage.bkpm:type_name -> exschemapath.BadKeyPathMessage + 21, // 45: exschemapath.InvalidMessage.ikpk:type_name -> exschemapath.InvalidKeyPathKey + 2, // 46: exschemapath.Root.InterfaceKey.interface:type_name -> exschemapath.Interface + 47, // [47:47] is the sub-list for method output_type + 47, // [47:47] is the sub-list for method input_type + 47, // [47:47] is the sub-list for extension type_name + 47, // [47:47] is the sub-list for extension extendee + 0, // [0:47] is the sub-list for field type_name } func init() { file_exschemapath_proto_init() } @@ -1735,7 +1950,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleUnion); i { + switch v := v.(*ExampleNestedMessage); i { case 0: return &v.state case 1: @@ -1747,7 +1962,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageChild); i { + switch v := v.(*ExampleNestedGrandchild); i { case 0: return &v.state case 1: @@ -1759,7 +1974,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageKey); i { + switch v := v.(*ExampleUnion); i { case 0: return &v.state case 1: @@ -1771,7 +1986,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageListMember); i { + switch v := v.(*ExampleMessageChild); i { case 0: return &v.state case 1: @@ -1783,7 +1998,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListKey); i { + switch v := v.(*ExampleMessageKey); i { case 0: return &v.state case 1: @@ -1795,7 +2010,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NestedListMember); i { + switch v := v.(*ExampleMessageListMember); i { case 0: return &v.state case 1: @@ -1807,7 +2022,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExampleMessageMultiKey); i { + switch v := v.(*NestedListKey); i { case 0: return &v.state case 1: @@ -1819,7 +2034,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MultiKeyListMember); i { + switch v := v.(*NestedListMember); i { case 0: return &v.state case 1: @@ -1831,7 +2046,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidMessage); i { + switch v := v.(*ExampleMessageMultiKey); i { case 0: return &v.state case 1: @@ -1843,7 +2058,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKeyTwo); i { + switch v := v.(*MultiKeyListMember); i { case 0: return &v.state case 1: @@ -1855,7 +2070,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageKey); i { + switch v := v.(*InvalidMessage); i { case 0: return &v.state case 1: @@ -1867,7 +2082,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadMessageMember); i { + switch v := v.(*InvalidAnnotationMessage); i { case 0: return &v.state case 1: @@ -1879,7 +2094,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BadKeyPathMessage); i { + switch v := v.(*BadMessageKeyTwo); i { case 0: return &v.state case 1: @@ -1891,7 +2106,7 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InvalidKeyPathKey); i { + switch v := v.(*BadMessageKey); i { case 0: return &v.state case 1: @@ -1903,6 +2118,42 @@ func file_exschemapath_proto_init() { } } file_exschemapath_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BadMessageMember); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_exschemapath_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BadKeyPathMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_exschemapath_proto_msgTypes[20].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[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Root_InterfaceKey); i { case 0: return &v.state @@ -1925,7 +2176,7 @@ func file_exschemapath_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_exschemapath_proto_rawDesc, NumEnums: 1, - NumMessages: 20, + NumMessages: 23, NumExtensions: 0, NumServices: 0, }, diff --git a/protomap/testdata/exschemapath/exschemapath.proto b/protomap/testdata/exschemapath/exschemapath.proto index f496e27e2..65b0e7db0 100644 --- a/protomap/testdata/exschemapath/exschemapath.proto +++ b/protomap/testdata/exschemapath/exschemapath.proto @@ -47,8 +47,21 @@ message ExampleMessage { repeated ywrapper.BytesValue leaflist_bytes = 19 [(yext.schemapath) = "/leaflist-bytes", (yext.leaflist) = true]; 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"]; } +message ExampleNestedMessage { + ywrapper.StringValue one = 1 [(yext.schemapath) = "/nested/one"]; + ywrapper.StringValue two = 2 [(yext.schemapath) = "/nested/two"]; + ExampleNestedGrandchild child = 3 [(yext.schemapath) = "/nested/child"]; +} + +message ExampleNestedGrandchild { + ywrapper.StringValue one = 1 [(yext.schemapath) = "/nested/child/one"]; + ywrapper.StringValue two = 2 [(yext.schemapath) = "/nested/child/two"]; +} + + message ExampleUnion { string str = 1 [(yext.schemapath) = "/leaflist-union"]; uint64 uint = 2 [(yext.schemapath) = "/leaflist-union"]; @@ -109,6 +122,10 @@ message InvalidMessage { repeated InvalidKeyPathKey ikpk = 11 [(yext.schemapath) = "/nine"]; } +message InvalidAnnotationMessage { + string no_annotation = 1; +} + message BadMessageKeyTwo { string key = 1 [(yext.schemapath) = "/one|/one/two"]; } @@ -128,4 +145,4 @@ message BadKeyPathMessage { message InvalidKeyPathKey { string key = 1 [(yext.schemapath) = "/one[two]"]; -} \ No newline at end of file +}