diff --git a/cmd/go2proto/main.go b/cmd/go2proto/main.go index 404f8eb46..26843078a 100644 --- a/cmd/go2proto/main.go +++ b/cmd/go2proto/main.go @@ -210,12 +210,22 @@ type Field struct { OriginType string // The original type of the field, eg. int, string, float32, etc. ProtoType string // The type of the field in the generated .proto file. ProtoGoType string // The type of the field in the generated Go protobuf code. eg. int -> int64. - Optional bool - Repeated bool - Pointer bool - Import string // required import to create this type - Kind Kind + Optional bool + OptionalWrapper bool // optional as alecthomas/types/optional.Option + Repeated bool + Pointer bool + + Import string // required import to create this type + Converter *TypeConverter + Kind Kind +} + +type TypeConverter struct { + // FromProto returns a result[*Type] containing a pointer to the Go type and a potential error + FromProto func(variable string) string + // ToProto returns a pointer to the proto type. + ToProto func(variable string) string } var reservedWords = map[string]string{ @@ -499,7 +509,21 @@ func extract(config Config, pkg *PkgRefs) (File, []string, error) { return state.Dest, state.GoImports, nil } +func isOptional(named *types.Named) bool { + path := named.Origin().Obj().Pkg().Path() + name := named.Origin().Obj().Name() + return path == "github.com/alecthomas/types/optional" && name == "Option" +} + func (s *State) extractDecl(obj types.Object, named *types.Named) error { + if isOptional(named) { + u := named.TypeArgs().At(0) + if nt, ok := u.(*types.Named); ok { + return s.extractDecl(nt.Obj(), nt) + } + return nil + } + if named.TypeParams() != nil { return genErrorf(obj.Pos(), "generic types are not supported") } @@ -582,15 +606,21 @@ func (s *State) populateFields(decl *Message, n *types.Named) error { field := &Field{ Name: rf.Name(), } - if err := s.applyFieldType(rf.Type(), field); err != nil { + t := rf.Type() + if nt, ok := t.(*types.Named); ok && isOptional(nt) { + field.Optional = true + field.OptionalWrapper = true + t = nt.TypeArgs().At(0) + } + if err := s.applyFieldType(t, field); err != nil { return fmt.Errorf("%s: %w", rf.Name(), err) } field.ID = tag.ID - field.Optional = tag.Optional + field.Optional = tag.Optional || field.Optional if field.Optional && field.Repeated { return genErrorf(n.Obj().Pos(), "%s: repeated optional fields are not supported", rf.Name()) } - if nt, ok := rf.Type().(*types.Named); ok { + if nt, ok := t.(*types.Named); ok { if err := s.extractDecl(rf, nt); err != nil { return fmt.Errorf("%s: %w", rf.Name(), err) } @@ -598,11 +628,129 @@ func (s *State) populateFields(decl *Message, n *types.Named) error { if field.Kind == KindUnspecified { field.Kind = s.Dest.KindOf(rf.Type(), field.OriginType) } + + s.populateConverters(field) + decl.Fields = append(decl.Fields, field) } return errf() } +func (f *Field) ToProto() string { + // TODO: Refactor types away from here + if f.Optional { + if f.OptionalWrapper { + if f.ProtoType == "google.protobuf.Timestamp" { + return "setNil(timestamppb.New(orZero(optionalOrNil(x." + f.Name + "))), optionalOrNil(x." + f.Name + "))" + } else if f.ProtoType == "google.protobuf.Duration" { + return "setNil(durationpb.New(orZero(optionalOrNil(x." + f.Name + "))), optionalOrNil(x." + f.Name + "))" + } else if f.Kind == KindEnum || f.Kind == KindMessage { + return "optionalOrNil(x." + f.Name + ").ToProto()" + } + return "setNil(ptr(" + f.Converter.ToProto("orZero(optionalOrNil(x."+f.Name+"))") + "), optionalOrNil(x." + f.Name + "))" + } else if f.Kind == KindEnum || f.Kind == KindMessage || f.Kind == KindSumType { + return f.Converter.ToProto("x." + f.Name) + } else if f.Pointer { + return "setNil(ptr(" + f.Converter.ToProto("orZero(x."+f.Name+")") + "), x." + f.Name + ")" + } else if f.ProtoType == "google.protobuf.Timestamp" || f.ProtoType == "google.protobuf.Duration" { + return f.Converter.ToProto("x." + f.Name) + } + return "ptr(" + f.Converter.ToProto("x."+f.Name) + ")" + } else if f.Repeated { + if f.Pointer { + return "sliceMap(x." + f.Name + ", func(v *" + f.OriginType + ") " + f.ProtoGoType + " { return " + f.Converter.ToProto("v") + " })" + } + return "sliceMap(x." + f.Name + ", func(v " + f.OriginType + ") " + f.ProtoGoType + " { return " + f.Converter.ToProto("v") + " })" + } + + return f.Converter.ToProto("x." + f.Name) +} + +func (f *Field) FromProto() string { + // input are result[*T] + input := f.Converter.FromProto("v." + f.EscapedName()) + if f.Optional { + if f.OptionalWrapper { + return "optionalR(" + input + ")" + } + if !f.Pointer { + return "orZeroR(" + input + ")" + } + return input + } else if f.Repeated { + if !f.Pointer { + return "sliceMapR(v." + f.EscapedName() + ", func(v " + f.ProtoGoType + ") result[" + f.OriginType + "] { return orZeroR(" + f.Converter.FromProto("v") + ") })" + } + return "sliceMapR(v." + f.EscapedName() + ", func(v " + f.ProtoGoType + ") result[*" + f.OriginType + "] { return " + f.Converter.FromProto("v") + " })" + } else if !f.Pointer { + return "orZeroR(" + input + ")" + } + return input +} + +func (s *State) populateConverters(field *Field) { + if field.ProtoType == "google.protobuf.Timestamp" { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { return fmt.Sprintf("toResult(setNil(ptr(%s.AsTime()), %s), nil)", v, v) }, + ToProto: func(v string) string { return fmt.Sprintf("timestamppb.New(%s)", v) }, + } + } else if field.ProtoType == "google.protobuf.Duration" { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { return fmt.Sprintf("toResult(setNil(ptr(%s.AsDuration()), %s), nil)", v, v) }, + ToProto: func(v string) string { return fmt.Sprintf("durationpb.New(%s)", v) }, + } + } else if field.Kind == KindMessage { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { return fmt.Sprintf("toResult(%sFromProto(%s))", field.OriginType, v) }, + ToProto: func(v string) string { return fmt.Sprintf("%s.ToProto()", v) }, + } + } else if field.Kind == KindEnum { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { return fmt.Sprintf("ptrR(toResult(%sFromProto(%s)))", field.OriginType, v) }, + ToProto: func(v string) string { return fmt.Sprintf("%s.ToProto()", v) }, + } + } else if field.Kind == KindTextMarshaler { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { + if field.Pointer { + return fmt.Sprintf("toResult(unmarshallText([]byte(%s), out.%s))", v, field.Name) + } + return fmt.Sprintf("toResult(unmarshallText([]byte(%s), &out.%s))", v, field.Name) + }, + ToProto: func(v string) string { return fmt.Sprintf("string(protoMust(%s.MarshalText()))", v) }, + } + } else if field.Kind == KindBinaryMarshaler { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { + if field.Pointer { + return fmt.Sprintf("toResult(unmarshallBinary(%s, out.%s))", v, field.Name) + } + return fmt.Sprintf("toResult(unmarshallBinary(%s, &out.%s))", v, field.Name) + }, + ToProto: func(v string) string { return fmt.Sprintf("protoMust(%s.MarshalBinary())", v) }, + } + } else if field.Kind == KindSumType { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { return fmt.Sprintf("ptrR(toResult(%sFromProto(%s)))", field.OriginType, v) }, + ToProto: func(v string) string { return fmt.Sprintf("%sToProto(%s)", field.OriginType, v) }, + } + } else { + if field.Pointer || field.Optional { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { + return fmt.Sprintf("toResult(setNil(ptr(%s(orZero(%s))), %s), nil)", field.OriginType, v, v) + }, + ToProto: func(v string) string { return fmt.Sprintf("%s(%s)", field.ProtoGoType, v) }, + } + } else { + field.Converter = &TypeConverter{ + FromProto: func(v string) string { return fmt.Sprintf("toResult(ptr(%s(%s)), nil)", field.OriginType, v) }, + ToProto: func(v string) string { return fmt.Sprintf("%s(%s)", field.ProtoGoType, v) }, + } + } + } +} + func (s *State) extractSumType(obj types.Object, i *types.Interface) error { sumTypeName := obj.Name() if _, ok := s.Seen[sumTypeName]; ok { @@ -774,7 +922,7 @@ func (s *State) applyFieldType(t types.Type, field *Field) error { return err } field.ProtoType = t.Obj().Name() - field.ProtoGoType = protoName(t.Obj().Name()) + field.ProtoGoType = "*destpb." + protoName(t.Obj().Name()) field.OriginType = t.Obj().Name() } diff --git a/cmd/go2proto/testdata/go2proto.to.go b/cmd/go2proto/testdata/go2proto.to.go index 8afb9c535..eedba33d2 100644 --- a/cmd/go2proto/testdata/go2proto.to.go +++ b/cmd/go2proto/testdata/go2proto.to.go @@ -3,17 +3,29 @@ package testdata import "fmt" +import "encoding" import destpb "github.com/block/ftl/cmd/go2proto/testdata/testdatapb" -import "google.golang.org/protobuf/proto" import "google.golang.org/protobuf/types/known/timestamppb" import "google.golang.org/protobuf/types/known/durationpb" - -import "net/url" +import "github.com/alecthomas/types/optional" var _ fmt.Stringer var _ = timestamppb.Timestamp{} var _ = durationpb.Duration{} +type result[T any] struct { + Value T + Err error +} + +func toResult[T any](v T, err error) result[T] { + return result[T]{Value: v, Err: err} +} + +func (r result[T]) result() (T, error) { + return r.Value, r.Err +} + // protoSlice converts a slice of values to a slice of protobuf values. func protoSlice[P any, T interface{ ToProto() P }](values []T) []P { out := make([]P, len(values)) @@ -38,15 +50,16 @@ func sliceMap[T any, U any](values []T, f func(T) U) []U { return out } -func sliceMapErr[T any, U any](values []T, f func(T) (U, error)) ([]U, error) { - var err error +func sliceMapR[T any, U any](values []T, f func(T) result[U]) result[[]U] { out := make([]U, len(values)) for i, v := range values { - if out[i], err = f(v); err != nil { - return nil, err + r := f(v) + if r.Err != nil { + return result[[]U]{Err: r.Err} } + out[i] = r.Value } - return out, nil + return result[[]U]{Value: out} } func orZero[T any](v *T) T { @@ -56,13 +69,32 @@ func orZero[T any](v *T) T { return *v } -func ptr[T any, O any](v *O, o T) *T { - if v == nil { - return nil +func orZeroR[T any](v result[*T]) result[T] { + if v.Err != nil { + return result[T]{Err: v.Err} } + return result[T]{Value: orZero(v.Value)} +} + +func optionalOrNil[T any](v optional.Option[T]) *T { + if v.Ok() { + r := v.MustGet() + return &r + } + return nil +} + +func ptr[T any](o T) *T { return &o } +func ptrR[T any](o result[T]) result[*T] { + if o.Err != nil { + return result[*T]{Err: o.Err} + } + return result[*T]{Value: ptr(o.Value)} +} + func fromPtr[T any](v *T) T { if v == nil { return *new(T) @@ -70,6 +102,60 @@ func fromPtr[T any](v *T) T { return *v } +func fromPtrR[T any](v result[*T]) result[T] { + if v.Err != nil { + return result[T]{Err: v.Err} + } + return result[T]{Value: fromPtr(v.Value)} +} + +func optionalR[T any](r result[*T]) result[optional.Option[T]] { + if r.Err != nil { + return result[optional.Option[T]]{Err: r.Err} + } + return result[optional.Option[T]]{Value: optional.Ptr(r.Value)} +} + +func setNil[T, O any](v *T, o *O) *T { + if o == nil { + return nil + } + return v +} + +func setNilR[T, O any](v result[*T], o *O) result[*T] { + if v.Err != nil { + return v + } + return result[*T]{Value: setNil(v.Value, o)} +} + +type binaryUnmarshallable[T any] interface { + *T + encoding.BinaryUnmarshaler +} + +type textUnmarshallable[T any] interface { + *T + encoding.TextUnmarshaler +} + +func unmarshallBinary[T any, TPtr binaryUnmarshallable[T]](v []byte, f TPtr) (*T, error) { + var to T + toptr := (TPtr)(&to) + + err := toptr.UnmarshalBinary(v) + return &to, err +} + +func unmarshallText[T any, TPtr textUnmarshallable[T]](v []byte, f TPtr) (*T, error) { + var to T + toptr := (TPtr)(&to) + + err := toptr.UnmarshalText(v) + return &to, err +} + func (x Enum) ToProto() destpb.Enum { return destpb.Enum(x) } @@ -84,10 +170,12 @@ func (x *Message) ToProto() *destpb.Message { return nil } return &destpb.Message{ - Time: timestamppb.New(x.Time), - Duration: durationpb.New(x.Duration), - Invalid: bool(x.Invalid), - Nested: x.Nested.ToProto(), + Time: timestamppb.New(x.Time), + OptTime: timestamppb.New(x.OptTime), + Duration: durationpb.New(x.Duration), + Invalid: bool(x.Invalid), + Nested: x.Nested.ToProto(), + RepeatedNested: sliceMap(x.RepeatedNested, func(v Nested) *destpb.Nested { return v.ToProto() }), } } @@ -97,13 +185,29 @@ func MessageFromProto(v *destpb.Message) (out *Message, err error) { } out = &Message{} - out.Time = v.Time.AsTime() - out.Duration = v.Duration.AsDuration() - out.Invalid = bool(v.Invalid) - if fieldNested, err := NestedFromProto(v.Nested); err != nil { + out.Time, err = orZeroR(toResult(setNil(ptr(v.Time.AsTime()), v.Time), nil)).result() + if err != nil { + return nil, fmt.Errorf("Time: %w", err) + } + out.OptTime, err = orZeroR(toResult(setNil(ptr(v.OptTime.AsTime()), v.OptTime), nil)).result() + if err != nil { + return nil, fmt.Errorf("OptTime: %w", err) + } + out.Duration, err = orZeroR(toResult(setNil(ptr(v.Duration.AsDuration()), v.Duration), nil)).result() + if err != nil { + return nil, fmt.Errorf("Duration: %w", err) + } + out.Invalid, err = orZeroR(toResult(ptr(bool(v.Invalid)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Invalid: %w", err) + } + out.Nested, err = orZeroR(toResult(NestedFromProto(v.Nested))).result() + if err != nil { return nil, fmt.Errorf("Nested: %w", err) - } else { - out.Nested = fromPtr(fieldNested) + } + out.RepeatedNested, err = sliceMapR(v.RepeatedNested, func(v *destpb.Nested) result[Nested] { return orZeroR(toResult(NestedFromProto(v))) }).result() + if err != nil { + return nil, fmt.Errorf("RepeatedNested: %w", err) } if err := out.Validate(); err != nil { return nil, err @@ -126,7 +230,10 @@ func NestedFromProto(v *destpb.Nested) (out *Nested, err error) { } out = &Nested{} - out.Nested = string(v.Nested) + out.Nested, err = orZeroR(toResult(ptr(string(v.Nested)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Nested: %w", err) + } return out, nil } @@ -135,19 +242,22 @@ func (x *Root) ToProto() *destpb.Root { return nil } return &destpb.Root{ - Int: int64(x.Int), - String_: string(x.String), - MessagePtr: x.MessagePtr.ToProto(), - Enum: x.Enum.ToProto(), - SumType: SumTypeToProto(x.SumType), - OptionalInt: proto.Int64(int64(x.OptionalInt)), - OptionalIntPtr: proto.Int64(int64(*x.OptionalIntPtr)), - OptionalMsg: x.OptionalMsg.ToProto(), - RepeatedInt: sliceMap(x.RepeatedInt, func(v int) int64 { return int64(v) }), - RepeatedMsg: protoSlice[*destpb.Message](x.RepeatedMsg), - Url: protoMust(x.URL.MarshalBinary()), - Key: string(protoMust(x.Key.MarshalText())), - ExternalRoot: string(protoMust(x.ExternalRoot.MarshalText())), + Int: int64(x.Int), + String_: string(x.String), + MessagePtr: x.MessagePtr.ToProto(), + Enum: x.Enum.ToProto(), + SumType: SumTypeToProto(x.SumType), + OptionalInt: ptr(int64(x.OptionalInt)), + OptionalIntPtr: setNil(ptr(int64(orZero(x.OptionalIntPtr))), x.OptionalIntPtr), + OptionalMsg: x.OptionalMsg.ToProto(), + RepeatedInt: sliceMap(x.RepeatedInt, func(v int) int64 { return int64(v) }), + RepeatedMsg: sliceMap(x.RepeatedMsg, func(v *Message) *destpb.Message { return v.ToProto() }), + Url: protoMust(x.URL.MarshalBinary()), + OptionalWrapper: setNil(ptr(string(orZero(optionalOrNil(x.OptionalWrapper)))), optionalOrNil(x.OptionalWrapper)), + ExternalRoot: string(protoMust(x.ExternalRoot.MarshalText())), + Key: string(protoMust(x.Key.MarshalText())), + OptionalTime: setNil(timestamppb.New(orZero(optionalOrNil(x.OptionalTime))), optionalOrNil(x.OptionalTime)), + OptionalMessage: optionalOrNil(x.OptionalMessage).ToProto(), } } @@ -157,36 +267,70 @@ func RootFromProto(v *destpb.Root) (out *Root, err error) { } out = &Root{} - out.Int = int(v.Int) - out.String = string(v.String_) - if out.MessagePtr, err = MessageFromProto(v.MessagePtr); err != nil { + out.Int, err = orZeroR(toResult(ptr(int(v.Int)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Int: %w", err) + } + out.String, err = orZeroR(toResult(ptr(string(v.String_)), nil)).result() + if err != nil { + return nil, fmt.Errorf("String: %w", err) + } + out.MessagePtr, err = toResult(MessageFromProto(v.MessagePtr)).result() + if err != nil { return nil, fmt.Errorf("MessagePtr: %w", err) } - if out.Enum, err = EnumFromProto(v.Enum); err != nil { + out.Enum, err = orZeroR(ptrR(toResult(EnumFromProto(v.Enum)))).result() + if err != nil { return nil, fmt.Errorf("Enum: %w", err) } - if out.SumType, err = SumTypeFromProto(v.SumType); err != nil { + out.SumType, err = orZeroR(ptrR(toResult(SumTypeFromProto(v.SumType)))).result() + if err != nil { return nil, fmt.Errorf("SumType: %w", err) } - out.OptionalInt = int(orZero(v.OptionalInt)) - out.OptionalIntPtr = ptr(v.OptionalIntPtr, int(orZero(v.OptionalIntPtr))) - if out.OptionalMsg, err = MessageFromProto(v.OptionalMsg); err != nil { + out.OptionalInt, err = orZeroR(toResult(setNil(ptr(int(orZero(v.OptionalInt))), v.OptionalInt), nil)).result() + if err != nil { + return nil, fmt.Errorf("OptionalInt: %w", err) + } + out.OptionalIntPtr, err = toResult(setNil(ptr(int(orZero(v.OptionalIntPtr))), v.OptionalIntPtr), nil).result() + if err != nil { + return nil, fmt.Errorf("OptionalIntPtr: %w", err) + } + out.OptionalMsg, err = toResult(MessageFromProto(v.OptionalMsg)).result() + if err != nil { return nil, fmt.Errorf("OptionalMsg: %w", err) } - out.RepeatedInt = sliceMap(v.RepeatedInt, func(v int64) int { return int(v) }) - if out.RepeatedMsg, err = sliceMapErr(v.RepeatedMsg, MessageFromProto); err != nil { + out.RepeatedInt, err = sliceMapR(v.RepeatedInt, func(v int64) result[int] { return orZeroR(toResult(ptr(int(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("RepeatedInt: %w", err) + } + out.RepeatedMsg, err = sliceMapR(v.RepeatedMsg, func(v *destpb.Message) result[*Message] { return toResult(MessageFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("RepeatedMsg: %w", err) } - out.URL = new(url.URL) - if err = out.URL.UnmarshalBinary(v.Url); err != nil { + out.URL, err = toResult(unmarshallBinary(v.Url, out.URL)).result() + if err != nil { return nil, fmt.Errorf("URL: %w", err) } - if err = out.Key.UnmarshalText([]byte(v.Key)); err != nil { - return nil, fmt.Errorf("Key: %w", err) + out.OptionalWrapper, err = optionalR(toResult(setNil(ptr(string(orZero(v.OptionalWrapper))), v.OptionalWrapper), nil)).result() + if err != nil { + return nil, fmt.Errorf("OptionalWrapper: %w", err) } - if err = out.ExternalRoot.UnmarshalText([]byte(v.ExternalRoot)); err != nil { + out.ExternalRoot, err = orZeroR(toResult(unmarshallText([]byte(v.ExternalRoot), &out.ExternalRoot))).result() + if err != nil { return nil, fmt.Errorf("ExternalRoot: %w", err) } + out.Key, err = orZeroR(toResult(unmarshallText([]byte(v.Key), &out.Key))).result() + if err != nil { + return nil, fmt.Errorf("Key: %w", err) + } + out.OptionalTime, err = optionalR(toResult(setNil(ptr(v.OptionalTime.AsTime()), v.OptionalTime), nil)).result() + if err != nil { + return nil, fmt.Errorf("OptionalTime: %w", err) + } + out.OptionalMessage, err = optionalR(toResult(MessageFromProto(v.OptionalMessage))).result() + if err != nil { + return nil, fmt.Errorf("OptionalMessage: %w", err) + } return out, nil } @@ -237,7 +381,10 @@ func SubSumTypeAFromProto(v *destpb.SubSumTypeA) (out *SubSumTypeA, err error) { } out = &SubSumTypeA{} - out.A = string(v.A) + out.A, err = orZeroR(toResult(ptr(string(v.A)), nil)).result() + if err != nil { + return nil, fmt.Errorf("A: %w", err) + } return out, nil } @@ -256,7 +403,10 @@ func SubSumTypeBFromProto(v *destpb.SubSumTypeB) (out *SubSumTypeB, err error) { } out = &SubSumTypeB{} - out.A = string(v.A) + out.A, err = orZeroR(toResult(ptr(string(v.A)), nil)).result() + if err != nil { + return nil, fmt.Errorf("A: %w", err) + } return out, nil } @@ -325,7 +475,10 @@ func SumTypeAFromProto(v *destpb.SumTypeA) (out *SumTypeA, err error) { } out = &SumTypeA{} - out.A = string(v.A) + out.A, err = orZeroR(toResult(ptr(string(v.A)), nil)).result() + if err != nil { + return nil, fmt.Errorf("A: %w", err) + } return out, nil } @@ -344,7 +497,10 @@ func SumTypeBFromProto(v *destpb.SumTypeB) (out *SumTypeB, err error) { } out = &SumTypeB{} - out.B = int(v.B) + out.B, err = orZeroR(toResult(ptr(int(v.B)), nil)).result() + if err != nil { + return nil, fmt.Errorf("B: %w", err) + } return out, nil } @@ -363,6 +519,9 @@ func SumTypeCFromProto(v *destpb.SumTypeC) (out *SumTypeC, err error) { } out = &SumTypeC{} - out.C = float64(v.C) + out.C, err = orZeroR(toResult(ptr(float64(v.C)), nil)).result() + if err != nil { + return nil, fmt.Errorf("C: %w", err) + } return out, nil } diff --git a/cmd/go2proto/testdata/model.go b/cmd/go2proto/testdata/model.go index f863f15e1..14f52024c 100644 --- a/cmd/go2proto/testdata/model.go +++ b/cmd/go2proto/testdata/model.go @@ -7,32 +7,38 @@ import ( "net/url" "time" + "github.com/alecthomas/types/optional" "github.com/block/ftl/cmd/go2proto/testdata/external" "github.com/block/ftl/internal/key" ) //protobuf:export type Root struct { - Int int `protobuf:"1"` - String string `protobuf:"2"` - MessagePtr *Message `protobuf:"4"` - Enum Enum `protobuf:"5"` - SumType SumType `protobuf:"6"` - OptionalInt int `protobuf:"7,optional"` - OptionalIntPtr *int `protobuf:"8,optional"` - OptionalMsg *Message `protobuf:"9,optional"` - RepeatedInt []int `protobuf:"10"` - RepeatedMsg []*Message `protobuf:"11"` - URL *url.URL `protobuf:"12"` - Key key.Deployment `protobuf:"13"` - ExternalRoot external.Root `protobuf:"14"` + Int int `protobuf:"1"` + String string `protobuf:"2"` + MessagePtr *Message `protobuf:"4"` + Enum Enum `protobuf:"5"` + SumType SumType `protobuf:"6"` + OptionalInt int `protobuf:"7,optional"` + OptionalIntPtr *int `protobuf:"8,optional"` + OptionalMsg *Message `protobuf:"9,optional"` + RepeatedInt []int `protobuf:"10"` + RepeatedMsg []*Message `protobuf:"11"` + URL *url.URL `protobuf:"12"` + OptionalWrapper optional.Option[string] `protobuf:"13"` + ExternalRoot external.Root `protobuf:"14"` + Key key.Deployment `protobuf:"15"` + OptionalTime optional.Option[time.Time] `protobuf:"16"` + OptionalMessage optional.Option[Message] `protobuf:"17"` } type Message struct { - Time time.Time `protobuf:"1"` - Duration time.Duration `protobuf:"2"` - Invalid bool `protobuf:"3"` - Nested Nested `protobuf:"4"` + Time time.Time `protobuf:"1"` + OptTime time.Time `protobuf:"2,optional"` + Duration time.Duration `protobuf:"3"` + Invalid bool `protobuf:"4"` + Nested Nested `protobuf:"5"` + RepeatedNested []Nested `protobuf:"6"` } func (m *Message) Validate() error { diff --git a/cmd/go2proto/testdata/model_test.go b/cmd/go2proto/testdata/model_test.go index c4e423c0f..32b625fd8 100644 --- a/cmd/go2proto/testdata/model_test.go +++ b/cmd/go2proto/testdata/model_test.go @@ -8,6 +8,7 @@ import ( "github.com/alecthomas/assert/v2" "github.com/alecthomas/types/must" + "github.com/alecthomas/types/optional" "google.golang.org/protobuf/proto" "github.com/block/ftl/cmd/go2proto/testdata/external" @@ -20,19 +21,22 @@ func TestModel(t *testing.T) { // UTC, as proto conversion does not preserve timezone now := time.Now().UTC() model := Root{ - Int: 1, - String: "foo", - MessagePtr: &Message{Time: now}, - Enum: EnumA, - SumType: &SumTypeA{A: "bar"}, - OptionalInt: 2, - OptionalIntPtr: &intv, - OptionalMsg: &Message{Time: now}, - RepeatedInt: []int{1, 2, 3}, - RepeatedMsg: []*Message{&Message{Time: now}, &Message{Time: now}}, - URL: must.Get(url.Parse("http://127.0.0.1")), - Key: key.NewDeploymentKey("echo"), - ExternalRoot: external.Root{Prefix: "abc", Suffix: "xyz"}, + Int: 1, + String: "foo", + MessagePtr: &Message{Time: now}, + Enum: EnumA, + SumType: &SumTypeA{A: "bar"}, + OptionalInt: 2, + OptionalIntPtr: &intv, + OptionalMsg: &Message{Time: now}, + OptionalWrapper: optional.Some("foo"), + RepeatedInt: []int{1, 2, 3}, + RepeatedMsg: []*Message{&Message{Time: now}, &Message{Time: now}}, + URL: must.Get(url.Parse("http://127.0.0.1")), + Key: key.NewDeploymentKey("echo"), + ExternalRoot: external.Root{Prefix: "abc", Suffix: "xyz"}, + OptionalTime: optional.Some(now), + OptionalMessage: optional.None[Message](), } pb := model.ToProto() data, err := proto.Marshal(pb) @@ -46,6 +50,15 @@ func TestModel(t *testing.T) { assert.Equal(t, pb.String(), out.String()) testModelRoundtrip(t, &model) + + t.Run("test optional.None", func(t *testing.T) { + testModelRoundtrip(t, &Root{ + // TODO: ToProto crashes if these 2 are missing + OptionalWrapper: optional.None[string](), + URL: must.Get(url.Parse("http://127.0.0.1")), + OptionalIntPtr: &intv, + }) + }) } func TestValidate(t *testing.T) { diff --git a/cmd/go2proto/testdata/testdatapb/model.pb.go b/cmd/go2proto/testdata/testdatapb/model.pb.go index da06dab46..7e164467f 100644 --- a/cmd/go2proto/testdata/testdatapb/model.pb.go +++ b/cmd/go2proto/testdata/testdatapb/model.pb.go @@ -71,13 +71,15 @@ func (Enum) EnumDescriptor() ([]byte, []int) { } type Message struct { - state protoimpl.MessageState `protogen:"open.v1"` - Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` - Duration *durationpb.Duration `protobuf:"bytes,2,opt,name=duration,proto3" json:"duration,omitempty"` - Invalid bool `protobuf:"varint,3,opt,name=invalid,proto3" json:"invalid,omitempty"` - Nested *Nested `protobuf:"bytes,4,opt,name=nested,proto3" json:"nested,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` + OptTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=opt_time,json=optTime,proto3,oneof" json:"opt_time,omitempty"` + Duration *durationpb.Duration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + Invalid bool `protobuf:"varint,4,opt,name=invalid,proto3" json:"invalid,omitempty"` + Nested *Nested `protobuf:"bytes,5,opt,name=nested,proto3" json:"nested,omitempty"` + RepeatedNested []*Nested `protobuf:"bytes,6,rep,name=repeated_nested,json=repeatedNested,proto3" json:"repeated_nested,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Message) Reset() { @@ -117,6 +119,13 @@ func (x *Message) GetTime() *timestamppb.Timestamp { return nil } +func (x *Message) GetOptTime() *timestamppb.Timestamp { + if x != nil { + return x.OptTime + } + return nil +} + func (x *Message) GetDuration() *durationpb.Duration { if x != nil { return x.Duration @@ -138,6 +147,13 @@ func (x *Message) GetNested() *Nested { return nil } +func (x *Message) GetRepeatedNested() []*Nested { + if x != nil { + return x.RepeatedNested + } + return nil +} + type Nested struct { state protoimpl.MessageState `protogen:"open.v1"` Nested string `protobuf:"bytes,1,opt,name=nested,proto3" json:"nested,omitempty"` @@ -183,22 +199,25 @@ func (x *Nested) GetNested() string { } type Root struct { - state protoimpl.MessageState `protogen:"open.v1"` - Int int64 `protobuf:"varint,1,opt,name=int,proto3" json:"int,omitempty"` - String_ string `protobuf:"bytes,2,opt,name=string,proto3" json:"string,omitempty"` - MessagePtr *Message `protobuf:"bytes,4,opt,name=message_ptr,json=messagePtr,proto3" json:"message_ptr,omitempty"` - Enum Enum `protobuf:"varint,5,opt,name=enum,proto3,enum=xyz.block.ftl.go2proto.test.Enum" json:"enum,omitempty"` - SumType *SumType `protobuf:"bytes,6,opt,name=sum_type,json=sumType,proto3" json:"sum_type,omitempty"` - OptionalInt *int64 `protobuf:"varint,7,opt,name=optional_int,json=optionalInt,proto3,oneof" json:"optional_int,omitempty"` - OptionalIntPtr *int64 `protobuf:"varint,8,opt,name=optional_int_ptr,json=optionalIntPtr,proto3,oneof" json:"optional_int_ptr,omitempty"` - OptionalMsg *Message `protobuf:"bytes,9,opt,name=optional_msg,json=optionalMsg,proto3,oneof" json:"optional_msg,omitempty"` - RepeatedInt []int64 `protobuf:"varint,10,rep,packed,name=repeated_int,json=repeatedInt,proto3" json:"repeated_int,omitempty"` - RepeatedMsg []*Message `protobuf:"bytes,11,rep,name=repeated_msg,json=repeatedMsg,proto3" json:"repeated_msg,omitempty"` - Url []byte `protobuf:"bytes,12,opt,name=url,proto3" json:"url,omitempty"` - Key string `protobuf:"bytes,13,opt,name=key,proto3" json:"key,omitempty"` - ExternalRoot string `protobuf:"bytes,14,opt,name=external_root,json=externalRoot,proto3" json:"external_root,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Int int64 `protobuf:"varint,1,opt,name=int,proto3" json:"int,omitempty"` + String_ string `protobuf:"bytes,2,opt,name=string,proto3" json:"string,omitempty"` + MessagePtr *Message `protobuf:"bytes,4,opt,name=message_ptr,json=messagePtr,proto3" json:"message_ptr,omitempty"` + Enum Enum `protobuf:"varint,5,opt,name=enum,proto3,enum=xyz.block.ftl.go2proto.test.Enum" json:"enum,omitempty"` + SumType *SumType `protobuf:"bytes,6,opt,name=sum_type,json=sumType,proto3" json:"sum_type,omitempty"` + OptionalInt *int64 `protobuf:"varint,7,opt,name=optional_int,json=optionalInt,proto3,oneof" json:"optional_int,omitempty"` + OptionalIntPtr *int64 `protobuf:"varint,8,opt,name=optional_int_ptr,json=optionalIntPtr,proto3,oneof" json:"optional_int_ptr,omitempty"` + OptionalMsg *Message `protobuf:"bytes,9,opt,name=optional_msg,json=optionalMsg,proto3,oneof" json:"optional_msg,omitempty"` + RepeatedInt []int64 `protobuf:"varint,10,rep,packed,name=repeated_int,json=repeatedInt,proto3" json:"repeated_int,omitempty"` + RepeatedMsg []*Message `protobuf:"bytes,11,rep,name=repeated_msg,json=repeatedMsg,proto3" json:"repeated_msg,omitempty"` + Url []byte `protobuf:"bytes,12,opt,name=url,proto3" json:"url,omitempty"` + OptionalWrapper *string `protobuf:"bytes,13,opt,name=optional_wrapper,json=optionalWrapper,proto3,oneof" json:"optional_wrapper,omitempty"` + ExternalRoot string `protobuf:"bytes,14,opt,name=external_root,json=externalRoot,proto3" json:"external_root,omitempty"` + Key string `protobuf:"bytes,15,opt,name=key,proto3" json:"key,omitempty"` + OptionalTime *timestamppb.Timestamp `protobuf:"bytes,16,opt,name=optional_time,json=optionalTime,proto3,oneof" json:"optional_time,omitempty"` + OptionalMessage *Message `protobuf:"bytes,17,opt,name=optional_message,json=optionalMessage,proto3,oneof" json:"optional_message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Root) Reset() { @@ -308,9 +327,9 @@ func (x *Root) GetUrl() []byte { return nil } -func (x *Root) GetKey() string { - if x != nil { - return x.Key +func (x *Root) GetOptionalWrapper() string { + if x != nil && x.OptionalWrapper != nil { + return *x.OptionalWrapper } return "" } @@ -322,6 +341,27 @@ func (x *Root) GetExternalRoot() string { return "" } +func (x *Root) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *Root) GetOptionalTime() *timestamppb.Timestamp { + if x != nil { + return x.OptionalTime + } + return nil +} + +func (x *Root) GetOptionalMessage() *Message { + if x != nil { + return x.OptionalMessage + } + return nil +} + type SubSumType struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Value: @@ -763,107 +803,133 @@ var file_model_proto_rawDesc = []byte{ 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc7, 0x01, 0x0a, 0x07, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xde, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, - 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x20, 0x0a, 0x06, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, - 0x16, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x80, 0x05, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x69, - 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x45, 0x0a, 0x0b, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x74, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x74, - 0x72, 0x12, 0x35, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x3f, 0x0a, 0x08, 0x73, 0x75, 0x6d, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, + 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x54, 0x69, 0x6d, 0x65, + 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x6e, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, + 0x73, 0x74, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x12, 0x4c, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x07, 0x73, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0c, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x00, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x88, 0x01, - 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, - 0x74, 0x5f, 0x70, 0x74, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x0e, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x50, 0x74, 0x72, 0x88, 0x01, 0x01, - 0x12, 0x4c, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x67, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x52, + 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x6f, 0x70, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x20, 0x0a, 0x06, + 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0x88, + 0x07, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x12, 0x45, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x74, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x02, 0x52, 0x0b, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x73, 0x67, 0x88, 0x01, 0x01, 0x12, 0x21, - 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, - 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x73, - 0x67, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, - 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, - 0x6f, 0x6f, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x5f, 0x69, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x74, 0x72, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x67, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, - 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x01, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x48, 0x00, - 0x52, 0x01, 0x61, 0x12, 0x38, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, + 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0a, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x74, 0x72, 0x12, 0x35, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, + 0x3f, 0x0a, 0x08, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, + 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x26, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x49, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x74, 0x72, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x48, 0x01, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, + 0x74, 0x50, 0x74, 0x72, 0x88, 0x01, 0x01, 0x12, 0x4c, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, + 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x48, 0x02, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, + 0x73, 0x67, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0b, 0x72, 0x65, 0x70, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, - 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, - 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, 0x00, 0x52, 0x01, 0x62, 0x42, 0x07, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1b, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, - 0x54, 0x79, 0x70, 0x65, 0x41, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x01, 0x61, 0x22, 0x1b, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, - 0x65, 0x42, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x61, - 0x22, 0xd9, 0x02, 0x0a, 0x07, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x0e, - 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, 0x18, 0x04, + 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4d, 0x73, + 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, + 0x75, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x48, 0x03, 0x52, + 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, + 0x88, 0x01, 0x01, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, + 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x44, 0x0a, 0x0d, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x04, 0x52, + 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x54, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x48, 0x05, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x74, 0x72, 0x42, 0x0f, 0x0a, 0x0d, + 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x73, 0x67, 0x42, 0x13, 0x0a, + 0x11, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x0a, 0x53, 0x75, + 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x48, 0x00, 0x52, + 0x01, 0x61, 0x12, 0x38, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, + 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, + 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, 0x00, 0x52, 0x01, 0x62, 0x42, 0x07, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1b, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, + 0x79, 0x70, 0x65, 0x41, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x01, 0x61, 0x22, 0x1b, 0x0a, 0x0b, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x42, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x61, 0x22, + 0xd9, 0x02, 0x0a, 0x07, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x0e, 0x73, + 0x75, 0x62, 0x5f, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x48, 0x00, 0x52, + 0x0b, 0x73, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x12, 0x4f, 0x0a, 0x0e, + 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x48, 0x00, - 0x52, 0x0b, 0x73, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x12, 0x4f, 0x0a, - 0x0e, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x62, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, - 0x00, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x12, 0x35, - 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, - 0x48, 0x00, 0x52, 0x01, 0x61, 0x12, 0x35, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, - 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, 0x00, 0x52, 0x01, 0x62, 0x12, 0x35, 0x0a, 0x01, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x43, 0x48, 0x00, - 0x52, 0x01, 0x63, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x0a, 0x08, - 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x01, 0x61, 0x22, 0x18, 0x0a, 0x08, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, - 0x65, 0x42, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x01, 0x62, - 0x22, 0x18, 0x0a, 0x08, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x43, 0x12, 0x0c, 0x0a, 0x01, - 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x01, 0x63, 0x2a, 0x1e, 0x0a, 0x04, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x42, 0x10, 0x01, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, - 0x74, 0x6c, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, - 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, 0x00, + 0x52, 0x0b, 0x73, 0x75, 0x62, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x12, 0x35, 0x0a, + 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x48, + 0x00, 0x52, 0x01, 0x61, 0x12, 0x35, 0x0a, 0x01, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, + 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x48, 0x00, 0x52, 0x01, 0x62, 0x12, 0x35, 0x0a, 0x01, 0x63, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x43, 0x48, 0x00, 0x52, + 0x01, 0x63, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x18, 0x0a, 0x08, 0x53, + 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x41, 0x12, 0x0c, 0x0a, 0x01, 0x61, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x01, 0x61, 0x22, 0x18, 0x0a, 0x08, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, + 0x42, 0x12, 0x0c, 0x0a, 0x01, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x01, 0x62, 0x22, + 0x18, 0x0a, 0x08, 0x53, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x43, 0x12, 0x0c, 0x0a, 0x01, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x01, 0x63, 0x2a, 0x1e, 0x0a, 0x04, 0x45, 0x6e, 0x75, + 0x6d, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x42, 0x10, 0x01, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, + 0x6c, 0x2f, 0x63, 0x6d, 0x64, 0x2f, 0x67, 0x6f, 0x32, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, + 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -897,25 +963,29 @@ var file_model_proto_goTypes = []any{ } var file_model_proto_depIdxs = []int32{ 11, // 0: xyz.block.ftl.go2proto.test.Message.time:type_name -> google.protobuf.Timestamp - 12, // 1: xyz.block.ftl.go2proto.test.Message.duration:type_name -> google.protobuf.Duration - 2, // 2: xyz.block.ftl.go2proto.test.Message.nested:type_name -> xyz.block.ftl.go2proto.test.Nested - 1, // 3: xyz.block.ftl.go2proto.test.Root.message_ptr:type_name -> xyz.block.ftl.go2proto.test.Message - 0, // 4: xyz.block.ftl.go2proto.test.Root.enum:type_name -> xyz.block.ftl.go2proto.test.Enum - 7, // 5: xyz.block.ftl.go2proto.test.Root.sum_type:type_name -> xyz.block.ftl.go2proto.test.SumType - 1, // 6: xyz.block.ftl.go2proto.test.Root.optional_msg:type_name -> xyz.block.ftl.go2proto.test.Message - 1, // 7: xyz.block.ftl.go2proto.test.Root.repeated_msg:type_name -> xyz.block.ftl.go2proto.test.Message - 5, // 8: xyz.block.ftl.go2proto.test.SubSumType.a:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeA - 6, // 9: xyz.block.ftl.go2proto.test.SubSumType.b:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeB - 5, // 10: xyz.block.ftl.go2proto.test.SumType.sub_sum_type_a:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeA - 6, // 11: xyz.block.ftl.go2proto.test.SumType.sub_sum_type_b:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeB - 8, // 12: xyz.block.ftl.go2proto.test.SumType.a:type_name -> xyz.block.ftl.go2proto.test.SumTypeA - 9, // 13: xyz.block.ftl.go2proto.test.SumType.b:type_name -> xyz.block.ftl.go2proto.test.SumTypeB - 10, // 14: xyz.block.ftl.go2proto.test.SumType.c:type_name -> xyz.block.ftl.go2proto.test.SumTypeC - 15, // [15:15] is the sub-list for method output_type - 15, // [15:15] is the sub-list for method input_type - 15, // [15:15] is the sub-list for extension type_name - 15, // [15:15] is the sub-list for extension extendee - 0, // [0:15] is the sub-list for field type_name + 11, // 1: xyz.block.ftl.go2proto.test.Message.opt_time:type_name -> google.protobuf.Timestamp + 12, // 2: xyz.block.ftl.go2proto.test.Message.duration:type_name -> google.protobuf.Duration + 2, // 3: xyz.block.ftl.go2proto.test.Message.nested:type_name -> xyz.block.ftl.go2proto.test.Nested + 2, // 4: xyz.block.ftl.go2proto.test.Message.repeated_nested:type_name -> xyz.block.ftl.go2proto.test.Nested + 1, // 5: xyz.block.ftl.go2proto.test.Root.message_ptr:type_name -> xyz.block.ftl.go2proto.test.Message + 0, // 6: xyz.block.ftl.go2proto.test.Root.enum:type_name -> xyz.block.ftl.go2proto.test.Enum + 7, // 7: xyz.block.ftl.go2proto.test.Root.sum_type:type_name -> xyz.block.ftl.go2proto.test.SumType + 1, // 8: xyz.block.ftl.go2proto.test.Root.optional_msg:type_name -> xyz.block.ftl.go2proto.test.Message + 1, // 9: xyz.block.ftl.go2proto.test.Root.repeated_msg:type_name -> xyz.block.ftl.go2proto.test.Message + 11, // 10: xyz.block.ftl.go2proto.test.Root.optional_time:type_name -> google.protobuf.Timestamp + 1, // 11: xyz.block.ftl.go2proto.test.Root.optional_message:type_name -> xyz.block.ftl.go2proto.test.Message + 5, // 12: xyz.block.ftl.go2proto.test.SubSumType.a:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeA + 6, // 13: xyz.block.ftl.go2proto.test.SubSumType.b:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeB + 5, // 14: xyz.block.ftl.go2proto.test.SumType.sub_sum_type_a:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeA + 6, // 15: xyz.block.ftl.go2proto.test.SumType.sub_sum_type_b:type_name -> xyz.block.ftl.go2proto.test.SubSumTypeB + 8, // 16: xyz.block.ftl.go2proto.test.SumType.a:type_name -> xyz.block.ftl.go2proto.test.SumTypeA + 9, // 17: xyz.block.ftl.go2proto.test.SumType.b:type_name -> xyz.block.ftl.go2proto.test.SumTypeB + 10, // 18: xyz.block.ftl.go2proto.test.SumType.c:type_name -> xyz.block.ftl.go2proto.test.SumTypeC + 19, // [19:19] is the sub-list for method output_type + 19, // [19:19] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_model_proto_init() } @@ -923,6 +993,7 @@ func file_model_proto_init() { if File_model_proto != nil { return } + file_model_proto_msgTypes[0].OneofWrappers = []any{} file_model_proto_msgTypes[2].OneofWrappers = []any{} file_model_proto_msgTypes[3].OneofWrappers = []any{ (*SubSumType_A)(nil), diff --git a/cmd/go2proto/testdata/testdatapb/model.proto b/cmd/go2proto/testdata/testdatapb/model.proto index 91af49ddc..9b151562a 100644 --- a/cmd/go2proto/testdata/testdatapb/model.proto +++ b/cmd/go2proto/testdata/testdatapb/model.proto @@ -15,9 +15,11 @@ enum Enum { message Message { google.protobuf.Timestamp time = 1; - google.protobuf.Duration duration = 2; - bool invalid = 3; - Nested nested = 4; + optional google.protobuf.Timestamp opt_time = 2; + google.protobuf.Duration duration = 3; + bool invalid = 4; + Nested nested = 5; + repeated Nested repeated_nested = 6; } message Nested { @@ -36,8 +38,11 @@ message Root { repeated int64 repeated_int = 10; repeated Message repeated_msg = 11; bytes url = 12; - string key = 13; + optional string optional_wrapper = 13; string external_root = 14; + string key = 15; + optional google.protobuf.Timestamp optional_time = 16; + optional Message optional_message = 17; } diff --git a/cmd/go2proto/toprototmpl.go b/cmd/go2proto/toprototmpl.go index efac38884..7f49d8b9a 100644 --- a/cmd/go2proto/toprototmpl.go +++ b/cmd/go2proto/toprototmpl.go @@ -49,19 +49,30 @@ var go2protoTmpl = template.Must(template.New("go2proto.to.go.tmpl"). package {{ .GoPackage }} import "fmt" +import "encoding" import destpb "{{ . | goProtoImport }}" -import "google.golang.org/protobuf/proto" import "google.golang.org/protobuf/types/known/timestamppb" import "google.golang.org/protobuf/types/known/durationpb" -{{range $gimport := .GoImports }} -import "{{ $gimport }}" -{{- end}} +import "github.com/alecthomas/types/optional" var _ fmt.Stringer var _ = timestamppb.Timestamp{} var _ = durationpb.Duration{} +type result[T any] struct { + Value T + Err error +} + +func toResult[T any](v T, err error) result[T] { + return result[T]{Value: v, Err: err} +} + +func (r result[T]) result() (T, error) { + return r.Value, r.Err +} + // protoSlice converts a slice of values to a slice of protobuf values. func protoSlice[P any, T interface{ ToProto() P }](values []T) []P { out := make([]P, len(values)) @@ -86,15 +97,16 @@ func sliceMap[T any, U any](values []T, f func(T) U) []U { return out } -func sliceMapErr[T any, U any](values []T, f func(T) (U, error)) ([]U, error) { - var err error +func sliceMapR[T any, U any](values []T, f func(T) result[U]) result[[]U] { out := make([]U, len(values)) for i, v := range values { - if out[i], err = f(v); err != nil { - return nil, err + r := f(v) + if r.Err != nil { + return result[[]U]{Err: r.Err} } + out[i] = r.Value } - return out, nil + return result[[]U]{Value: out} } func orZero[T any](v *T) T { @@ -104,13 +116,32 @@ func orZero[T any](v *T) T { return *v } -func ptr[T any, O any](v *O, o T) *T { - if v == nil { - return nil +func orZeroR[T any](v result[*T]) result[T] { + if v.Err != nil { + return result[T]{Err: v.Err} } + return result[T]{Value: orZero(v.Value)} +} + +func optionalOrNil[T any](v optional.Option[T]) *T { + if v.Ok() { + r := v.MustGet() + return &r + } + return nil +} + +func ptr[T any](o T) *T { return &o } +func ptrR[T any](o result[T]) result[*T] { + if o.Err != nil { + return result[*T]{Err: o.Err} + } + return result[*T]{Value: ptr(o.Value)} +} + func fromPtr[T any](v *T) T { if v == nil { return *new(T) @@ -118,6 +149,60 @@ func fromPtr[T any](v *T) T { return *v } +func fromPtrR[T any](v result[*T]) result[T] { + if v.Err != nil { + return result[T]{Err: v.Err} + } + return result[T]{Value: fromPtr(v.Value)} +} + +func optionalR[T any](r result[*T]) result[optional.Option[T]] { + if r.Err != nil { + return result[optional.Option[T]]{Err: r.Err} + } + return result[optional.Option[T]]{Value: optional.Ptr(r.Value)} +} + +func setNil[T, O any](v *T, o *O) *T { + if o == nil { + return nil + } + return v +} + +func setNilR[T, O any](v result[*T], o *O) result[*T] { + if v.Err != nil { + return v + } + return result[*T]{Value: setNil(v.Value, o)} +} + +type binaryUnmarshallable[T any] interface { + *T + encoding.BinaryUnmarshaler +} + +type textUnmarshallable[T any] interface { + *T + encoding.TextUnmarshaler +} + +func unmarshallBinary[T any, TPtr binaryUnmarshallable[T]](v []byte, f TPtr) (*T, error) { + var to T + toptr := (TPtr)(&to) + + err := toptr.UnmarshalBinary(v) + return &to, err +} + +func unmarshallText[T any, TPtr textUnmarshallable[T]](v []byte, f TPtr) (*T, error) { + var to T + toptr := (TPtr)(&to) + + err := toptr.UnmarshalText(v) + return &to, err +} + {{range $decl := .OrderedDecls }} {{- if eq (typeof $decl) "Message" }} func (x *{{ .Name }}) ToProto() *destpb.{{ .Name }} { @@ -126,43 +211,7 @@ func (x *{{ .Name }}) ToProto() *destpb.{{ .Name }} { } return &destpb.{{ .Name }}{ {{- range $field := .Fields }} -{{- if . | isBuiltin }} -{{- if $field.Optional}} - {{ $field.EscapedName }}: proto.{{ $field.ProtoGoType | toUpperCamel }}({{ $field.ProtoGoType }}({{if $field.Pointer}}*{{end}}x.{{ $field.Name }})), -{{- else if .Repeated}} - {{ $field.EscapedName }}: sliceMap(x.{{ $field.Name }}, func(v {{ $field.OriginType }}) {{ $field.ProtoGoType }} { return {{ $field.ProtoGoType }}(v) }), -{{- else }} - {{ $field.EscapedName }}: {{ $field.ProtoGoType }}(x.{{ $field.Name }}), -{{- end}} -{{- else if eq $field.ProtoType "google.protobuf.Timestamp" }} - {{ $field.EscapedName }}: timestamppb.New(x.{{ $field.Name }}), -{{- else if eq $field.ProtoType "google.protobuf.Duration" }} - {{ $field.EscapedName }}: durationpb.New(x.{{ $field.Name }}), -{{- else if eq .Kind "Message" }} -{{- if .Repeated }} - {{ $field.EscapedName }}: protoSlice[*destpb.{{ .ProtoGoType }}](x.{{ $field.Name }}), -{{- else}} - {{ $field.EscapedName }}: x.{{ $field.Name }}.ToProto(), -{{- end}} -{{- else if eq .Kind "Enum" }} -{{- if .Repeated }} - {{ $field.EscapedName }}: protoSlice[destpb.{{ .Type }}](x.{{ $field.Name }}), -{{- else}} - {{ $field.EscapedName }}: x.{{ $field.Name }}.ToProto(), -{{- end}} -{{- else if eq .Kind "SumType" }} -{{- if .Repeated }} - {{ $field.EscapedName }}: sliceMap(x.{{ $field.Name }}, {{$field.OriginType}}ToProto), -{{- else}} - {{ $field.EscapedName }}: {{ $field.OriginType }}ToProto(x.{{ $field.Name }}), -{{- end}} -{{- else if eq $field.Kind "BinaryMarshaler" }} - {{ $field.EscapedName }}: protoMust(x.{{ $field.Name }}.MarshalBinary()), -{{- else if eq $field.Kind "TextMarshaler" }} - {{ $field.EscapedName }}: string(protoMust(x.{{ $field.Name }}.MarshalText())), -{{- else }} - {{ $field.EscapedName }}: ??, // x.{{ $field.Name }}.ToProto() // Unknown type {{ $field.OriginType }} of kind {{ $field.Kind }} -{{- end}} + {{ $field.EscapedName }}: {{ $field.ToProto }}, {{- end}} } } @@ -175,77 +224,10 @@ func {{ .Name }}FromProto(v *destpb.{{ .Name }}) (out *{{ .Name }}, err error) { out = &{{ .Name }}{} {{- range $field := .Fields }} -{{- if . | isBuiltin }} -{{- if $field.Optional}} -{{- if $field.Pointer}} - out.{{ $field.Name }} = ptr(v.{{ $field.EscapedName }}, {{ $field.OriginType }}(orZero(v.{{ $field.EscapedName }}))) -{{- else}} - out.{{ $field.Name }} = {{ $field.OriginType }}(orZero(v.{{ $field.EscapedName }})) -{{- end}} -{{- else if .Repeated}} - out.{{ $field.Name }} = sliceMap(v.{{ $field.EscapedName }}, func(v {{ $field.ProtoGoType }}) {{ $field.OriginType }} { return {{ $field.OriginType }}(v) }) -{{- else }} - out.{{ $field.Name }} = {{ $field.OriginType }}(v.{{ $field.EscapedName }}) -{{- end}} -{{- else if eq $field.ProtoType "google.protobuf.Timestamp" }} - out.{{ $field.Name }} = v.{{ $field.EscapedName }}.AsTime() -{{- else if eq $field.ProtoType "google.protobuf.Duration" }} - out.{{ $field.Name }} = v.{{ $field.EscapedName }}.AsDuration() -{{- else if eq .Kind "Message" }} -{{- if .Repeated }} - if out.{{ $field.Name }}, err = sliceMapErr(v.{{ $field.EscapedName }}, {{$field.OriginType}}FromProto); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- else}} -{{- if $field.Pointer}} - if out.{{ $field.Name }}, err = {{ $field.OriginType }}FromProto(v.{{ $field.EscapedName }}); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- else}} - if field{{ $field.Name }}, err := {{ $field.OriginType }}FromProto(v.{{ $field.EscapedName }}); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } else { - out.{{ $field.Name }} = fromPtr(field{{ $field.Name }}) - } -{{- end}} -{{- end}} -{{- else if eq .Kind "Enum" }} -{{- if .Repeated }} - if out.{{ $field.Name }}, err = sliceMapErr(v.{{ $field.EscapedName }}, {{$field.OriginType}}FromProto); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- else}} - if out.{{ $field.Name }}, err = {{ $field.OriginType }}FromProto(v.{{ $field.EscapedName }}); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- end}} -{{- else if eq .Kind "SumType" }} -{{- if .Repeated }} - if out.{{ $field.Name }}, err = sliceMapErr(v.{{ $field.EscapedName }}, {{$field.OriginType}}FromProto); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- else}} - if out.{{ $field.Name }}, err = {{ $field.OriginType }}FromProto(v.{{ $field.EscapedName }}); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- end}} -{{- else if eq $field.Kind "BinaryMarshaler" }} -{{- if $field.Pointer}} - out.{{ $field.Name }} = new({{ $field.OriginType }}) -{{- end}} - if err = out.{{ $field.Name }}.UnmarshalBinary(v.{{ $field.EscapedName }}); err != nil { - return nil, fmt.Errorf("{{ $field.Name }}: %w", err) - } -{{- else if eq $field.Kind "TextMarshaler" }} -{{- if $field.Pointer}} - out.{{ $field.Name }} = new({{ $field.OriginType }}) -{{- end}} - if err = out.{{ $field.Name }}.UnmarshalText([]byte(v.{{ $field.EscapedName }})); err != nil { + out.{{ $field.Name }}, err = {{ $field.FromProto }}.result() + if err != nil { return nil, fmt.Errorf("{{ $field.Name }}: %w", err) } -{{- else }} - out.{{ $field.Name }} = ??, // v.{{ $field.EscapedName }}.ToProto() // Unknown type {{ $field.OriginType }} of kind {{ $field.Kind }} -{{- end}} {{- end}} {{- if .Validator }} if err := out.Validate(); err != nil { diff --git a/common/protos/xyz/block/ftl/schema/v1/schema.pb.go b/common/protos/xyz/block/ftl/schema/v1/schema.pb.go index dd515b60c..5c4ba737f 100644 --- a/common/protos/xyz/block/ftl/schema/v1/schema.pb.go +++ b/common/protos/xyz/block/ftl/schema/v1/schema.pb.go @@ -1812,13 +1812,13 @@ type Metadata struct { // *Metadata_Calls // *Metadata_Config // *Metadata_CronJob - // *Metadata_DbColumn // *Metadata_Databases // *Metadata_Encoding // *Metadata_Ingress // *Metadata_Partitions // *Metadata_Publisher // *Metadata_Retry + // *Metadata_SqlColumn // *Metadata_SqlMigration // *Metadata_SqlQuery // *Metadata_Secrets @@ -1911,15 +1911,6 @@ func (x *Metadata) GetCronJob() *MetadataCronJob { return nil } -func (x *Metadata) GetDbColumn() *MetadataDBColumn { - if x != nil { - if x, ok := x.Value.(*Metadata_DbColumn); ok { - return x.DbColumn - } - } - return nil -} - func (x *Metadata) GetDatabases() *MetadataDatabases { if x != nil { if x, ok := x.Value.(*Metadata_Databases); ok { @@ -1974,6 +1965,15 @@ func (x *Metadata) GetRetry() *MetadataRetry { return nil } +func (x *Metadata) GetSqlColumn() *MetadataSQLColumn { + if x != nil { + if x, ok := x.Value.(*Metadata_SqlColumn); ok { + return x.SqlColumn + } + } + return nil +} + func (x *Metadata) GetSqlMigration() *MetadataSQLMigration { if x != nil { if x, ok := x.Value.(*Metadata_SqlMigration); ok { @@ -2043,10 +2043,6 @@ type Metadata_CronJob struct { CronJob *MetadataCronJob `protobuf:"bytes,3,opt,name=cron_job,json=cronJob,proto3,oneof"` } -type Metadata_DbColumn struct { - DbColumn *MetadataDBColumn `protobuf:"bytes,17,opt,name=db_column,json=dbColumn,proto3,oneof"` -} - type Metadata_Databases struct { Databases *MetadataDatabases `protobuf:"bytes,4,opt,name=databases,proto3,oneof"` } @@ -2071,6 +2067,10 @@ type Metadata_Retry struct { Retry *MetadataRetry `protobuf:"bytes,6,opt,name=retry,proto3,oneof"` } +type Metadata_SqlColumn struct { + SqlColumn *MetadataSQLColumn `protobuf:"bytes,17,opt,name=sql_column,json=sqlColumn,proto3,oneof"` +} + type Metadata_SqlMigration struct { SqlMigration *MetadataSQLMigration `protobuf:"bytes,13,opt,name=sql_migration,json=sqlMigration,proto3,oneof"` } @@ -2101,8 +2101,6 @@ func (*Metadata_Config) isMetadata_Value() {} func (*Metadata_CronJob) isMetadata_Value() {} -func (*Metadata_DbColumn) isMetadata_Value() {} - func (*Metadata_Databases) isMetadata_Value() {} func (*Metadata_Encoding) isMetadata_Value() {} @@ -2115,6 +2113,8 @@ func (*Metadata_Publisher) isMetadata_Value() {} func (*Metadata_Retry) isMetadata_Value() {} +func (*Metadata_SqlColumn) isMetadata_Value() {} + func (*Metadata_SqlMigration) isMetadata_Value() {} func (*Metadata_SqlQuery) isMetadata_Value() {} @@ -2411,67 +2411,6 @@ func (x *MetadataCronJob) GetCron() string { return "" } -// MetadataDBColumn designates a database column. -type MetadataDBColumn struct { - state protoimpl.MessageState `protogen:"open.v1"` - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Table string `protobuf:"bytes,2,opt,name=table,proto3" json:"table,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *MetadataDBColumn) Reset() { - *x = MetadataDBColumn{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *MetadataDBColumn) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MetadataDBColumn) ProtoMessage() {} - -func (x *MetadataDBColumn) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MetadataDBColumn.ProtoReflect.Descriptor instead. -func (*MetadataDBColumn) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{32} -} - -func (x *MetadataDBColumn) GetPos() *Position { - if x != nil { - return x.Pos - } - return nil -} - -func (x *MetadataDBColumn) GetTable() string { - if x != nil { - return x.Table - } - return "" -} - -func (x *MetadataDBColumn) GetName() string { - if x != nil { - return x.Name - } - return "" -} - type MetadataDatabases struct { state protoimpl.MessageState `protogen:"open.v1"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` @@ -2482,7 +2421,7 @@ type MetadataDatabases struct { func (x *MetadataDatabases) Reset() { *x = MetadataDatabases{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2494,7 +2433,7 @@ func (x *MetadataDatabases) String() string { func (*MetadataDatabases) ProtoMessage() {} func (x *MetadataDatabases) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2507,7 +2446,7 @@ func (x *MetadataDatabases) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataDatabases.ProtoReflect.Descriptor instead. func (*MetadataDatabases) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{33} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{32} } func (x *MetadataDatabases) GetPos() *Position { @@ -2535,7 +2474,7 @@ type MetadataEncoding struct { func (x *MetadataEncoding) Reset() { *x = MetadataEncoding{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2547,7 +2486,7 @@ func (x *MetadataEncoding) String() string { func (*MetadataEncoding) ProtoMessage() {} func (x *MetadataEncoding) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2560,7 +2499,7 @@ func (x *MetadataEncoding) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataEncoding.ProtoReflect.Descriptor instead. func (*MetadataEncoding) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{34} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{33} } func (x *MetadataEncoding) GetPos() *Position { @@ -2596,7 +2535,7 @@ type MetadataIngress struct { func (x *MetadataIngress) Reset() { *x = MetadataIngress{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2608,7 +2547,7 @@ func (x *MetadataIngress) String() string { func (*MetadataIngress) ProtoMessage() {} func (x *MetadataIngress) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2621,7 +2560,7 @@ func (x *MetadataIngress) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataIngress.ProtoReflect.Descriptor instead. func (*MetadataIngress) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{35} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{34} } func (x *MetadataIngress) GetPos() *Position { @@ -2662,7 +2601,7 @@ type MetadataPartitions struct { func (x *MetadataPartitions) Reset() { *x = MetadataPartitions{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2674,7 +2613,7 @@ func (x *MetadataPartitions) String() string { func (*MetadataPartitions) ProtoMessage() {} func (x *MetadataPartitions) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2687,7 +2626,7 @@ func (x *MetadataPartitions) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataPartitions.ProtoReflect.Descriptor instead. func (*MetadataPartitions) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{36} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{35} } func (x *MetadataPartitions) GetPos() *Position { @@ -2714,7 +2653,7 @@ type MetadataPublisher struct { func (x *MetadataPublisher) Reset() { *x = MetadataPublisher{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2726,7 +2665,7 @@ func (x *MetadataPublisher) String() string { func (*MetadataPublisher) ProtoMessage() {} func (x *MetadataPublisher) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2739,7 +2678,7 @@ func (x *MetadataPublisher) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataPublisher.ProtoReflect.Descriptor instead. func (*MetadataPublisher) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{37} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{36} } func (x *MetadataPublisher) GetPos() *Position { @@ -2769,7 +2708,7 @@ type MetadataRetry struct { func (x *MetadataRetry) Reset() { *x = MetadataRetry{} - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2781,7 +2720,7 @@ func (x *MetadataRetry) String() string { func (*MetadataRetry) ProtoMessage() {} func (x *MetadataRetry) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2794,7 +2733,7 @@ func (x *MetadataRetry) ProtoReflect() protoreflect.Message { // Deprecated: Use MetadataRetry.ProtoReflect.Descriptor instead. func (*MetadataRetry) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{38} + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{37} } func (x *MetadataRetry) GetPos() *Position { @@ -2832,6 +2771,67 @@ func (x *MetadataRetry) GetCatch() *Ref { return nil } +// MetadataSQLColumn designates a database column. +type MetadataSQLColumn struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Table string `protobuf:"bytes,2,opt,name=table,proto3" json:"table,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MetadataSQLColumn) Reset() { + *x = MetadataSQLColumn{} + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MetadataSQLColumn) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MetadataSQLColumn) ProtoMessage() {} + +func (x *MetadataSQLColumn) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_schema_v1_schema_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MetadataSQLColumn.ProtoReflect.Descriptor instead. +func (*MetadataSQLColumn) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_schema_v1_schema_proto_rawDescGZIP(), []int{38} +} + +func (x *MetadataSQLColumn) GetPos() *Position { + if x != nil { + return x.Pos + } + return nil +} + +func (x *MetadataSQLColumn) GetTable() string { + if x != nil { + return x.Table + } + return "" +} + +func (x *MetadataSQLColumn) GetName() string { + if x != nil { + return x.Name + } + return "" +} + type MetadataSQLMigration struct { state protoimpl.MessageState `protogen:"open.v1"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` @@ -5595,7 +5595,7 @@ var file_xyz_block_ftl_schema_v1_schema_proto_rawDesc = []byte{ 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe2, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe5, 0x09, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, @@ -5617,630 +5617,630 @@ var file_xyz_block_ftl_schema_v1_schema_proto_rawDesc = []byte{ 0x6a, 0x6f, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, 0x6f, 0x6e, - 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x07, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x48, - 0x0a, 0x09, 0x64, 0x62, 0x5f, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x4a, 0x6f, 0x62, 0x48, 0x00, 0x52, 0x07, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x4a, + 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x44, 0x42, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x00, 0x52, 0x08, - 0x64, 0x62, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x4a, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x48, 0x00, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, - 0x61, 0x73, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, - 0x67, 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, - 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x07, 0x69, 0x6e, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, - 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x3e, - 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x48, 0x00, 0x52, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, + 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, + 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, + 0x52, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x65, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x12, 0x54, - 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x71, 0x6c, 0x4d, 0x69, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x5f, 0x71, 0x75, 0x65, 0x72, - 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x44, - 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4a, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x05, 0x72, + 0x65, 0x74, 0x72, 0x79, 0x12, 0x4b, 0x0a, 0x0a, 0x73, 0x71, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x75, + 0x6d, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x48, - 0x00, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4b, 0x69, 0x6e, - 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x67, 0x0a, 0x0f, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x38, - 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x43, 0x6f, + 0x6c, 0x75, 0x6d, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x73, 0x71, 0x6c, 0x43, 0x6f, 0x6c, 0x75, 0x6d, + 0x6e, 0x12, 0x54, 0x0a, 0x0d, 0x73, 0x71, 0x6c, 0x5f, 0x6d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x71, 0x6c, 0x4d, 0x69, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x09, 0x73, 0x71, 0x6c, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x00, 0x52, 0x08, 0x73, 0x71, 0x6c, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x12, 0x44, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x48, 0x00, 0x52, 0x07, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x72, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x72, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x7e, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x44, 0x42, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6d, + 0x61, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, + 0x61, 0x70, 0x48, 0x00, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x42, 0x07, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0x82, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x01, 0x01, 0x12, 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x6c, 0x69, 0x61, 0x73, + 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, + 0x69, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x64, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x0d, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, - 0x41, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, - 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x76, 0x0a, 0x12, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, - 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, - 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, - 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0xfb, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, - 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x05, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x62, - 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, - 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, - 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, - 0x61, 0x78, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x37, 0x0a, 0x05, 0x63, 0x61, 0x74, - 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x02, 0x52, 0x05, 0x63, 0x61, 0x74, 0x63, 0x68, 0x88, - 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x61, 0x74, 0x63, 0x68, 0x22, 0x70, - 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, 0x4d, 0x69, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0x88, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0x84, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, - 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, - 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, - 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x12, 0x34, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x06, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x67, + 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, + 0x62, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x72, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x72, 0x6f, 0x6e, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x66, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xf1, 0x01, 0x0a, 0x12, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, + 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0x82, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, + 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x6c, 0x65, 0x6e, 0x69, 0x65, 0x6e, 0x74, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, - 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, + 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x12, 0x41, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x76, 0x0a, + 0x12, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, + 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, + 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x66, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x44, 0x0a, 0x0b, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x61, 0x64, 0x4c, 0x65, 0x74, 0x74, 0x65, - 0x72, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x0f, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x12, 0x38, 0x0a, - 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, - 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xcc, 0x02, 0x0a, 0x06, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x52, 0x65, 0x66, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, - 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x62, 0x75, - 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x19, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, + 0x6e, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x6d, 0x69, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, + 0x61, 0x78, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x37, 0x0a, 0x05, + 0x63, 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x05, 0x64, 0x65, 0x63, 0x6c, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x02, 0x52, 0x05, 0x63, 0x61, 0x74, + 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x08, 0x0a, + 0x06, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63, 0x61, 0x74, 0x63, + 0x68, 0x22, 0x7f, 0x0a, 0x11, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, 0x4c, + 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, + 0x6f, 0x73, 0x22, 0x70, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x51, + 0x4c, 0x4d, 0x69, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x05, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x12, 0x42, 0x0a, - 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x0d, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x62, - 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x07, 0x73, - 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x42, 0x06, 0x0a, 0x04, + 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x53, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x0f, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, + 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x07, 0x73, - 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, 0x0a, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, - 0x01, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, - 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x0b, - 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0xcf, 0x01, 0x0a, 0x11, - 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x13, 0x0a, 0x02, 0x6f, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, - 0x17, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, - 0x04, 0x61, 0x72, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x61, - 0x72, 0x63, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xd6, 0x01, - 0x0a, 0x17, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x0a, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd2, 0x02, 0x0a, 0x12, 0x4d, 0x6f, 0x64, 0x75, 0x6c, - 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, - 0x13, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x07, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x19, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xf1, 0x01, 0x0a, 0x12, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, + 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x44, + 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x72, + 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x52, 0x0a, 0x66, 0x72, 0x6f, 0x6d, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x61, 0x64, 0x5f, 0x6c, 0x65, 0x74, + 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x61, 0x64, 0x4c, + 0x65, 0x74, 0x74, 0x65, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8e, 0x01, + 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, + 0x70, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x16, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x63, - 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x14, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, - 0x6e, 0x67, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x39, 0x0a, 0x14, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, - 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x08, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x07, 0x0a, - 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x52, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x69, - 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xbb, 0x01, 0x0a, 0x03, 0x52, - 0x65, 0x66, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xcc, + 0x02, 0x0a, 0x06, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x74, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3d, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x16, 0x0a, 0x06, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x74, 0x79, 0x70, 0x65, - 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xec, 0x04, 0x0a, 0x0c, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x16, 0x64, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x5c, 0x0a, 0x13, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x05, + 0x64, 0x65, 0x63, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x05, 0x64, 0x65, 0x63, 0x6c, + 0x73, 0x12, 0x42, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x72, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8f, 0x02, + 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, + 0x3e, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x6e, - 0x0a, 0x19, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, + 0x4c, 0x0a, 0x07, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, + 0x00, 0x52, 0x07, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x55, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, - 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x65, - 0x0a, 0x16, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, + 0x65, 0x6e, 0x74, 0x48, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x22, + 0xcf, 0x01, 0x0a, 0x11, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x13, + 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x05, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, 0x52, 0x05, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x6f, 0x73, 0x42, 0x07, + 0x0a, 0x05, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, 0x6d, 0x61, 0x67, + 0x65, 0x22, 0xd6, 0x01, 0x0a, 0x17, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x3d, 0x0a, 0x0c, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0xd2, 0x02, 0x0a, 0x12, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x5c, 0x0a, 0x13, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, - 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, - 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5c, 0x0a, 0x13, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x72, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x11, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x76, 0x65, - 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x07, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x07, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x07, - 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0xad, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0x4a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, 0x0a, 0x0b, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, - 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd9, 0x02, 0x0a, - 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x11, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, + 0x6e, 0x0a, 0x19, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, + 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x65, 0x0a, 0x16, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x48, 0x00, + 0x52, 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, + 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x39, 0x0a, 0x14, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, + 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x08, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, + 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x52, 0x0a, 0x08, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xbb, + 0x01, 0x0a, 0x03, 0x52, 0x65, 0x66, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, - 0x12, 0x46, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x33, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x0a, 0x0a, 0x08, - 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x0c, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, 0x66, 0x6b, - 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x11, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x9a, - 0x05, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x61, 0x6e, 0x79, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x6e, 0x79, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x48, 0x00, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x48, 0x00, - 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x0f, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x36, - 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xec, 0x04, 0x0a, + 0x0c, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, + 0x16, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x48, 0x00, 0x52, - 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x13, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, + 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, + 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x19, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x70, 0x12, 0x3f, 0x0a, 0x08, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, - 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x30, 0x0a, 0x03, 0x72, - 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x39, 0x0a, - 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, - 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x33, 0x0a, - 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x6e, - 0x69, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x87, 0x02, 0x0a, 0x09, - 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x16, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, + 0x67, 0x48, 0x00, 0x52, 0x14, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x5c, 0x0a, 0x13, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, - 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, 0x0a, 0x0d, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x62, 0x5f, + 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x10, 0x76, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x06, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x82, 0x01, 0x0a, - 0x09, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x07, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x38, + 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0x4a, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0x65, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, + 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, + 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x22, 0xd9, 0x02, 0x0a, 0x05, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x46, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, + 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, - 0x73, 0x22, 0x48, 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe2, 0x01, 0x0a, 0x05, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x70, 0x65, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x0c, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x11, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x3f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x22, 0x9a, 0x05, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x61, + 0x6e, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, - 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x96, 0x03, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, + 0x76, 0x31, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x36, 0x0a, + 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x45, - 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x0b, 0x56, 0x65, - 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x04, 0x62, 0x61, 0x73, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, 0x48, 0x00, 0x52, 0x05, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x36, 0x0a, 0x05, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x12, 0x36, 0x0a, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6c, 0x6f, 0x61, + 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x69, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, - 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x88, - 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x0a, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x09, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x69, 0x0a, 0x10, 0x56, 0x65, 0x72, 0x62, - 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x45, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x03, + 0x6d, 0x61, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x70, 0x12, 0x3f, + 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, + 0x30, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, 0x03, 0x72, 0x65, + 0x66, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x33, 0x0a, 0x04, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x33, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x87, 0x02, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x31, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x22, 0xe5, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x76, 0x65, - 0x72, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x65, 0x0a, 0x0d, 0x54, 0x79, 0x70, + 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x22, 0x82, 0x01, 0x0a, 0x09, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, + 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, + 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0xe2, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x69, 0x6e, 0x74, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, + 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, + 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x96, 0x03, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x38, 0x0a, + 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x48, - 0x00, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, - 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x19, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x76, 0x65, 0x72, 0x62, 0x52, - 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3e, 0x0a, 0x17, 0x56, + 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x01, 0x52, 0x07, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, + 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xb7, 0x01, + 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, + 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x01, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x62, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, + 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, + 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0e, 0x0a, + 0x0c, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x0d, 0x0a, + 0x0b, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x69, 0x0a, 0x10, + 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x45, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xe5, 0x01, 0x0a, 0x12, 0x56, 0x65, 0x72, 0x62, + 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x56, + 0x0a, 0x11, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x62, + 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, + 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0f, 0x76, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x42, 0x61, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x19, 0x76, 0x65, 0x72, 0x62, 0x5f, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x17, 0x76, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x5f, - 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6b, - 0x61, 0x66, 0x6b, 0x61, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x2a, 0x3c, 0x0a, 0x09, 0x41, - 0x6c, 0x69, 0x61, 0x73, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x4c, 0x49, 0x41, - 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x5c, 0x0a, 0x0a, 0x46, 0x72, 0x6f, - 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x52, 0x4f, 0x4d, 0x5f, - 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, - 0x53, 0x45, 0x54, 0x5f, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, - 0x16, 0x0a, 0x12, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x4c, - 0x41, 0x54, 0x45, 0x53, 0x54, 0x10, 0x02, 0x42, 0x47, 0x50, 0x01, 0x5a, 0x43, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, - 0x6c, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, - 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x3e, 0x0a, 0x17, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6b, 0x61, + 0x66, 0x6b, 0x61, 0x5f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x6b, 0x61, 0x66, 0x6b, 0x61, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x2a, + 0x3c, 0x0a, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x16, + 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x49, 0x41, + 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, 0x2a, 0x5c, 0x0a, + 0x0a, 0x46, 0x72, 0x6f, 0x6d, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x17, 0x46, + 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, + 0x5f, 0x4f, 0x46, 0x46, 0x53, 0x45, 0x54, 0x5f, 0x42, 0x45, 0x47, 0x49, 0x4e, 0x4e, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x4f, 0x46, 0x46, 0x53, + 0x45, 0x54, 0x5f, 0x4c, 0x41, 0x54, 0x45, 0x53, 0x54, 0x10, 0x02, 0x42, 0x47, 0x50, 0x01, 0x5a, + 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, + 0x6c, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -6292,13 +6292,13 @@ var file_xyz_block_ftl_schema_v1_schema_proto_goTypes = []any{ (*MetadataCalls)(nil), // 31: xyz.block.ftl.schema.v1.MetadataCalls (*MetadataConfig)(nil), // 32: xyz.block.ftl.schema.v1.MetadataConfig (*MetadataCronJob)(nil), // 33: xyz.block.ftl.schema.v1.MetadataCronJob - (*MetadataDBColumn)(nil), // 34: xyz.block.ftl.schema.v1.MetadataDBColumn - (*MetadataDatabases)(nil), // 35: xyz.block.ftl.schema.v1.MetadataDatabases - (*MetadataEncoding)(nil), // 36: xyz.block.ftl.schema.v1.MetadataEncoding - (*MetadataIngress)(nil), // 37: xyz.block.ftl.schema.v1.MetadataIngress - (*MetadataPartitions)(nil), // 38: xyz.block.ftl.schema.v1.MetadataPartitions - (*MetadataPublisher)(nil), // 39: xyz.block.ftl.schema.v1.MetadataPublisher - (*MetadataRetry)(nil), // 40: xyz.block.ftl.schema.v1.MetadataRetry + (*MetadataDatabases)(nil), // 34: xyz.block.ftl.schema.v1.MetadataDatabases + (*MetadataEncoding)(nil), // 35: xyz.block.ftl.schema.v1.MetadataEncoding + (*MetadataIngress)(nil), // 36: xyz.block.ftl.schema.v1.MetadataIngress + (*MetadataPartitions)(nil), // 37: xyz.block.ftl.schema.v1.MetadataPartitions + (*MetadataPublisher)(nil), // 38: xyz.block.ftl.schema.v1.MetadataPublisher + (*MetadataRetry)(nil), // 39: xyz.block.ftl.schema.v1.MetadataRetry + (*MetadataSQLColumn)(nil), // 40: xyz.block.ftl.schema.v1.MetadataSQLColumn (*MetadataSQLMigration)(nil), // 41: xyz.block.ftl.schema.v1.MetadataSQLMigration (*MetadataSQLQuery)(nil), // 42: xyz.block.ftl.schema.v1.MetadataSQLQuery (*MetadataSecrets)(nil), // 43: xyz.block.ftl.schema.v1.MetadataSecrets @@ -6392,13 +6392,13 @@ var file_xyz_block_ftl_schema_v1_schema_proto_depIdxs = []int32{ 31, // 52: xyz.block.ftl.schema.v1.Metadata.calls:type_name -> xyz.block.ftl.schema.v1.MetadataCalls 32, // 53: xyz.block.ftl.schema.v1.Metadata.config:type_name -> xyz.block.ftl.schema.v1.MetadataConfig 33, // 54: xyz.block.ftl.schema.v1.Metadata.cron_job:type_name -> xyz.block.ftl.schema.v1.MetadataCronJob - 34, // 55: xyz.block.ftl.schema.v1.Metadata.db_column:type_name -> xyz.block.ftl.schema.v1.MetadataDBColumn - 35, // 56: xyz.block.ftl.schema.v1.Metadata.databases:type_name -> xyz.block.ftl.schema.v1.MetadataDatabases - 36, // 57: xyz.block.ftl.schema.v1.Metadata.encoding:type_name -> xyz.block.ftl.schema.v1.MetadataEncoding - 37, // 58: xyz.block.ftl.schema.v1.Metadata.ingress:type_name -> xyz.block.ftl.schema.v1.MetadataIngress - 38, // 59: xyz.block.ftl.schema.v1.Metadata.partitions:type_name -> xyz.block.ftl.schema.v1.MetadataPartitions - 39, // 60: xyz.block.ftl.schema.v1.Metadata.publisher:type_name -> xyz.block.ftl.schema.v1.MetadataPublisher - 40, // 61: xyz.block.ftl.schema.v1.Metadata.retry:type_name -> xyz.block.ftl.schema.v1.MetadataRetry + 34, // 55: xyz.block.ftl.schema.v1.Metadata.databases:type_name -> xyz.block.ftl.schema.v1.MetadataDatabases + 35, // 56: xyz.block.ftl.schema.v1.Metadata.encoding:type_name -> xyz.block.ftl.schema.v1.MetadataEncoding + 36, // 57: xyz.block.ftl.schema.v1.Metadata.ingress:type_name -> xyz.block.ftl.schema.v1.MetadataIngress + 37, // 58: xyz.block.ftl.schema.v1.Metadata.partitions:type_name -> xyz.block.ftl.schema.v1.MetadataPartitions + 38, // 59: xyz.block.ftl.schema.v1.Metadata.publisher:type_name -> xyz.block.ftl.schema.v1.MetadataPublisher + 39, // 60: xyz.block.ftl.schema.v1.Metadata.retry:type_name -> xyz.block.ftl.schema.v1.MetadataRetry + 40, // 61: xyz.block.ftl.schema.v1.Metadata.sql_column:type_name -> xyz.block.ftl.schema.v1.MetadataSQLColumn 41, // 62: xyz.block.ftl.schema.v1.Metadata.sql_migration:type_name -> xyz.block.ftl.schema.v1.MetadataSQLMigration 42, // 63: xyz.block.ftl.schema.v1.Metadata.sql_query:type_name -> xyz.block.ftl.schema.v1.MetadataSQLQuery 43, // 64: xyz.block.ftl.schema.v1.Metadata.secrets:type_name -> xyz.block.ftl.schema.v1.MetadataSecrets @@ -6412,17 +6412,17 @@ var file_xyz_block_ftl_schema_v1_schema_proto_depIdxs = []int32{ 53, // 72: xyz.block.ftl.schema.v1.MetadataConfig.pos:type_name -> xyz.block.ftl.schema.v1.Position 54, // 73: xyz.block.ftl.schema.v1.MetadataConfig.config:type_name -> xyz.block.ftl.schema.v1.Ref 53, // 74: xyz.block.ftl.schema.v1.MetadataCronJob.pos:type_name -> xyz.block.ftl.schema.v1.Position - 53, // 75: xyz.block.ftl.schema.v1.MetadataDBColumn.pos:type_name -> xyz.block.ftl.schema.v1.Position - 53, // 76: xyz.block.ftl.schema.v1.MetadataDatabases.pos:type_name -> xyz.block.ftl.schema.v1.Position - 54, // 77: xyz.block.ftl.schema.v1.MetadataDatabases.calls:type_name -> xyz.block.ftl.schema.v1.Ref - 53, // 78: xyz.block.ftl.schema.v1.MetadataEncoding.pos:type_name -> xyz.block.ftl.schema.v1.Position - 53, // 79: xyz.block.ftl.schema.v1.MetadataIngress.pos:type_name -> xyz.block.ftl.schema.v1.Position - 22, // 80: xyz.block.ftl.schema.v1.MetadataIngress.path:type_name -> xyz.block.ftl.schema.v1.IngressPathComponent - 53, // 81: xyz.block.ftl.schema.v1.MetadataPartitions.pos:type_name -> xyz.block.ftl.schema.v1.Position - 53, // 82: xyz.block.ftl.schema.v1.MetadataPublisher.pos:type_name -> xyz.block.ftl.schema.v1.Position - 54, // 83: xyz.block.ftl.schema.v1.MetadataPublisher.topics:type_name -> xyz.block.ftl.schema.v1.Ref - 53, // 84: xyz.block.ftl.schema.v1.MetadataRetry.pos:type_name -> xyz.block.ftl.schema.v1.Position - 54, // 85: xyz.block.ftl.schema.v1.MetadataRetry.catch:type_name -> xyz.block.ftl.schema.v1.Ref + 53, // 75: xyz.block.ftl.schema.v1.MetadataDatabases.pos:type_name -> xyz.block.ftl.schema.v1.Position + 54, // 76: xyz.block.ftl.schema.v1.MetadataDatabases.calls:type_name -> xyz.block.ftl.schema.v1.Ref + 53, // 77: xyz.block.ftl.schema.v1.MetadataEncoding.pos:type_name -> xyz.block.ftl.schema.v1.Position + 53, // 78: xyz.block.ftl.schema.v1.MetadataIngress.pos:type_name -> xyz.block.ftl.schema.v1.Position + 22, // 79: xyz.block.ftl.schema.v1.MetadataIngress.path:type_name -> xyz.block.ftl.schema.v1.IngressPathComponent + 53, // 80: xyz.block.ftl.schema.v1.MetadataPartitions.pos:type_name -> xyz.block.ftl.schema.v1.Position + 53, // 81: xyz.block.ftl.schema.v1.MetadataPublisher.pos:type_name -> xyz.block.ftl.schema.v1.Position + 54, // 82: xyz.block.ftl.schema.v1.MetadataPublisher.topics:type_name -> xyz.block.ftl.schema.v1.Ref + 53, // 83: xyz.block.ftl.schema.v1.MetadataRetry.pos:type_name -> xyz.block.ftl.schema.v1.Position + 54, // 84: xyz.block.ftl.schema.v1.MetadataRetry.catch:type_name -> xyz.block.ftl.schema.v1.Ref + 53, // 85: xyz.block.ftl.schema.v1.MetadataSQLColumn.pos:type_name -> xyz.block.ftl.schema.v1.Position 53, // 86: xyz.block.ftl.schema.v1.MetadataSQLMigration.pos:type_name -> xyz.block.ftl.schema.v1.Position 53, // 87: xyz.block.ftl.schema.v1.MetadataSQLQuery.pos:type_name -> xyz.block.ftl.schema.v1.Position 53, // 88: xyz.block.ftl.schema.v1.MetadataSecrets.pos:type_name -> xyz.block.ftl.schema.v1.Position @@ -6558,13 +6558,13 @@ func file_xyz_block_ftl_schema_v1_schema_proto_init() { (*Metadata_Calls)(nil), (*Metadata_Config)(nil), (*Metadata_CronJob)(nil), - (*Metadata_DbColumn)(nil), (*Metadata_Databases)(nil), (*Metadata_Encoding)(nil), (*Metadata_Ingress)(nil), (*Metadata_Partitions)(nil), (*Metadata_Publisher)(nil), (*Metadata_Retry)(nil), + (*Metadata_SqlColumn)(nil), (*Metadata_SqlMigration)(nil), (*Metadata_SqlQuery)(nil), (*Metadata_Secrets)(nil), diff --git a/common/protos/xyz/block/ftl/schema/v1/schema.proto b/common/protos/xyz/block/ftl/schema/v1/schema.proto index 311b9ed6f..b17c75d75 100644 --- a/common/protos/xyz/block/ftl/schema/v1/schema.proto +++ b/common/protos/xyz/block/ftl/schema/v1/schema.proto @@ -189,13 +189,13 @@ message Metadata { MetadataCalls calls = 1; MetadataConfig config = 10; MetadataCronJob cron_job = 3; - MetadataDBColumn db_column = 17; MetadataDatabases databases = 4; MetadataEncoding encoding = 9; MetadataIngress ingress = 2; MetadataPartitions partitions = 15; MetadataPublisher publisher = 12; MetadataRetry retry = 6; + MetadataSQLColumn sql_column = 17; MetadataSQLMigration sql_migration = 13; MetadataSQLQuery sql_query = 16; MetadataSecrets secrets = 11; @@ -234,13 +234,6 @@ message MetadataCronJob { string cron = 2; } -// MetadataDBColumn designates a database column. -message MetadataDBColumn { - optional Position pos = 1; - string table = 2; - string name = 3; -} - message MetadataDatabases { optional Position pos = 1; repeated Ref calls = 2; @@ -277,6 +270,13 @@ message MetadataRetry { optional Ref catch = 5; } +// MetadataSQLColumn designates a database column. +message MetadataSQLColumn { + optional Position pos = 1; + string table = 2; + string name = 3; +} + message MetadataSQLMigration { optional Position pos = 1; string digest = 2; diff --git a/common/schema/go2proto.to.go b/common/schema/go2proto.to.go index 473576c73..9858fa1e8 100644 --- a/common/schema/go2proto.to.go +++ b/common/schema/go2proto.to.go @@ -3,15 +3,29 @@ package schema import "fmt" +import "encoding" import destpb "github.com/block/ftl/common/protos/xyz/block/ftl/schema/v1" -import "google.golang.org/protobuf/proto" import "google.golang.org/protobuf/types/known/timestamppb" import "google.golang.org/protobuf/types/known/durationpb" +import "github.com/alecthomas/types/optional" var _ fmt.Stringer var _ = timestamppb.Timestamp{} var _ = durationpb.Duration{} +type result[T any] struct { + Value T + Err error +} + +func toResult[T any](v T, err error) result[T] { + return result[T]{Value: v, Err: err} +} + +func (r result[T]) result() (T, error) { + return r.Value, r.Err +} + // protoSlice converts a slice of values to a slice of protobuf values. func protoSlice[P any, T interface{ ToProto() P }](values []T) []P { out := make([]P, len(values)) @@ -36,15 +50,16 @@ func sliceMap[T any, U any](values []T, f func(T) U) []U { return out } -func sliceMapErr[T any, U any](values []T, f func(T) (U, error)) ([]U, error) { - var err error +func sliceMapR[T any, U any](values []T, f func(T) result[U]) result[[]U] { out := make([]U, len(values)) for i, v := range values { - if out[i], err = f(v); err != nil { - return nil, err + r := f(v) + if r.Err != nil { + return result[[]U]{Err: r.Err} } + out[i] = r.Value } - return out, nil + return result[[]U]{Value: out} } func orZero[T any](v *T) T { @@ -54,13 +69,32 @@ func orZero[T any](v *T) T { return *v } -func ptr[T any, O any](v *O, o T) *T { - if v == nil { - return nil +func orZeroR[T any](v result[*T]) result[T] { + if v.Err != nil { + return result[T]{Err: v.Err} + } + return result[T]{Value: orZero(v.Value)} +} + +func optionalOrNil[T any](v optional.Option[T]) *T { + if v.Ok() { + r := v.MustGet() + return &r } + return nil +} + +func ptr[T any](o T) *T { return &o } +func ptrR[T any](o result[T]) result[*T] { + if o.Err != nil { + return result[*T]{Err: o.Err} + } + return result[*T]{Value: ptr(o.Value)} +} + func fromPtr[T any](v *T) T { if v == nil { return *new(T) @@ -68,6 +102,60 @@ func fromPtr[T any](v *T) T { return *v } +func fromPtrR[T any](v result[*T]) result[T] { + if v.Err != nil { + return result[T]{Err: v.Err} + } + return result[T]{Value: fromPtr(v.Value)} +} + +func optionalR[T any](r result[*T]) result[optional.Option[T]] { + if r.Err != nil { + return result[optional.Option[T]]{Err: r.Err} + } + return result[optional.Option[T]]{Value: optional.Ptr(r.Value)} +} + +func setNil[T, O any](v *T, o *O) *T { + if o == nil { + return nil + } + return v +} + +func setNilR[T, O any](v result[*T], o *O) result[*T] { + if v.Err != nil { + return v + } + return result[*T]{Value: setNil(v.Value, o)} +} + +type binaryUnmarshallable[T any] interface { + *T + encoding.BinaryUnmarshaler +} + +type textUnmarshallable[T any] interface { + *T + encoding.TextUnmarshaler +} + +func unmarshallBinary[T any, TPtr binaryUnmarshallable[T]](v []byte, f TPtr) (*T, error) { + var to T + toptr := (TPtr)(&to) + + err := toptr.UnmarshalBinary(v) + return &to, err +} + +func unmarshallText[T any, TPtr textUnmarshallable[T]](v []byte, f TPtr) (*T, error) { + var to T + toptr := (TPtr)(&to) + + err := toptr.UnmarshalText(v) + return &to, err +} + func (x *AWSIAMAuthDatabaseConnector) ToProto() *destpb.AWSIAMAuthDatabaseConnector { if x == nil { return nil @@ -86,14 +174,22 @@ func AWSIAMAuthDatabaseConnectorFromProto(v *destpb.AWSIAMAuthDatabaseConnector) } out = &AWSIAMAuthDatabaseConnector{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Username = string(v.Username) - out.Endpoint = string(v.Endpoint) - out.Database = string(v.Database) + out.Username, err = orZeroR(toResult(ptr(string(v.Username)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Username: %w", err) + } + out.Endpoint, err = orZeroR(toResult(ptr(string(v.Endpoint)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Endpoint: %w", err) + } + out.Database, err = orZeroR(toResult(ptr(string(v.Database)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Database: %w", err) + } return out, nil } @@ -121,10 +217,9 @@ func AnyFromProto(v *destpb.Any) (out *Any, err error) { } out = &Any{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -145,12 +240,12 @@ func ArrayFromProto(v *destpb.Array) (out *Array, err error) { } out = &Array{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Element, err = TypeFromProto(v.Element); err != nil { + out.Element, err = orZeroR(ptrR(toResult(TypeFromProto(v.Element)))).result() + if err != nil { return nil, fmt.Errorf("Element: %w", err) } return out, nil @@ -171,10 +266,9 @@ func BoolFromProto(v *destpb.Bool) (out *Bool, err error) { } out = &Bool{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -194,10 +288,9 @@ func BytesFromProto(v *destpb.Bytes) (out *Bytes, err error) { } out = &Bytes{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -220,14 +313,20 @@ func ConfigFromProto(v *destpb.Config) (out *Config, err error) { } out = &Config{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Name = string(v.Name) - if out.Type, err = TypeFromProto(v.Type); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Type, err = orZeroR(ptrR(toResult(TypeFromProto(v.Type)))).result() + if err != nil { return nil, fmt.Errorf("Type: %w", err) } return out, nil @@ -249,12 +348,14 @@ func DSNDatabaseConnectorFromProto(v *destpb.DSNDatabaseConnector) (out *DSNData } out = &DSNDatabaseConnector{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.DSN = string(v.Dsn) + out.DSN, err = orZeroR(toResult(ptr(string(v.Dsn)), nil)).result() + if err != nil { + return nil, fmt.Errorf("DSN: %w", err) + } return out, nil } @@ -267,9 +368,9 @@ func (x *Data) ToProto() *destpb.Data { Comments: sliceMap(x.Comments, func(v string) string { return string(v) }), Export: bool(x.Export), Name: string(x.Name), - TypeParameters: protoSlice[*destpb.TypeParameter](x.TypeParameters), - Fields: protoSlice[*destpb.Field](x.Fields), - Metadata: sliceMap(x.Metadata, MetadataToProto), + TypeParameters: sliceMap(x.TypeParameters, func(v *TypeParameter) *destpb.TypeParameter { return v.ToProto() }), + Fields: sliceMap(x.Fields, func(v *Field) *destpb.Field { return v.ToProto() }), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), } } @@ -279,21 +380,32 @@ func DataFromProto(v *destpb.Data) (out *Data, err error) { } out = &Data{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Export = bool(v.Export) - out.Name = string(v.Name) - if out.TypeParameters, err = sliceMapErr(v.TypeParameters, TypeParameterFromProto); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Export, err = orZeroR(toResult(ptr(bool(v.Export)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Export: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.TypeParameters, err = sliceMapR(v.TypeParameters, func(v *destpb.TypeParameter) result[*TypeParameter] { return toResult(TypeParameterFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("TypeParameters: %w", err) } - if out.Fields, err = sliceMapErr(v.Fields, FieldFromProto); err != nil { + out.Fields, err = sliceMapR(v.Fields, func(v *destpb.Field) result[*Field] { return toResult(FieldFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Fields: %w", err) } - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } return out, nil @@ -309,7 +421,7 @@ func (x *Database) ToProto() *destpb.Database { Comments: sliceMap(x.Comments, func(v string) string { return string(v) }), Type: string(x.Type), Name: string(x.Name), - Metadata: sliceMap(x.Metadata, MetadataToProto), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), } } @@ -319,18 +431,28 @@ func DatabaseFromProto(v *destpb.Database) (out *Database, err error) { } out = &Database{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Runtime, err = DatabaseRuntimeFromProto(v.Runtime); err != nil { + out.Runtime, err = toResult(DatabaseRuntimeFromProto(v.Runtime)).result() + if err != nil { return nil, fmt.Errorf("Runtime: %w", err) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Type = string(v.Type) - out.Name = string(v.Name) - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Type, err = orZeroR(toResult(ptr(string(v.Type)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Type: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } return out, nil @@ -383,7 +505,8 @@ func DatabaseRuntimeFromProto(v *destpb.DatabaseRuntime) (out *DatabaseRuntime, } out = &DatabaseRuntime{} - if out.Connections, err = DatabaseRuntimeConnectionsFromProto(v.Connections); err != nil { + out.Connections, err = toResult(DatabaseRuntimeConnectionsFromProto(v.Connections)).result() + if err != nil { return nil, fmt.Errorf("Connections: %w", err) } return out, nil @@ -405,10 +528,12 @@ func DatabaseRuntimeConnectionsFromProto(v *destpb.DatabaseRuntimeConnections) ( } out = &DatabaseRuntimeConnections{} - if out.Read, err = DatabaseConnectorFromProto(v.Read); err != nil { + out.Read, err = orZeroR(ptrR(toResult(DatabaseConnectorFromProto(v.Read)))).result() + if err != nil { return nil, fmt.Errorf("Read: %w", err) } - if out.Write, err = DatabaseConnectorFromProto(v.Write); err != nil { + out.Write, err = orZeroR(ptrR(toResult(DatabaseConnectorFromProto(v.Write)))).result() + if err != nil { return nil, fmt.Errorf("Write: %w", err) } return out, nil @@ -429,7 +554,8 @@ func DatabaseRuntimeConnectionsEventFromProto(v *destpb.DatabaseRuntimeConnectio } out = &DatabaseRuntimeConnectionsEvent{} - if out.Connections, err = DatabaseRuntimeConnectionsFromProto(v.Connections); err != nil { + out.Connections, err = toResult(DatabaseRuntimeConnectionsFromProto(v.Connections)).result() + if err != nil { return nil, fmt.Errorf("Connections: %w", err) } return out, nil @@ -451,8 +577,12 @@ func DatabaseRuntimeEventFromProto(v *destpb.DatabaseRuntimeEvent) (out *Databas } out = &DatabaseRuntimeEvent{} - out.ID = string(v.Id) - if out.Payload, err = DatabaseRuntimeEventPayloadFromProto(v.Payload); err != nil { + out.ID, err = orZeroR(toResult(ptr(string(v.Id)), nil)).result() + if err != nil { + return nil, fmt.Errorf("ID: %w", err) + } + out.Payload, err = orZeroR(ptrR(toResult(DatabaseRuntimeEventPayloadFromProto(v.Payload)))).result() + if err != nil { return nil, fmt.Errorf("Payload: %w", err) } return out, nil @@ -562,7 +692,7 @@ func (x *Enum) ToProto() *destpb.Enum { Export: bool(x.Export), Name: string(x.Name), Type: TypeToProto(x.Type), - Variants: protoSlice[*destpb.EnumVariant](x.Variants), + Variants: sliceMap(x.Variants, func(v *EnumVariant) *destpb.EnumVariant { return v.ToProto() }), } } @@ -572,18 +702,28 @@ func EnumFromProto(v *destpb.Enum) (out *Enum, err error) { } out = &Enum{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Export = bool(v.Export) - out.Name = string(v.Name) - if out.Type, err = TypeFromProto(v.Type); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Export, err = orZeroR(toResult(ptr(bool(v.Export)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Export: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Type, err = orZeroR(ptrR(toResult(TypeFromProto(v.Type)))).result() + if err != nil { return nil, fmt.Errorf("Type: %w", err) } - if out.Variants, err = sliceMapErr(v.Variants, EnumVariantFromProto); err != nil { + out.Variants, err = sliceMapR(v.Variants, func(v *destpb.EnumVariant) result[*EnumVariant] { return toResult(EnumVariantFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Variants: %w", err) } return out, nil @@ -607,14 +747,20 @@ func EnumVariantFromProto(v *destpb.EnumVariant) (out *EnumVariant, err error) { } out = &EnumVariant{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Name = string(v.Name) - if out.Value, err = ValueFromProto(v.Value); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Value, err = orZeroR(ptrR(toResult(ValueFromProto(v.Value)))).result() + if err != nil { return nil, fmt.Errorf("Value: %w", err) } return out, nil @@ -629,7 +775,7 @@ func (x *Field) ToProto() *destpb.Field { Comments: sliceMap(x.Comments, func(v string) string { return string(v) }), Name: string(x.Name), Type: TypeToProto(x.Type), - Metadata: sliceMap(x.Metadata, MetadataToProto), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), } } @@ -639,17 +785,24 @@ func FieldFromProto(v *destpb.Field) (out *Field, err error) { } out = &Field{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Name = string(v.Name) - if out.Type, err = TypeFromProto(v.Type); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Type, err = orZeroR(ptrR(toResult(TypeFromProto(v.Type)))).result() + if err != nil { return nil, fmt.Errorf("Type: %w", err) } - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } return out, nil @@ -670,10 +823,9 @@ func FloatFromProto(v *destpb.Float) (out *Float, err error) { } out = &Float{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -735,12 +887,14 @@ func IngressPathLiteralFromProto(v *destpb.IngressPathLiteral) (out *IngressPath } out = &IngressPathLiteral{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Text = string(v.Text) + out.Text, err = orZeroR(toResult(ptr(string(v.Text)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Text: %w", err) + } return out, nil } @@ -760,12 +914,14 @@ func IngressPathParameterFromProto(v *destpb.IngressPathParameter) (out *Ingress } out = &IngressPathParameter{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Name = string(v.Name) + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } return out, nil } @@ -784,10 +940,9 @@ func IntFromProto(v *destpb.Int) (out *Int, err error) { } out = &Int{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -808,12 +963,14 @@ func IntValueFromProto(v *destpb.IntValue) (out *IntValue, err error) { } out = &IntValue{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Value = int(v.Value) + out.Value, err = orZeroR(toResult(ptr(int(v.Value)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Value: %w", err) + } return out, nil } @@ -834,15 +991,16 @@ func MapFromProto(v *destpb.Map) (out *Map, err error) { } out = &Map{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Key, err = TypeFromProto(v.Key); err != nil { + out.Key, err = orZeroR(ptrR(toResult(TypeFromProto(v.Key)))).result() + if err != nil { return nil, fmt.Errorf("Key: %w", err) } - if out.Value, err = TypeFromProto(v.Value); err != nil { + out.Value, err = orZeroR(ptrR(toResult(TypeFromProto(v.Value)))).result() + if err != nil { return nil, fmt.Errorf("Value: %w", err) } return out, nil @@ -873,10 +1031,6 @@ func MetadataToProto(value Metadata) *destpb.Metadata { return &destpb.Metadata{ Value: &destpb.Metadata_CronJob{value.ToProto()}, } - case *MetadataSQLColumn: - return &destpb.Metadata{ - Value: &destpb.Metadata_DbColumn{value.ToProto()}, - } case *MetadataDatabases: return &destpb.Metadata{ Value: &destpb.Metadata_Databases{value.ToProto()}, @@ -901,6 +1055,10 @@ func MetadataToProto(value Metadata) *destpb.Metadata { return &destpb.Metadata{ Value: &destpb.Metadata_Retry{value.ToProto()}, } + case *MetadataSQLColumn: + return &destpb.Metadata{ + Value: &destpb.Metadata_SqlColumn{value.ToProto()}, + } case *MetadataSQLMigration: return &destpb.Metadata{ Value: &destpb.Metadata_SqlMigration{value.ToProto()}, @@ -941,8 +1099,6 @@ func MetadataFromProto(v *destpb.Metadata) (Metadata, error) { return MetadataConfigFromProto(v.GetConfig()) case *destpb.Metadata_CronJob: return MetadataCronJobFromProto(v.GetCronJob()) - case *destpb.Metadata_DbColumn: - return MetadataDBColumnFromProto(v.GetDbColumn()) case *destpb.Metadata_Databases: return MetadataDatabasesFromProto(v.GetDatabases()) case *destpb.Metadata_Encoding: @@ -955,6 +1111,8 @@ func MetadataFromProto(v *destpb.Metadata) (Metadata, error) { return MetadataPublisherFromProto(v.GetPublisher()) case *destpb.Metadata_Retry: return MetadataRetryFromProto(v.GetRetry()) + case *destpb.Metadata_SqlColumn: + return MetadataSQLColumnFromProto(v.GetSqlColumn()) case *destpb.Metadata_SqlMigration: return MetadataSQLMigrationFromProto(v.GetSqlMigration()) case *destpb.Metadata_SqlQuery: @@ -987,15 +1145,18 @@ func MetadataAliasFromProto(v *destpb.MetadataAlias) (out *MetadataAlias, err er } out = &MetadataAlias{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Kind, err = AliasKindFromProto(v.Kind); err != nil { + out.Kind, err = orZeroR(ptrR(toResult(AliasKindFromProto(v.Kind)))).result() + if err != nil { return nil, fmt.Errorf("Kind: %w", err) } - out.Alias = string(v.Alias) + out.Alias, err = orZeroR(toResult(ptr(string(v.Alias)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Alias: %w", err) + } return out, nil } @@ -1017,14 +1178,22 @@ func MetadataArtefactFromProto(v *destpb.MetadataArtefact) (out *MetadataArtefac } out = &MetadataArtefact{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Path = string(v.Path) - out.Digest = string(v.Digest) - out.Executable = bool(v.Executable) + out.Path, err = orZeroR(toResult(ptr(string(v.Path)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Path: %w", err) + } + out.Digest, err = orZeroR(toResult(ptr(string(v.Digest)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Digest: %w", err) + } + out.Executable, err = orZeroR(toResult(ptr(bool(v.Executable)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Executable: %w", err) + } return out, nil } @@ -1034,7 +1203,7 @@ func (x *MetadataCalls) ToProto() *destpb.MetadataCalls { } return &destpb.MetadataCalls{ Pos: x.Pos.ToProto(), - Calls: protoSlice[*destpb.Ref](x.Calls), + Calls: sliceMap(x.Calls, func(v *Ref) *destpb.Ref { return v.ToProto() }), } } @@ -1044,12 +1213,12 @@ func MetadataCallsFromProto(v *destpb.MetadataCalls) (out *MetadataCalls, err er } out = &MetadataCalls{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Calls, err = sliceMapErr(v.Calls, RefFromProto); err != nil { + out.Calls, err = sliceMapR(v.Calls, func(v *destpb.Ref) result[*Ref] { return toResult(RefFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Calls: %w", err) } return out, nil @@ -1061,7 +1230,7 @@ func (x *MetadataConfig) ToProto() *destpb.MetadataConfig { } return &destpb.MetadataConfig{ Pos: x.Pos.ToProto(), - Config: protoSlice[*destpb.Ref](x.Config), + Config: sliceMap(x.Config, func(v *Ref) *destpb.Ref { return v.ToProto() }), } } @@ -1071,12 +1240,12 @@ func MetadataConfigFromProto(v *destpb.MetadataConfig) (out *MetadataConfig, err } out = &MetadataConfig{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Config, err = sliceMapErr(v.Config, RefFromProto); err != nil { + out.Config, err = sliceMapR(v.Config, func(v *destpb.Ref) result[*Ref] { return toResult(RefFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Config: %w", err) } return out, nil @@ -1098,39 +1267,14 @@ func MetadataCronJobFromProto(v *destpb.MetadataCronJob) (out *MetadataCronJob, } out = &MetadataCronJob{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) - } - out.Cron = string(v.Cron) - return out, nil -} - -func (x *MetadataSQLColumn) ToProto() *destpb.MetadataDBColumn { - if x == nil { - return nil - } - return &destpb.MetadataDBColumn{ - Pos: x.Pos.ToProto(), - Table: string(x.Table), - Name: string(x.Name), } -} - -func MetadataDBColumnFromProto(v *destpb.MetadataDBColumn) (out *MetadataSQLColumn, err error) { - if v == nil { - return nil, nil - } - - out = &MetadataSQLColumn{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { - return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) + out.Cron, err = orZeroR(toResult(ptr(string(v.Cron)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Cron: %w", err) } - out.Table = string(v.Table) - out.Name = string(v.Name) return out, nil } @@ -1140,7 +1284,7 @@ func (x *MetadataDatabases) ToProto() *destpb.MetadataDatabases { } return &destpb.MetadataDatabases{ Pos: x.Pos.ToProto(), - Calls: protoSlice[*destpb.Ref](x.Calls), + Calls: sliceMap(x.Calls, func(v *Ref) *destpb.Ref { return v.ToProto() }), } } @@ -1150,12 +1294,12 @@ func MetadataDatabasesFromProto(v *destpb.MetadataDatabases) (out *MetadataDatab } out = &MetadataDatabases{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Calls, err = sliceMapErr(v.Calls, RefFromProto); err != nil { + out.Calls, err = sliceMapR(v.Calls, func(v *destpb.Ref) result[*Ref] { return toResult(RefFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Calls: %w", err) } return out, nil @@ -1178,13 +1322,18 @@ func MetadataEncodingFromProto(v *destpb.MetadataEncoding) (out *MetadataEncodin } out = &MetadataEncoding{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Type = string(v.Type) - out.Lenient = bool(v.Lenient) + out.Type, err = orZeroR(toResult(ptr(string(v.Type)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Type: %w", err) + } + out.Lenient, err = orZeroR(toResult(ptr(bool(v.Lenient)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Lenient: %w", err) + } return out, nil } @@ -1196,7 +1345,7 @@ func (x *MetadataIngress) ToProto() *destpb.MetadataIngress { Pos: x.Pos.ToProto(), Type: string(x.Type), Method: string(x.Method), - Path: sliceMap(x.Path, IngressPathComponentToProto), + Path: sliceMap(x.Path, func(v IngressPathComponent) *destpb.IngressPathComponent { return IngressPathComponentToProto(v) }), } } @@ -1206,14 +1355,22 @@ func MetadataIngressFromProto(v *destpb.MetadataIngress) (out *MetadataIngress, } out = &MetadataIngress{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Type = string(v.Type) - out.Method = string(v.Method) - if out.Path, err = sliceMapErr(v.Path, IngressPathComponentFromProto); err != nil { + out.Type, err = orZeroR(toResult(ptr(string(v.Type)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Type: %w", err) + } + out.Method, err = orZeroR(toResult(ptr(string(v.Method)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Method: %w", err) + } + out.Path, err = sliceMapR(v.Path, func(v *destpb.IngressPathComponent) result[IngressPathComponent] { + return orZeroR(ptrR(toResult(IngressPathComponentFromProto(v)))) + }).result() + if err != nil { return nil, fmt.Errorf("Path: %w", err) } return out, nil @@ -1235,12 +1392,14 @@ func MetadataPartitionsFromProto(v *destpb.MetadataPartitions) (out *MetadataPar } out = &MetadataPartitions{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Partitions = int(v.Partitions) + out.Partitions, err = orZeroR(toResult(ptr(int(v.Partitions)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Partitions: %w", err) + } return out, nil } @@ -1250,7 +1409,7 @@ func (x *MetadataPublisher) ToProto() *destpb.MetadataPublisher { } return &destpb.MetadataPublisher{ Pos: x.Pos.ToProto(), - Topics: protoSlice[*destpb.Ref](x.Topics), + Topics: sliceMap(x.Topics, func(v *Ref) *destpb.Ref { return v.ToProto() }), } } @@ -1260,12 +1419,12 @@ func MetadataPublisherFromProto(v *destpb.MetadataPublisher) (out *MetadataPubli } out = &MetadataPublisher{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Topics, err = sliceMapErr(v.Topics, RefFromProto); err != nil { + out.Topics, err = sliceMapR(v.Topics, func(v *destpb.Ref) result[*Ref] { return toResult(RefFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Topics: %w", err) } return out, nil @@ -1277,7 +1436,7 @@ func (x *MetadataRetry) ToProto() *destpb.MetadataRetry { } return &destpb.MetadataRetry{ Pos: x.Pos.ToProto(), - Count: proto.Int64(int64(*x.Count)), + Count: setNil(ptr(int64(orZero(x.Count))), x.Count), MinBackoff: string(x.MinBackoff), MaxBackoff: string(x.MaxBackoff), Catch: x.Catch.ToProto(), @@ -1290,20 +1449,61 @@ func MetadataRetryFromProto(v *destpb.MetadataRetry) (out *MetadataRetry, err er } out = &MetadataRetry{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Count = ptr(v.Count, int(orZero(v.Count))) - out.MinBackoff = string(v.MinBackoff) - out.MaxBackoff = string(v.MaxBackoff) - if out.Catch, err = RefFromProto(v.Catch); err != nil { + out.Count, err = toResult(setNil(ptr(int(orZero(v.Count))), v.Count), nil).result() + if err != nil { + return nil, fmt.Errorf("Count: %w", err) + } + out.MinBackoff, err = orZeroR(toResult(ptr(string(v.MinBackoff)), nil)).result() + if err != nil { + return nil, fmt.Errorf("MinBackoff: %w", err) + } + out.MaxBackoff, err = orZeroR(toResult(ptr(string(v.MaxBackoff)), nil)).result() + if err != nil { + return nil, fmt.Errorf("MaxBackoff: %w", err) + } + out.Catch, err = toResult(RefFromProto(v.Catch)).result() + if err != nil { return nil, fmt.Errorf("Catch: %w", err) } return out, nil } +func (x *MetadataSQLColumn) ToProto() *destpb.MetadataSQLColumn { + if x == nil { + return nil + } + return &destpb.MetadataSQLColumn{ + Pos: x.Pos.ToProto(), + Table: string(x.Table), + Name: string(x.Name), + } +} + +func MetadataSQLColumnFromProto(v *destpb.MetadataSQLColumn) (out *MetadataSQLColumn, err error) { + if v == nil { + return nil, nil + } + + out = &MetadataSQLColumn{} + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { + return nil, fmt.Errorf("Pos: %w", err) + } + out.Table, err = orZeroR(toResult(ptr(string(v.Table)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Table: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + return out, nil +} + func (x *MetadataSQLMigration) ToProto() *destpb.MetadataSQLMigration { if x == nil { return nil @@ -1320,12 +1520,14 @@ func MetadataSQLMigrationFromProto(v *destpb.MetadataSQLMigration) (out *Metadat } out = &MetadataSQLMigration{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Digest = string(v.Digest) + out.Digest, err = orZeroR(toResult(ptr(string(v.Digest)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Digest: %w", err) + } return out, nil } @@ -1346,13 +1548,18 @@ func MetadataSQLQueryFromProto(v *destpb.MetadataSQLQuery) (out *MetadataSQLQuer } out = &MetadataSQLQuery{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Command = string(v.Command) - out.Query = string(v.Query) + out.Command, err = orZeroR(toResult(ptr(string(v.Command)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Command: %w", err) + } + out.Query, err = orZeroR(toResult(ptr(string(v.Query)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Query: %w", err) + } return out, nil } @@ -1362,7 +1569,7 @@ func (x *MetadataSecrets) ToProto() *destpb.MetadataSecrets { } return &destpb.MetadataSecrets{ Pos: x.Pos.ToProto(), - Secrets: protoSlice[*destpb.Ref](x.Secrets), + Secrets: sliceMap(x.Secrets, func(v *Ref) *destpb.Ref { return v.ToProto() }), } } @@ -1372,12 +1579,12 @@ func MetadataSecretsFromProto(v *destpb.MetadataSecrets) (out *MetadataSecrets, } out = &MetadataSecrets{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Secrets, err = sliceMapErr(v.Secrets, RefFromProto); err != nil { + out.Secrets, err = sliceMapR(v.Secrets, func(v *destpb.Ref) result[*Ref] { return toResult(RefFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Secrets: %w", err) } return out, nil @@ -1401,18 +1608,22 @@ func MetadataSubscriberFromProto(v *destpb.MetadataSubscriber) (out *MetadataSub } out = &MetadataSubscriber{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Topic, err = RefFromProto(v.Topic); err != nil { + out.Topic, err = toResult(RefFromProto(v.Topic)).result() + if err != nil { return nil, fmt.Errorf("Topic: %w", err) } - if out.FromOffset, err = FromOffsetFromProto(v.FromOffset); err != nil { + out.FromOffset, err = orZeroR(ptrR(toResult(FromOffsetFromProto(v.FromOffset)))).result() + if err != nil { return nil, fmt.Errorf("FromOffset: %w", err) } - out.DeadLetter = bool(v.DeadLetter) + out.DeadLetter, err = orZeroR(toResult(ptr(bool(v.DeadLetter)), nil)).result() + if err != nil { + return nil, fmt.Errorf("DeadLetter: %w", err) + } return out, nil } @@ -1433,13 +1644,18 @@ func MetadataTypeMapFromProto(v *destpb.MetadataTypeMap) (out *MetadataTypeMap, } out = &MetadataTypeMap{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Runtime = string(v.Runtime) - out.NativeName = string(v.NativeName) + out.Runtime, err = orZeroR(toResult(ptr(string(v.Runtime)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Runtime: %w", err) + } + out.NativeName, err = orZeroR(toResult(ptr(string(v.NativeName)), nil)).result() + if err != nil { + return nil, fmt.Errorf("NativeName: %w", err) + } return out, nil } @@ -1452,8 +1668,8 @@ func (x *Module) ToProto() *destpb.Module { Comments: sliceMap(x.Comments, func(v string) string { return string(v) }), Builtin: bool(x.Builtin), Name: string(x.Name), - Metadata: sliceMap(x.Metadata, MetadataToProto), - Decls: sliceMap(x.Decls, DeclToProto), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), + Decls: sliceMap(x.Decls, func(v Decl) *destpb.Decl { return DeclToProto(v) }), Runtime: x.Runtime.ToProto(), } } @@ -1464,21 +1680,32 @@ func ModuleFromProto(v *destpb.Module) (out *Module, err error) { } out = &Module{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Builtin = bool(v.Builtin) - out.Name = string(v.Name) - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Builtin, err = orZeroR(toResult(ptr(bool(v.Builtin)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Builtin: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } - if out.Decls, err = sliceMapErr(v.Decls, DeclFromProto); err != nil { + out.Decls, err = sliceMapR(v.Decls, func(v *destpb.Decl) result[Decl] { return orZeroR(ptrR(toResult(DeclFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Decls: %w", err) } - if out.Runtime, err = ModuleRuntimeFromProto(v.Runtime); err != nil { + out.Runtime, err = toResult(ModuleRuntimeFromProto(v.Runtime)).result() + if err != nil { return nil, fmt.Errorf("Runtime: %w", err) } if err := out.Validate(); err != nil { @@ -1504,15 +1731,16 @@ func ModuleRuntimeFromProto(v *destpb.ModuleRuntime) (out *ModuleRuntime, err er } out = &ModuleRuntime{} - if fieldBase, err := ModuleRuntimeBaseFromProto(v.Base); err != nil { + out.Base, err = orZeroR(toResult(ModuleRuntimeBaseFromProto(v.Base))).result() + if err != nil { return nil, fmt.Errorf("Base: %w", err) - } else { - out.Base = fromPtr(fieldBase) } - if out.Scaling, err = ModuleRuntimeScalingFromProto(v.Scaling); err != nil { + out.Scaling, err = toResult(ModuleRuntimeScalingFromProto(v.Scaling)).result() + if err != nil { return nil, fmt.Errorf("Scaling: %w", err) } - if out.Deployment, err = ModuleRuntimeDeploymentFromProto(v.Deployment); err != nil { + out.Deployment, err = toResult(ModuleRuntimeDeploymentFromProto(v.Deployment)).result() + if err != nil { return nil, fmt.Errorf("Deployment: %w", err) } return out, nil @@ -1525,9 +1753,9 @@ func (x *ModuleRuntimeBase) ToProto() *destpb.ModuleRuntimeBase { return &destpb.ModuleRuntimeBase{ CreateTime: timestamppb.New(x.CreateTime), Language: string(x.Language), - Os: proto.String(string(x.OS)), - Arch: proto.String(string(x.Arch)), - Image: proto.String(string(x.Image)), + Os: ptr(string(x.OS)), + Arch: ptr(string(x.Arch)), + Image: ptr(string(x.Image)), } } @@ -1537,11 +1765,26 @@ func ModuleRuntimeBaseFromProto(v *destpb.ModuleRuntimeBase) (out *ModuleRuntime } out = &ModuleRuntimeBase{} - out.CreateTime = v.CreateTime.AsTime() - out.Language = string(v.Language) - out.OS = string(orZero(v.Os)) - out.Arch = string(orZero(v.Arch)) - out.Image = string(orZero(v.Image)) + out.CreateTime, err = orZeroR(toResult(setNil(ptr(v.CreateTime.AsTime()), v.CreateTime), nil)).result() + if err != nil { + return nil, fmt.Errorf("CreateTime: %w", err) + } + out.Language, err = orZeroR(toResult(ptr(string(v.Language)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Language: %w", err) + } + out.OS, err = orZeroR(toResult(setNil(ptr(string(orZero(v.Os))), v.Os), nil)).result() + if err != nil { + return nil, fmt.Errorf("OS: %w", err) + } + out.Arch, err = orZeroR(toResult(setNil(ptr(string(orZero(v.Arch))), v.Arch), nil)).result() + if err != nil { + return nil, fmt.Errorf("Arch: %w", err) + } + out.Image, err = orZeroR(toResult(setNil(ptr(string(orZero(v.Image))), v.Image), nil)).result() + if err != nil { + return nil, fmt.Errorf("Image: %w", err) + } return out, nil } @@ -1563,12 +1806,22 @@ func ModuleRuntimeDeploymentFromProto(v *destpb.ModuleRuntimeDeployment) (out *M } out = &ModuleRuntimeDeployment{} - out.Endpoint = string(v.Endpoint) - if err = out.DeploymentKey.UnmarshalText([]byte(v.DeploymentKey)); err != nil { + out.Endpoint, err = orZeroR(toResult(ptr(string(v.Endpoint)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Endpoint: %w", err) + } + out.DeploymentKey, err = orZeroR(toResult(unmarshallText([]byte(v.DeploymentKey), &out.DeploymentKey))).result() + if err != nil { return nil, fmt.Errorf("DeploymentKey: %w", err) } - out.CreatedAt = v.CreatedAt.AsTime() - out.ActivatedAt = v.ActivatedAt.AsTime() + out.CreatedAt, err = orZeroR(toResult(setNil(ptr(v.CreatedAt.AsTime()), v.CreatedAt), nil)).result() + if err != nil { + return nil, fmt.Errorf("CreatedAt: %w", err) + } + out.ActivatedAt, err = orZeroR(toResult(setNil(ptr(v.ActivatedAt.AsTime()), v.ActivatedAt), nil)).result() + if err != nil { + return nil, fmt.Errorf("ActivatedAt: %w", err) + } return out, nil } @@ -1625,7 +1878,10 @@ func ModuleRuntimeScalingFromProto(v *destpb.ModuleRuntimeScaling) (out *ModuleR } out = &ModuleRuntimeScaling{} - out.MinReplicas = int32(v.MinReplicas) + out.MinReplicas, err = orZeroR(toResult(ptr(int32(v.MinReplicas)), nil)).result() + if err != nil { + return nil, fmt.Errorf("MinReplicas: %w", err) + } return out, nil } @@ -1645,12 +1901,12 @@ func OptionalFromProto(v *destpb.Optional) (out *Optional, err error) { } out = &Optional{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Type, err = TypeFromProto(v.Type); err != nil { + out.Type, err = orZeroR(ptrR(toResult(TypeFromProto(v.Type)))).result() + if err != nil { return nil, fmt.Errorf("Type: %w", err) } return out, nil @@ -1673,9 +1929,18 @@ func PositionFromProto(v *destpb.Position) (out *Position, err error) { } out = &Position{} - out.Filename = string(v.Filename) - out.Line = int(v.Line) - out.Column = int(v.Column) + out.Filename, err = orZeroR(toResult(ptr(string(v.Filename)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Filename: %w", err) + } + out.Line, err = orZeroR(toResult(ptr(int(v.Line)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Line: %w", err) + } + out.Column, err = orZeroR(toResult(ptr(int(v.Column)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Column: %w", err) + } return out, nil } @@ -1687,7 +1952,7 @@ func (x *Ref) ToProto() *destpb.Ref { Pos: x.Pos.ToProto(), Module: string(x.Module), Name: string(x.Name), - TypeParameters: sliceMap(x.TypeParameters, TypeToProto), + TypeParameters: sliceMap(x.TypeParameters, func(v Type) *destpb.Type { return TypeToProto(v) }), } } @@ -1697,14 +1962,20 @@ func RefFromProto(v *destpb.Ref) (out *Ref, err error) { } out = &Ref{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Module = string(v.Module) - out.Name = string(v.Name) - if out.TypeParameters, err = sliceMapErr(v.TypeParameters, TypeFromProto); err != nil { + out.Module, err = orZeroR(toResult(ptr(string(v.Module)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Module: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.TypeParameters, err = sliceMapR(v.TypeParameters, func(v *destpb.Type) result[Type] { return orZeroR(ptrR(toResult(TypeFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("TypeParameters: %w", err) } return out, nil @@ -1772,7 +2043,7 @@ func (x *Schema) ToProto() *destpb.Schema { } return &destpb.Schema{ Pos: x.Pos.ToProto(), - Modules: protoSlice[*destpb.Module](x.Modules), + Modules: sliceMap(x.Modules, func(v *Module) *destpb.Module { return v.ToProto() }), } } @@ -1782,12 +2053,12 @@ func SchemaFromProto(v *destpb.Schema) (out *Schema, err error) { } out = &Schema{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Modules, err = sliceMapErr(v.Modules, ModuleFromProto); err != nil { + out.Modules, err = sliceMapR(v.Modules, func(v *destpb.Module) result[*Module] { return toResult(ModuleFromProto(v)) }).result() + if err != nil { return nil, fmt.Errorf("Modules: %w", err) } return out, nil @@ -1811,14 +2082,20 @@ func SecretFromProto(v *destpb.Secret) (out *Secret, err error) { } out = &Secret{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Name = string(v.Name) - if out.Type, err = TypeFromProto(v.Type); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Type, err = orZeroR(ptrR(toResult(TypeFromProto(v.Type)))).result() + if err != nil { return nil, fmt.Errorf("Type: %w", err) } return out, nil @@ -1839,10 +2116,9 @@ func StringFromProto(v *destpb.String) (out *String, err error) { } out = &String{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -1863,12 +2139,14 @@ func StringValueFromProto(v *destpb.StringValue) (out *StringValue, err error) { } out = &StringValue{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Value = string(v.Value) + out.Value, err = orZeroR(toResult(ptr(string(v.Value)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Value: %w", err) + } return out, nil } @@ -1887,10 +2165,9 @@ func TimeFromProto(v *destpb.Time) (out *Time, err error) { } out = &Time{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -1906,7 +2183,7 @@ func (x *Topic) ToProto() *destpb.Topic { Export: bool(x.Export), Name: string(x.Name), Event: TypeToProto(x.Event), - Metadata: sliceMap(x.Metadata, MetadataToProto), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), } } @@ -1916,21 +2193,32 @@ func TopicFromProto(v *destpb.Topic) (out *Topic, err error) { } out = &Topic{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Runtime, err = TopicRuntimeFromProto(v.Runtime); err != nil { + out.Runtime, err = toResult(TopicRuntimeFromProto(v.Runtime)).result() + if err != nil { return nil, fmt.Errorf("Runtime: %w", err) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Export = bool(v.Export) - out.Name = string(v.Name) - if out.Event, err = TypeFromProto(v.Event); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Export, err = orZeroR(toResult(ptr(bool(v.Export)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Export: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Event, err = orZeroR(ptrR(toResult(TypeFromProto(v.Event)))).result() + if err != nil { return nil, fmt.Errorf("Event: %w", err) } - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } return out, nil @@ -1952,8 +2240,14 @@ func TopicRuntimeFromProto(v *destpb.TopicRuntime) (out *TopicRuntime, err error } out = &TopicRuntime{} - out.KafkaBrokers = sliceMap(v.KafkaBrokers, func(v string) string { return string(v) }) - out.TopicID = string(v.TopicId) + out.KafkaBrokers, err = sliceMapR(v.KafkaBrokers, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("KafkaBrokers: %w", err) + } + out.TopicID, err = orZeroR(toResult(ptr(string(v.TopicId)), nil)).result() + if err != nil { + return nil, fmt.Errorf("TopicID: %w", err) + } return out, nil } @@ -1973,8 +2267,12 @@ func TopicRuntimeEventFromProto(v *destpb.TopicRuntimeEvent) (out *TopicRuntimeE } out = &TopicRuntimeEvent{} - out.ID = string(v.Id) - if out.Payload, err = TopicRuntimeFromProto(v.Payload); err != nil { + out.ID, err = orZeroR(toResult(ptr(string(v.Id)), nil)).result() + if err != nil { + return nil, fmt.Errorf("ID: %w", err) + } + out.Payload, err = toResult(TopicRuntimeFromProto(v.Payload)).result() + if err != nil { return nil, fmt.Errorf("Payload: %w", err) } return out, nil @@ -2082,7 +2380,7 @@ func (x *TypeAlias) ToProto() *destpb.TypeAlias { Export: bool(x.Export), Name: string(x.Name), Type: TypeToProto(x.Type), - Metadata: sliceMap(x.Metadata, MetadataToProto), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), } } @@ -2092,18 +2390,28 @@ func TypeAliasFromProto(v *destpb.TypeAlias) (out *TypeAlias, err error) { } out = &TypeAlias{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Export = bool(v.Export) - out.Name = string(v.Name) - if out.Type, err = TypeFromProto(v.Type); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Export, err = orZeroR(toResult(ptr(bool(v.Export)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Export: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Type, err = orZeroR(ptrR(toResult(TypeFromProto(v.Type)))).result() + if err != nil { return nil, fmt.Errorf("Type: %w", err) } - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } return out, nil @@ -2125,12 +2433,14 @@ func TypeParameterFromProto(v *destpb.TypeParameter) (out *TypeParameter, err er } out = &TypeParameter{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Name = string(v.Name) + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } return out, nil } @@ -2150,12 +2460,12 @@ func TypeValueFromProto(v *destpb.TypeValue) (out *TypeValue, err error) { } out = &TypeValue{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - if out.Value, err = TypeFromProto(v.Value); err != nil { + out.Value, err = orZeroR(ptrR(toResult(TypeFromProto(v.Value)))).result() + if err != nil { return nil, fmt.Errorf("Value: %w", err) } return out, nil @@ -2176,10 +2486,9 @@ func UnitFromProto(v *destpb.Unit) (out *Unit, err error) { } out = &Unit{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } return out, nil } @@ -2233,7 +2542,7 @@ func (x *Verb) ToProto() *destpb.Verb { Name: string(x.Name), Request: TypeToProto(x.Request), Response: TypeToProto(x.Response), - Metadata: sliceMap(x.Metadata, MetadataToProto), + Metadata: sliceMap(x.Metadata, func(v Metadata) *destpb.Metadata { return MetadataToProto(v) }), Runtime: x.Runtime.ToProto(), } } @@ -2244,24 +2553,36 @@ func VerbFromProto(v *destpb.Verb) (out *Verb, err error) { } out = &Verb{} - if fieldPos, err := PositionFromProto(v.Pos); err != nil { + out.Pos, err = orZeroR(toResult(PositionFromProto(v.Pos))).result() + if err != nil { return nil, fmt.Errorf("Pos: %w", err) - } else { - out.Pos = fromPtr(fieldPos) } - out.Comments = sliceMap(v.Comments, func(v string) string { return string(v) }) - out.Export = bool(v.Export) - out.Name = string(v.Name) - if out.Request, err = TypeFromProto(v.Request); err != nil { + out.Comments, err = sliceMapR(v.Comments, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("Comments: %w", err) + } + out.Export, err = orZeroR(toResult(ptr(bool(v.Export)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Export: %w", err) + } + out.Name, err = orZeroR(toResult(ptr(string(v.Name)), nil)).result() + if err != nil { + return nil, fmt.Errorf("Name: %w", err) + } + out.Request, err = orZeroR(ptrR(toResult(TypeFromProto(v.Request)))).result() + if err != nil { return nil, fmt.Errorf("Request: %w", err) } - if out.Response, err = TypeFromProto(v.Response); err != nil { + out.Response, err = orZeroR(ptrR(toResult(TypeFromProto(v.Response)))).result() + if err != nil { return nil, fmt.Errorf("Response: %w", err) } - if out.Metadata, err = sliceMapErr(v.Metadata, MetadataFromProto); err != nil { + out.Metadata, err = sliceMapR(v.Metadata, func(v *destpb.Metadata) result[Metadata] { return orZeroR(ptrR(toResult(MetadataFromProto(v)))) }).result() + if err != nil { return nil, fmt.Errorf("Metadata: %w", err) } - if out.Runtime, err = VerbRuntimeFromProto(v.Runtime); err != nil { + out.Runtime, err = toResult(VerbRuntimeFromProto(v.Runtime)).result() + if err != nil { return nil, fmt.Errorf("Runtime: %w", err) } return out, nil @@ -2283,12 +2604,12 @@ func VerbRuntimeFromProto(v *destpb.VerbRuntime) (out *VerbRuntime, err error) { } out = &VerbRuntime{} - if fieldBase, err := VerbRuntimeBaseFromProto(v.Base); err != nil { + out.Base, err = orZeroR(toResult(VerbRuntimeBaseFromProto(v.Base))).result() + if err != nil { return nil, fmt.Errorf("Base: %w", err) - } else { - out.Base = fromPtr(fieldBase) } - if out.Subscription, err = VerbRuntimeSubscriptionFromProto(v.Subscription); err != nil { + out.Subscription, err = toResult(VerbRuntimeSubscriptionFromProto(v.Subscription)).result() + if err != nil { return nil, fmt.Errorf("Subscription: %w", err) } return out, nil @@ -2310,8 +2631,14 @@ func VerbRuntimeBaseFromProto(v *destpb.VerbRuntimeBase) (out *VerbRuntimeBase, } out = &VerbRuntimeBase{} - out.CreateTime = v.CreateTime.AsTime() - out.StartTime = v.StartTime.AsTime() + out.CreateTime, err = orZeroR(toResult(setNil(ptr(v.CreateTime.AsTime()), v.CreateTime), nil)).result() + if err != nil { + return nil, fmt.Errorf("CreateTime: %w", err) + } + out.StartTime, err = orZeroR(toResult(setNil(ptr(v.StartTime.AsTime()), v.StartTime), nil)).result() + if err != nil { + return nil, fmt.Errorf("StartTime: %w", err) + } return out, nil } @@ -2331,8 +2658,12 @@ func VerbRuntimeEventFromProto(v *destpb.VerbRuntimeEvent) (out *VerbRuntimeEven } out = &VerbRuntimeEvent{} - out.ID = string(v.Id) - if out.Payload, err = VerbRuntimePayloadFromProto(v.Payload); err != nil { + out.ID, err = orZeroR(toResult(ptr(string(v.Id)), nil)).result() + if err != nil { + return nil, fmt.Errorf("ID: %w", err) + } + out.Payload, err = orZeroR(ptrR(toResult(VerbRuntimePayloadFromProto(v.Payload)))).result() + if err != nil { return nil, fmt.Errorf("Payload: %w", err) } return out, nil @@ -2385,6 +2716,9 @@ func VerbRuntimeSubscriptionFromProto(v *destpb.VerbRuntimeSubscription) (out *V } out = &VerbRuntimeSubscription{} - out.KafkaBrokers = sliceMap(v.KafkaBrokers, func(v string) string { return string(v) }) + out.KafkaBrokers, err = sliceMapR(v.KafkaBrokers, func(v string) result[string] { return orZeroR(toResult(ptr(string(v)), nil)) }).result() + if err != nil { + return nil, fmt.Errorf("KafkaBrokers: %w", err) + } return out, nil } diff --git a/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts b/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts index 8191d0d75..a0c5d72f0 100644 --- a/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/schema/v1/schema_pb.ts @@ -1376,12 +1376,6 @@ export class Metadata extends Message { */ value: MetadataCronJob; case: "cronJob"; - } | { - /** - * @generated from field: xyz.block.ftl.schema.v1.MetadataDBColumn db_column = 17; - */ - value: MetadataDBColumn; - case: "dbColumn"; } | { /** * @generated from field: xyz.block.ftl.schema.v1.MetadataDatabases databases = 4; @@ -1418,6 +1412,12 @@ export class Metadata extends Message { */ value: MetadataRetry; case: "retry"; + } | { + /** + * @generated from field: xyz.block.ftl.schema.v1.MetadataSQLColumn sql_column = 17; + */ + value: MetadataSQLColumn; + case: "sqlColumn"; } | { /** * @generated from field: xyz.block.ftl.schema.v1.MetadataSQLMigration sql_migration = 13; @@ -1463,13 +1463,13 @@ export class Metadata extends Message { { no: 1, name: "calls", kind: "message", T: MetadataCalls, oneof: "value" }, { no: 10, name: "config", kind: "message", T: MetadataConfig, oneof: "value" }, { no: 3, name: "cron_job", kind: "message", T: MetadataCronJob, oneof: "value" }, - { no: 17, name: "db_column", kind: "message", T: MetadataDBColumn, oneof: "value" }, { no: 4, name: "databases", kind: "message", T: MetadataDatabases, oneof: "value" }, { no: 9, name: "encoding", kind: "message", T: MetadataEncoding, oneof: "value" }, { no: 2, name: "ingress", kind: "message", T: MetadataIngress, oneof: "value" }, { no: 15, name: "partitions", kind: "message", T: MetadataPartitions, oneof: "value" }, { no: 12, name: "publisher", kind: "message", T: MetadataPublisher, oneof: "value" }, { no: 6, name: "retry", kind: "message", T: MetadataRetry, oneof: "value" }, + { no: 17, name: "sql_column", kind: "message", T: MetadataSQLColumn, oneof: "value" }, { no: 13, name: "sql_migration", kind: "message", T: MetadataSQLMigration, oneof: "value" }, { no: 16, name: "sql_query", kind: "message", T: MetadataSQLQuery, oneof: "value" }, { no: 11, name: "secrets", kind: "message", T: MetadataSecrets, oneof: "value" }, @@ -1731,57 +1731,6 @@ export class MetadataCronJob extends Message { } } -/** - * MetadataDBColumn designates a database column. - * - * @generated from message xyz.block.ftl.schema.v1.MetadataDBColumn - */ -export class MetadataDBColumn extends Message { - /** - * @generated from field: optional xyz.block.ftl.schema.v1.Position pos = 1; - */ - pos?: Position; - - /** - * @generated from field: string table = 2; - */ - table = ""; - - /** - * @generated from field: string name = 3; - */ - name = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.schema.v1.MetadataDBColumn"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "pos", kind: "message", T: Position, opt: true }, - { no: 2, name: "table", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): MetadataDBColumn { - return new MetadataDBColumn().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): MetadataDBColumn { - return new MetadataDBColumn().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): MetadataDBColumn { - return new MetadataDBColumn().fromJsonString(jsonString, options); - } - - static equals(a: MetadataDBColumn | PlainMessage | undefined, b: MetadataDBColumn | PlainMessage | undefined): boolean { - return proto3.util.equals(MetadataDBColumn, a, b); - } -} - /** * @generated from message xyz.block.ftl.schema.v1.MetadataDatabases */ @@ -2076,6 +2025,57 @@ export class MetadataRetry extends Message { } } +/** + * MetadataSQLColumn designates a database column. + * + * @generated from message xyz.block.ftl.schema.v1.MetadataSQLColumn + */ +export class MetadataSQLColumn extends Message { + /** + * @generated from field: optional xyz.block.ftl.schema.v1.Position pos = 1; + */ + pos?: Position; + + /** + * @generated from field: string table = 2; + */ + table = ""; + + /** + * @generated from field: string name = 3; + */ + name = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.schema.v1.MetadataSQLColumn"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "pos", kind: "message", T: Position, opt: true }, + { no: 2, name: "table", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): MetadataSQLColumn { + return new MetadataSQLColumn().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): MetadataSQLColumn { + return new MetadataSQLColumn().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): MetadataSQLColumn { + return new MetadataSQLColumn().fromJsonString(jsonString, options); + } + + static equals(a: MetadataSQLColumn | PlainMessage | undefined, b: MetadataSQLColumn | PlainMessage | undefined): boolean { + return proto3.util.equals(MetadataSQLColumn, a, b); + } +} + /** * @generated from message xyz.block.ftl.schema.v1.MetadataSQLMigration */ diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py index 30acdbf88..97a23cf59 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.py @@ -25,7 +25,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$xyz/block/ftl/schema/v1/schema.proto\x12\x17xyz.block.ftl.schema.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb3\x01\n\x1b\x41WSIAMAuthDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08username\x18\x02 \x01(\tR\x08username\x12\x1a\n\x08\x65ndpoint\x18\x03 \x01(\tR\x08\x65ndpoint\x12\x1a\n\x08\x64\x61tabase\x18\x04 \x01(\tR\x08\x64\x61tabaseB\x06\n\x04_pos\"G\n\x03\x41ny\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\x82\x01\n\x05\x41rray\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x37\n\x07\x65lement\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07\x65lementB\x06\n\x04_pos\"H\n\x04\x42ool\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"I\n\x05\x42ytes\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xad\x01\n\x06\x43onfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"j\n\x14\x44SNDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x10\n\x03\x64sn\x18\x02 \x01(\tR\x03\x64snB\x06\n\x04_pos\"\xd8\x02\n\x04\x44\x61ta\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12O\n\x0ftype_parameters\x18\x05 \x03(\x0b\x32&.xyz.block.ftl.schema.v1.TypeParameterR\x0etypeParameters\x12\x36\n\x06\x66ields\x18\x06 \x03(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FieldR\x06\x66ields\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"\xa6\x02\n\x08\x44\x61tabase\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12I\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.DatabaseRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"\x80\x02\n\x11\x44\x61tabaseConnector\x12{\n\x1e\x61wsiam_auth_database_connector\x18\x02 \x01(\x0b\x32\x34.xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnectorH\x00R\x1b\x61wsiamAuthDatabaseConnector\x12\x65\n\x16\x64sn_database_connector\x18\x01 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DSNDatabaseConnectorH\x00R\x14\x64snDatabaseConnectorB\x07\n\x05value\"}\n\x0f\x44\x61tabaseRuntime\x12Z\n\x0b\x63onnections\x18\x01 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsH\x00R\x0b\x63onnections\x88\x01\x01\x42\x0e\n\x0c_connections\"\x9e\x01\n\x1a\x44\x61tabaseRuntimeConnections\x12>\n\x04read\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x04read\x12@\n\x05write\x18\x02 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x05write\"x\n\x1f\x44\x61tabaseRuntimeConnectionsEvent\x12U\n\x0b\x63onnections\x18\x01 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsR\x0b\x63onnections\"v\n\x14\x44\x61tabaseRuntimeEvent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12N\n\x07payload\x18\x02 \x01(\x0b\x32\x34.xyz.block.ftl.schema.v1.DatabaseRuntimeEventPayloadR\x07payload\"\xb0\x01\n\x1b\x44\x61tabaseRuntimeEventPayload\x12\x87\x01\n\"database_runtime_connections_event\x18\x01 \x01(\x0b\x32\x38.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsEventH\x00R\x1f\x64\x61tabaseRuntimeConnectionsEventB\x07\n\x05value\"\xe2\x03\n\x04\x44\x65\x63l\x12\x39\n\x06\x63onfig\x18\x06 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ConfigH\x00R\x06\x63onfig\x12\x33\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DataH\x00R\x04\x64\x61ta\x12?\n\x08\x64\x61tabase\x18\x03 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.DatabaseH\x00R\x08\x64\x61tabase\x12\x33\n\x04\x65num\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.EnumH\x00R\x04\x65num\x12\x39\n\x06secret\x18\x07 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SecretH\x00R\x06secret\x12\x36\n\x05topic\x18\t \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.TopicH\x00R\x05topic\x12\x43\n\ntype_alias\x18\x05 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeAliasH\x00R\ttypeAlias\x12\x33\n\x04verb\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.VerbH\x00R\x04verbB\x07\n\x05value\"\x93\x02\n\x04\x45num\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x36\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x12@\n\x08variants\x18\x06 \x03(\x0b\x32$.xyz.block.ftl.schema.v1.EnumVariantR\x08variantsB\x06\n\x04_posB\x07\n\x05_type\"\xb5\x01\n\x0b\x45numVariant\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x34\n\x05value\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ValueR\x05valueB\x06\n\x04_pos\"\xeb\x01\n\x05\x46ield\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x03 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"I\n\x05\x46loat\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe7\x01\n\x14IngressPathComponent\x12_\n\x14ingress_path_literal\x18\x01 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.IngressPathLiteralH\x00R\x12ingressPathLiteral\x12\x65\n\x16ingress_path_parameter\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathParameterH\x00R\x14ingressPathParameterB\x07\n\x05value\"j\n\x12IngressPathLiteral\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04text\x18\x02 \x01(\tR\x04textB\x06\n\x04_pos\"l\n\x14IngressPathParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"G\n\x03Int\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"b\n\x08IntValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\x03R\x05valueB\x06\n\x04_pos\"\xad\x01\n\x03Map\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12/\n\x03key\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x03key\x12\x33\n\x05value\x18\x03 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"\xe2\t\n\x08Metadata\x12>\n\x05\x61lias\x18\x05 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataAliasH\x00R\x05\x61lias\x12G\n\x08\x61rtefact\x18\x0e \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataArtefactH\x00R\x08\x61rtefact\x12>\n\x05\x63\x61lls\x18\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataCallsH\x00R\x05\x63\x61lls\x12\x41\n\x06\x63onfig\x18\n \x01(\x0b\x32\'.xyz.block.ftl.schema.v1.MetadataConfigH\x00R\x06\x63onfig\x12\x45\n\x08\x63ron_job\x18\x03 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataCronJobH\x00R\x07\x63ronJob\x12H\n\tdb_column\x18\x11 \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataDBColumnH\x00R\x08\x64\x62\x43olumn\x12J\n\tdatabases\x18\x04 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataDatabasesH\x00R\tdatabases\x12G\n\x08\x65ncoding\x18\t \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataEncodingH\x00R\x08\x65ncoding\x12\x44\n\x07ingress\x18\x02 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataIngressH\x00R\x07ingress\x12M\n\npartitions\x18\x0f \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataPartitionsH\x00R\npartitions\x12J\n\tpublisher\x18\x0c \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataPublisherH\x00R\tpublisher\x12>\n\x05retry\x18\x06 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataRetryH\x00R\x05retry\x12T\n\rsql_migration\x18\r \x01(\x0b\x32-.xyz.block.ftl.schema.v1.MetadataSQLMigrationH\x00R\x0csqlMigration\x12H\n\tsql_query\x18\x10 \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataSQLQueryH\x00R\x08sqlQuery\x12\x44\n\x07secrets\x18\x0b \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataSecretsH\x00R\x07secrets\x12M\n\nsubscriber\x18\x07 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataSubscriberH\x00R\nsubscriber\x12\x45\n\x08type_map\x18\x08 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataTypeMapH\x00R\x07typeMapB\x07\n\x05value\"\x9f\x01\n\rMetadataAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04kind\x18\x02 \x01(\x0e\x32\".xyz.block.ftl.schema.v1.AliasKindR\x04kind\x12\x14\n\x05\x61lias\x18\x03 \x01(\tR\x05\x61liasB\x06\n\x04_pos\"\xa0\x01\n\x10MetadataArtefact\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x16\n\x06\x64igest\x18\x03 \x01(\tR\x06\x64igest\x12\x1e\n\nexecutable\x18\x04 \x01(\x08R\nexecutableB\x06\n\x04_pos\"\x85\x01\n\rMetadataCalls\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x88\x01\n\x0eMetadataConfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06\x63onfig\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06\x63onfigB\x06\n\x04_pos\"g\n\x0fMetadataCronJob\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04\x63ron\x18\x02 \x01(\tR\x04\x63ronB\x06\n\x04_pos\"~\n\x10MetadataDBColumn\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x12\n\x04name\x18\x03 \x01(\tR\x04nameB\x06\n\x04_pos\"\x89\x01\n\x11MetadataDatabases\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x82\x01\n\x10MetadataEncoding\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x18\n\x07lenient\x18\x03 \x01(\x08R\x07lenientB\x06\n\x04_pos\"\xc2\x01\n\x0fMetadataIngress\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x16\n\x06method\x18\x03 \x01(\tR\x06method\x12\x41\n\x04path\x18\x04 \x03(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathComponentR\x04pathB\x06\n\x04_pos\"v\n\x12MetadataPartitions\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1e\n\npartitions\x18\x02 \x01(\x03R\npartitionsB\x06\n\x04_pos\"\x8b\x01\n\x11MetadataPublisher\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06topics\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06topicsB\x06\n\x04_pos\"\xfb\x01\n\rMetadataRetry\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x03H\x01R\x05\x63ount\x88\x01\x01\x12\x1f\n\x0bmin_backoff\x18\x03 \x01(\tR\nminBackoff\x12\x1f\n\x0bmax_backoff\x18\x04 \x01(\tR\nmaxBackoff\x12\x37\n\x05\x63\x61tch\x18\x05 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x02R\x05\x63\x61tch\x88\x01\x01\x42\x06\n\x04_posB\x08\n\x06_countB\x08\n\x06_catch\"p\n\x14MetadataSQLMigration\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06\x64igest\x18\x02 \x01(\tR\x06\x64igestB\x06\n\x04_pos\"\x84\x01\n\x10MetadataSQLQuery\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07\x63ommand\x18\x02 \x01(\tR\x07\x63ommand\x12\x14\n\x05query\x18\x03 \x01(\tR\x05queryB\x06\n\x04_pos\"\x8b\x01\n\x0fMetadataSecrets\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x07secrets\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x07secretsB\x06\n\x04_pos\"\xf1\x01\n\x12MetadataSubscriber\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05topic\x12\x44\n\x0b\x66rom_offset\x18\x03 \x01(\x0e\x32#.xyz.block.ftl.schema.v1.FromOffsetR\nfromOffset\x12\x1f\n\x0b\x64\x65\x61\x64_letter\x18\x04 \x01(\x08R\ndeadLetterB\x06\n\x04_pos\"\x8e\x01\n\x0fMetadataTypeMap\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07runtime\x18\x02 \x01(\tR\x07runtime\x12\x1f\n\x0bnative_name\x18\x03 \x01(\tR\nnativeNameB\x06\n\x04_pos\"\xcc\x02\n\x06Module\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x18\n\x07\x62uiltin\x18\x03 \x01(\x08R\x07\x62uiltin\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x33\n\x05\x64\x65\x63ls\x18\x05 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DeclR\x05\x64\x65\x63ls\x12\x42\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.ModuleRuntimeR\x07runtimeB\x06\n\x04_pos\"\x8f\x02\n\rModuleRuntime\x12>\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseR\x04\x62\x61se\x12L\n\x07scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x07scaling\x88\x01\x01\x12U\n\ndeployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x01R\ndeployment\x88\x01\x01\x42\n\n\x08_scalingB\r\n\x0b_deployment\"\xcf\x01\n\x11ModuleRuntimeBase\x12;\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12\x1a\n\x08language\x18\x02 \x01(\tR\x08language\x12\x13\n\x02os\x18\x03 \x01(\tH\x00R\x02os\x88\x01\x01\x12\x17\n\x04\x61rch\x18\x04 \x01(\tH\x01R\x04\x61rch\x88\x01\x01\x12\x19\n\x05image\x18\x05 \x01(\tH\x02R\x05image\x88\x01\x01\x42\x05\n\x03_osB\x07\n\x05_archB\x08\n\x06_image\"\xd6\x01\n\x17ModuleRuntimeDeployment\x12\x1a\n\x08\x65ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12%\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tR\rdeploymentKey\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12=\n\x0c\x61\x63tivated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0b\x61\x63tivatedAt\"\xd2\x02\n\x12ModuleRuntimeEvent\x12\\\n\x13module_runtime_base\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseH\x00R\x11moduleRuntimeBase\x12n\n\x19module_runtime_deployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x00R\x17moduleRuntimeDeployment\x12\x65\n\x16module_runtime_scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x14moduleRuntimeScalingB\x07\n\x05value\"9\n\x14ModuleRuntimeScaling\x12!\n\x0cmin_replicas\x18\x01 \x01(\x05R\x0bminReplicas\"\x8d\x01\n\x08Optional\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04type\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x42\x06\n\x04_posB\x07\n\x05_type\"R\n\x08Position\x12\x1a\n\x08\x66ilename\x18\x01 \x01(\tR\x08\x66ilename\x12\x12\n\x04line\x18\x02 \x01(\x03R\x04line\x12\x16\n\x06\x63olumn\x18\x03 \x01(\x03R\x06\x63olumn\"\xbb\x01\n\x03Ref\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06module\x18\x03 \x01(\tR\x06module\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x46\n\x0ftype_parameters\x18\x04 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x0etypeParametersB\x06\n\x04_pos\"\xec\x04\n\x0cRuntimeEvent\x12\x65\n\x16\x64\x61tabase_runtime_event\x18\x05 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DatabaseRuntimeEventH\x00R\x14\x64\x61tabaseRuntimeEvent\x12\\\n\x13module_runtime_base\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseH\x00R\x11moduleRuntimeBase\x12n\n\x19module_runtime_deployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x00R\x17moduleRuntimeDeployment\x12\x65\n\x16module_runtime_scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x14moduleRuntimeScaling\x12\\\n\x13topic_runtime_event\x18\x06 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.TopicRuntimeEventH\x00R\x11topicRuntimeEvent\x12Y\n\x12verb_runtime_event\x18\x04 \x01(\x0b\x32).xyz.block.ftl.schema.v1.VerbRuntimeEventH\x00R\x10verbRuntimeEventB\x07\n\x05value\"\x85\x01\n\x06Schema\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x39\n\x07modules\x18\x02 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modulesB\x06\n\x04_pos\"\xad\x01\n\x06Secret\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"J\n\x06String\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"e\n\x0bStringValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\tR\x05valueB\x06\n\x04_pos\"H\n\x04Time\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xd9\x02\n\x05Topic\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x46\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x33\n\x05\x65vent\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05\x65vent\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"N\n\x0cTopicRuntime\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers\x12\x19\n\x08topic_id\x18\x02 \x01(\tR\x07topicId\"d\n\x11TopicRuntimeEvent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12?\n\x07payload\x18\x02 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeR\x07payload\"\x9a\x05\n\x04Type\x12\x30\n\x03\x61ny\x18\t \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.AnyH\x00R\x03\x61ny\x12\x36\n\x05\x61rray\x18\x07 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ArrayH\x00R\x05\x61rray\x12\x33\n\x04\x62ool\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.BoolH\x00R\x04\x62ool\x12\x36\n\x05\x62ytes\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.BytesH\x00R\x05\x62ytes\x12\x36\n\x05\x66loat\x18\x02 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FloatH\x00R\x05\x66loat\x12\x30\n\x03int\x18\x01 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.IntH\x00R\x03int\x12\x30\n\x03map\x18\x08 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.MapH\x00R\x03map\x12?\n\x08optional\x18\x0c \x01(\x0b\x32!.xyz.block.ftl.schema.v1.OptionalH\x00R\x08optional\x12\x30\n\x03ref\x18\x0b \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x00R\x03ref\x12\x39\n\x06string\x18\x03 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.StringH\x00R\x06string\x12\x33\n\x04time\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TimeH\x00R\x04time\x12\x33\n\x04unit\x18\n \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.UnitH\x00R\x04unitB\x07\n\x05value\"\x87\x02\n\tTypeAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x31\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"e\n\rTypeParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"\x82\x01\n\tTypeValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"H\n\x04Unit\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe2\x01\n\x05Value\x12@\n\tint_value\x18\x02 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.IntValueH\x00R\x08intValue\x12I\n\x0cstring_value\x18\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.StringValueH\x00R\x0bstringValue\x12\x43\n\ntype_value\x18\x03 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeValueH\x00R\ttypeValueB\x07\n\x05value\"\x96\x03\n\x04Verb\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x37\n\x07request\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07request\x12\x39\n\x08response\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x08response\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x45\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.VerbRuntimeH\x01R\x07runtime\x88\x01\x01\x42\x06\n\x04_posB\n\n\x08_runtime\"\xb7\x01\n\x0bVerbRuntime\x12<\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseR\x04\x62\x61se\x12Y\n\x0csubscription\x18\x02 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x00R\x0csubscription\x88\x01\x01\x42\x0f\n\r_subscription\"\xb2\x01\n\x0fVerbRuntimeBase\x12@\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\ncreateTime\x88\x01\x01\x12>\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tstartTime\x88\x01\x01\x42\x0e\n\x0c_create_timeB\r\n\x0b_start_time\"i\n\x10VerbRuntimeEvent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x45\n\x07payload\x18\x02 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.VerbRuntimePayloadR\x07payload\"\xe5\x01\n\x12VerbRuntimePayload\x12V\n\x11verb_runtime_base\x18\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseH\x00R\x0fverbRuntimeBase\x12n\n\x19verb_runtime_subscription\x18\x02 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x00R\x17verbRuntimeSubscriptionB\x07\n\x05value\">\n\x17VerbRuntimeSubscription\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers*<\n\tAliasKind\x12\x1a\n\x16\x41LIAS_KIND_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x41LIAS_KIND_JSON\x10\x01*\\\n\nFromOffset\x12\x1b\n\x17\x46ROM_OFFSET_UNSPECIFIED\x10\x00\x12\x19\n\x15\x46ROM_OFFSET_BEGINNING\x10\x01\x12\x16\n\x12\x46ROM_OFFSET_LATEST\x10\x02\x42GP\x01ZCgithub.com/block/ftl/common/protos/xyz/block/ftl/schema/v1;schemapbb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$xyz/block/ftl/schema/v1/schema.proto\x12\x17xyz.block.ftl.schema.v1\x1a\x1fgoogle/protobuf/timestamp.proto\"\xb3\x01\n\x1b\x41WSIAMAuthDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08username\x18\x02 \x01(\tR\x08username\x12\x1a\n\x08\x65ndpoint\x18\x03 \x01(\tR\x08\x65ndpoint\x12\x1a\n\x08\x64\x61tabase\x18\x04 \x01(\tR\x08\x64\x61tabaseB\x06\n\x04_pos\"G\n\x03\x41ny\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\x82\x01\n\x05\x41rray\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x37\n\x07\x65lement\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07\x65lementB\x06\n\x04_pos\"H\n\x04\x42ool\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"I\n\x05\x42ytes\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xad\x01\n\x06\x43onfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"j\n\x14\x44SNDatabaseConnector\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x10\n\x03\x64sn\x18\x02 \x01(\tR\x03\x64snB\x06\n\x04_pos\"\xd8\x02\n\x04\x44\x61ta\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12O\n\x0ftype_parameters\x18\x05 \x03(\x0b\x32&.xyz.block.ftl.schema.v1.TypeParameterR\x0etypeParameters\x12\x36\n\x06\x66ields\x18\x06 \x03(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FieldR\x06\x66ields\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"\xa6\x02\n\x08\x44\x61tabase\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12I\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.DatabaseRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04type\x18\x04 \x01(\tR\x04type\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"\x80\x02\n\x11\x44\x61tabaseConnector\x12{\n\x1e\x61wsiam_auth_database_connector\x18\x02 \x01(\x0b\x32\x34.xyz.block.ftl.schema.v1.AWSIAMAuthDatabaseConnectorH\x00R\x1b\x61wsiamAuthDatabaseConnector\x12\x65\n\x16\x64sn_database_connector\x18\x01 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DSNDatabaseConnectorH\x00R\x14\x64snDatabaseConnectorB\x07\n\x05value\"}\n\x0f\x44\x61tabaseRuntime\x12Z\n\x0b\x63onnections\x18\x01 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsH\x00R\x0b\x63onnections\x88\x01\x01\x42\x0e\n\x0c_connections\"\x9e\x01\n\x1a\x44\x61tabaseRuntimeConnections\x12>\n\x04read\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x04read\x12@\n\x05write\x18\x02 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.DatabaseConnectorR\x05write\"x\n\x1f\x44\x61tabaseRuntimeConnectionsEvent\x12U\n\x0b\x63onnections\x18\x01 \x01(\x0b\x32\x33.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsR\x0b\x63onnections\"v\n\x14\x44\x61tabaseRuntimeEvent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12N\n\x07payload\x18\x02 \x01(\x0b\x32\x34.xyz.block.ftl.schema.v1.DatabaseRuntimeEventPayloadR\x07payload\"\xb0\x01\n\x1b\x44\x61tabaseRuntimeEventPayload\x12\x87\x01\n\"database_runtime_connections_event\x18\x01 \x01(\x0b\x32\x38.xyz.block.ftl.schema.v1.DatabaseRuntimeConnectionsEventH\x00R\x1f\x64\x61tabaseRuntimeConnectionsEventB\x07\n\x05value\"\xe2\x03\n\x04\x44\x65\x63l\x12\x39\n\x06\x63onfig\x18\x06 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ConfigH\x00R\x06\x63onfig\x12\x33\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DataH\x00R\x04\x64\x61ta\x12?\n\x08\x64\x61tabase\x18\x03 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.DatabaseH\x00R\x08\x64\x61tabase\x12\x33\n\x04\x65num\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.EnumH\x00R\x04\x65num\x12\x39\n\x06secret\x18\x07 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.SecretH\x00R\x06secret\x12\x36\n\x05topic\x18\t \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.TopicH\x00R\x05topic\x12\x43\n\ntype_alias\x18\x05 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeAliasH\x00R\ttypeAlias\x12\x33\n\x04verb\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.VerbH\x00R\x04verbB\x07\n\x05value\"\x93\x02\n\x04\x45num\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x36\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x12@\n\x08variants\x18\x06 \x03(\x0b\x32$.xyz.block.ftl.schema.v1.EnumVariantR\x08variantsB\x06\n\x04_posB\x07\n\x05_type\"\xb5\x01\n\x0b\x45numVariant\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x34\n\x05value\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ValueR\x05valueB\x06\n\x04_pos\"\xeb\x01\n\x05\x46ield\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x03 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x05 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"I\n\x05\x46loat\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe7\x01\n\x14IngressPathComponent\x12_\n\x14ingress_path_literal\x18\x01 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.IngressPathLiteralH\x00R\x12ingressPathLiteral\x12\x65\n\x16ingress_path_parameter\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathParameterH\x00R\x14ingressPathParameterB\x07\n\x05value\"j\n\x12IngressPathLiteral\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04text\x18\x02 \x01(\tR\x04textB\x06\n\x04_pos\"l\n\x14IngressPathParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"G\n\x03Int\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"b\n\x08IntValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\x03R\x05valueB\x06\n\x04_pos\"\xad\x01\n\x03Map\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12/\n\x03key\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x03key\x12\x33\n\x05value\x18\x03 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"\xe5\t\n\x08Metadata\x12>\n\x05\x61lias\x18\x05 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataAliasH\x00R\x05\x61lias\x12G\n\x08\x61rtefact\x18\x0e \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataArtefactH\x00R\x08\x61rtefact\x12>\n\x05\x63\x61lls\x18\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataCallsH\x00R\x05\x63\x61lls\x12\x41\n\x06\x63onfig\x18\n \x01(\x0b\x32\'.xyz.block.ftl.schema.v1.MetadataConfigH\x00R\x06\x63onfig\x12\x45\n\x08\x63ron_job\x18\x03 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataCronJobH\x00R\x07\x63ronJob\x12J\n\tdatabases\x18\x04 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataDatabasesH\x00R\tdatabases\x12G\n\x08\x65ncoding\x18\t \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataEncodingH\x00R\x08\x65ncoding\x12\x44\n\x07ingress\x18\x02 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataIngressH\x00R\x07ingress\x12M\n\npartitions\x18\x0f \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataPartitionsH\x00R\npartitions\x12J\n\tpublisher\x18\x0c \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataPublisherH\x00R\tpublisher\x12>\n\x05retry\x18\x06 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.MetadataRetryH\x00R\x05retry\x12K\n\nsql_column\x18\x11 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.MetadataSQLColumnH\x00R\tsqlColumn\x12T\n\rsql_migration\x18\r \x01(\x0b\x32-.xyz.block.ftl.schema.v1.MetadataSQLMigrationH\x00R\x0csqlMigration\x12H\n\tsql_query\x18\x10 \x01(\x0b\x32).xyz.block.ftl.schema.v1.MetadataSQLQueryH\x00R\x08sqlQuery\x12\x44\n\x07secrets\x18\x0b \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataSecretsH\x00R\x07secrets\x12M\n\nsubscriber\x18\x07 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.MetadataSubscriberH\x00R\nsubscriber\x12\x45\n\x08type_map\x18\x08 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.MetadataTypeMapH\x00R\x07typeMapB\x07\n\x05value\"\x9f\x01\n\rMetadataAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04kind\x18\x02 \x01(\x0e\x32\".xyz.block.ftl.schema.v1.AliasKindR\x04kind\x12\x14\n\x05\x61lias\x18\x03 \x01(\tR\x05\x61liasB\x06\n\x04_pos\"\xa0\x01\n\x10MetadataArtefact\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x16\n\x06\x64igest\x18\x03 \x01(\tR\x06\x64igest\x12\x1e\n\nexecutable\x18\x04 \x01(\x08R\nexecutableB\x06\n\x04_pos\"\x85\x01\n\rMetadataCalls\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x88\x01\n\x0eMetadataConfig\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06\x63onfig\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06\x63onfigB\x06\n\x04_pos\"g\n\x0fMetadataCronJob\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04\x63ron\x18\x02 \x01(\tR\x04\x63ronB\x06\n\x04_pos\"\x89\x01\n\x11MetadataDatabases\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05\x63\x61lls\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05\x63\x61llsB\x06\n\x04_pos\"\x82\x01\n\x10MetadataEncoding\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x18\n\x07lenient\x18\x03 \x01(\x08R\x07lenientB\x06\n\x04_pos\"\xc2\x01\n\x0fMetadataIngress\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x16\n\x06method\x18\x03 \x01(\tR\x06method\x12\x41\n\x04path\x18\x04 \x03(\x0b\x32-.xyz.block.ftl.schema.v1.IngressPathComponentR\x04pathB\x06\n\x04_pos\"v\n\x12MetadataPartitions\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1e\n\npartitions\x18\x02 \x01(\x03R\npartitionsB\x06\n\x04_pos\"\x8b\x01\n\x11MetadataPublisher\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x34\n\x06topics\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x06topicsB\x06\n\x04_pos\"\xfb\x01\n\rMetadataRetry\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x02 \x01(\x03H\x01R\x05\x63ount\x88\x01\x01\x12\x1f\n\x0bmin_backoff\x18\x03 \x01(\tR\nminBackoff\x12\x1f\n\x0bmax_backoff\x18\x04 \x01(\tR\nmaxBackoff\x12\x37\n\x05\x63\x61tch\x18\x05 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x02R\x05\x63\x61tch\x88\x01\x01\x42\x06\n\x04_posB\x08\n\x06_countB\x08\n\x06_catch\"\x7f\n\x11MetadataSQLColumn\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05table\x18\x02 \x01(\tR\x05table\x12\x12\n\x04name\x18\x03 \x01(\tR\x04nameB\x06\n\x04_pos\"p\n\x14MetadataSQLMigration\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06\x64igest\x18\x02 \x01(\tR\x06\x64igestB\x06\n\x04_pos\"\x84\x01\n\x10MetadataSQLQuery\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07\x63ommand\x18\x02 \x01(\tR\x07\x63ommand\x12\x14\n\x05query\x18\x03 \x01(\tR\x05queryB\x06\n\x04_pos\"\x8b\x01\n\x0fMetadataSecrets\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x07secrets\x18\x02 \x03(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x07secretsB\x06\n\x04_pos\"\xf1\x01\n\x12MetadataSubscriber\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x32\n\x05topic\x18\x02 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefR\x05topic\x12\x44\n\x0b\x66rom_offset\x18\x03 \x01(\x0e\x32#.xyz.block.ftl.schema.v1.FromOffsetR\nfromOffset\x12\x1f\n\x0b\x64\x65\x61\x64_letter\x18\x04 \x01(\x08R\ndeadLetterB\x06\n\x04_pos\"\x8e\x01\n\x0fMetadataTypeMap\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x18\n\x07runtime\x18\x02 \x01(\tR\x07runtime\x12\x1f\n\x0bnative_name\x18\x03 \x01(\tR\nnativeNameB\x06\n\x04_pos\"\xcc\x02\n\x06Module\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x18\n\x07\x62uiltin\x18\x03 \x01(\x08R\x07\x62uiltin\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x33\n\x05\x64\x65\x63ls\x18\x05 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.DeclR\x05\x64\x65\x63ls\x12\x42\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32&.xyz.block.ftl.schema.v1.ModuleRuntimeR\x07runtimeB\x06\n\x04_pos\"\x8f\x02\n\rModuleRuntime\x12>\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseR\x04\x62\x61se\x12L\n\x07scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x07scaling\x88\x01\x01\x12U\n\ndeployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x01R\ndeployment\x88\x01\x01\x42\n\n\x08_scalingB\r\n\x0b_deployment\"\xcf\x01\n\x11ModuleRuntimeBase\x12;\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ncreateTime\x12\x1a\n\x08language\x18\x02 \x01(\tR\x08language\x12\x13\n\x02os\x18\x03 \x01(\tH\x00R\x02os\x88\x01\x01\x12\x17\n\x04\x61rch\x18\x04 \x01(\tH\x01R\x04\x61rch\x88\x01\x01\x12\x19\n\x05image\x18\x05 \x01(\tH\x02R\x05image\x88\x01\x01\x42\x05\n\x03_osB\x07\n\x05_archB\x08\n\x06_image\"\xd6\x01\n\x17ModuleRuntimeDeployment\x12\x1a\n\x08\x65ndpoint\x18\x01 \x01(\tR\x08\x65ndpoint\x12%\n\x0e\x64\x65ployment_key\x18\x02 \x01(\tR\rdeploymentKey\x12\x39\n\ncreated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12=\n\x0c\x61\x63tivated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0b\x61\x63tivatedAt\"\xd2\x02\n\x12ModuleRuntimeEvent\x12\\\n\x13module_runtime_base\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseH\x00R\x11moduleRuntimeBase\x12n\n\x19module_runtime_deployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x00R\x17moduleRuntimeDeployment\x12\x65\n\x16module_runtime_scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x14moduleRuntimeScalingB\x07\n\x05value\"9\n\x14ModuleRuntimeScaling\x12!\n\x0cmin_replicas\x18\x01 \x01(\x05R\x0bminReplicas\"\x8d\x01\n\x08Optional\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x36\n\x04type\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeH\x01R\x04type\x88\x01\x01\x42\x06\n\x04_posB\x07\n\x05_type\"R\n\x08Position\x12\x1a\n\x08\x66ilename\x18\x01 \x01(\tR\x08\x66ilename\x12\x12\n\x04line\x18\x02 \x01(\x03R\x04line\x12\x16\n\x06\x63olumn\x18\x03 \x01(\x03R\x06\x63olumn\"\xbb\x01\n\x03Ref\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x16\n\x06module\x18\x03 \x01(\tR\x06module\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x46\n\x0ftype_parameters\x18\x04 \x03(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x0etypeParametersB\x06\n\x04_pos\"\xec\x04\n\x0cRuntimeEvent\x12\x65\n\x16\x64\x61tabase_runtime_event\x18\x05 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.DatabaseRuntimeEventH\x00R\x14\x64\x61tabaseRuntimeEvent\x12\\\n\x13module_runtime_base\x18\x01 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.ModuleRuntimeBaseH\x00R\x11moduleRuntimeBase\x12n\n\x19module_runtime_deployment\x18\x03 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.ModuleRuntimeDeploymentH\x00R\x17moduleRuntimeDeployment\x12\x65\n\x16module_runtime_scaling\x18\x02 \x01(\x0b\x32-.xyz.block.ftl.schema.v1.ModuleRuntimeScalingH\x00R\x14moduleRuntimeScaling\x12\\\n\x13topic_runtime_event\x18\x06 \x01(\x0b\x32*.xyz.block.ftl.schema.v1.TopicRuntimeEventH\x00R\x11topicRuntimeEvent\x12Y\n\x12verb_runtime_event\x18\x04 \x01(\x0b\x32).xyz.block.ftl.schema.v1.VerbRuntimeEventH\x00R\x10verbRuntimeEventB\x07\n\x05value\"\x85\x01\n\x06Schema\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x39\n\x07modules\x18\x02 \x03(\x0b\x32\x1f.xyz.block.ftl.schema.v1.ModuleR\x07modulesB\x06\n\x04_pos\"\xad\x01\n\x06Secret\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x12\n\x04name\x18\x03 \x01(\tR\x04name\x12\x31\n\x04type\x18\x04 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04typeB\x06\n\x04_pos\"J\n\x06String\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"e\n\x0bStringValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x14\n\x05value\x18\x02 \x01(\tR\x05valueB\x06\n\x04_pos\"H\n\x04Time\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xd9\x02\n\x05Topic\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x46\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeH\x01R\x07runtime\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x33\n\x05\x65vent\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05\x65vent\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_posB\n\n\x08_runtime\"N\n\x0cTopicRuntime\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers\x12\x19\n\x08topic_id\x18\x02 \x01(\tR\x07topicId\"d\n\x11TopicRuntimeEvent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12?\n\x07payload\x18\x02 \x01(\x0b\x32%.xyz.block.ftl.schema.v1.TopicRuntimeR\x07payload\"\x9a\x05\n\x04Type\x12\x30\n\x03\x61ny\x18\t \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.AnyH\x00R\x03\x61ny\x12\x36\n\x05\x61rray\x18\x07 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.ArrayH\x00R\x05\x61rray\x12\x33\n\x04\x62ool\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.BoolH\x00R\x04\x62ool\x12\x36\n\x05\x62ytes\x18\x04 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.BytesH\x00R\x05\x62ytes\x12\x36\n\x05\x66loat\x18\x02 \x01(\x0b\x32\x1e.xyz.block.ftl.schema.v1.FloatH\x00R\x05\x66loat\x12\x30\n\x03int\x18\x01 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.IntH\x00R\x03int\x12\x30\n\x03map\x18\x08 \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.MapH\x00R\x03map\x12?\n\x08optional\x18\x0c \x01(\x0b\x32!.xyz.block.ftl.schema.v1.OptionalH\x00R\x08optional\x12\x30\n\x03ref\x18\x0b \x01(\x0b\x32\x1c.xyz.block.ftl.schema.v1.RefH\x00R\x03ref\x12\x39\n\x06string\x18\x03 \x01(\x0b\x32\x1f.xyz.block.ftl.schema.v1.StringH\x00R\x06string\x12\x33\n\x04time\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TimeH\x00R\x04time\x12\x33\n\x04unit\x18\n \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.UnitH\x00R\x04unitB\x07\n\x05value\"\x87\x02\n\tTypeAlias\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x31\n\x04type\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x04type\x12=\n\x08metadata\x18\x06 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadataB\x06\n\x04_pos\"e\n\rTypeParameter\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x12\n\x04name\x18\x02 \x01(\tR\x04nameB\x06\n\x04_pos\"\x82\x01\n\tTypeValue\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x05valueB\x06\n\x04_pos\"H\n\x04Unit\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x42\x06\n\x04_pos\"\xe2\x01\n\x05Value\x12@\n\tint_value\x18\x02 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.IntValueH\x00R\x08intValue\x12I\n\x0cstring_value\x18\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.StringValueH\x00R\x0bstringValue\x12\x43\n\ntype_value\x18\x03 \x01(\x0b\x32\".xyz.block.ftl.schema.v1.TypeValueH\x00R\ttypeValueB\x07\n\x05value\"\x96\x03\n\x04Verb\x12\x38\n\x03pos\x18\x01 \x01(\x0b\x32!.xyz.block.ftl.schema.v1.PositionH\x00R\x03pos\x88\x01\x01\x12\x1a\n\x08\x63omments\x18\x02 \x03(\tR\x08\x63omments\x12\x16\n\x06\x65xport\x18\x03 \x01(\x08R\x06\x65xport\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x37\n\x07request\x18\x05 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x07request\x12\x39\n\x08response\x18\x06 \x01(\x0b\x32\x1d.xyz.block.ftl.schema.v1.TypeR\x08response\x12=\n\x08metadata\x18\x07 \x03(\x0b\x32!.xyz.block.ftl.schema.v1.MetadataR\x08metadata\x12\x45\n\x07runtime\x18\x92\xf7\x01 \x01(\x0b\x32$.xyz.block.ftl.schema.v1.VerbRuntimeH\x01R\x07runtime\x88\x01\x01\x42\x06\n\x04_posB\n\n\x08_runtime\"\xb7\x01\n\x0bVerbRuntime\x12<\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseR\x04\x62\x61se\x12Y\n\x0csubscription\x18\x02 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x00R\x0csubscription\x88\x01\x01\x42\x0f\n\r_subscription\"\xb2\x01\n\x0fVerbRuntimeBase\x12@\n\x0b\x63reate_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x00R\ncreateTime\x88\x01\x01\x12>\n\nstart_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampH\x01R\tstartTime\x88\x01\x01\x42\x0e\n\x0c_create_timeB\r\n\x0b_start_time\"i\n\x10VerbRuntimeEvent\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x45\n\x07payload\x18\x02 \x01(\x0b\x32+.xyz.block.ftl.schema.v1.VerbRuntimePayloadR\x07payload\"\xe5\x01\n\x12VerbRuntimePayload\x12V\n\x11verb_runtime_base\x18\x01 \x01(\x0b\x32(.xyz.block.ftl.schema.v1.VerbRuntimeBaseH\x00R\x0fverbRuntimeBase\x12n\n\x19verb_runtime_subscription\x18\x02 \x01(\x0b\x32\x30.xyz.block.ftl.schema.v1.VerbRuntimeSubscriptionH\x00R\x17verbRuntimeSubscriptionB\x07\n\x05value\">\n\x17VerbRuntimeSubscription\x12#\n\rkafka_brokers\x18\x01 \x03(\tR\x0ckafkaBrokers*<\n\tAliasKind\x12\x1a\n\x16\x41LIAS_KIND_UNSPECIFIED\x10\x00\x12\x13\n\x0f\x41LIAS_KIND_JSON\x10\x01*\\\n\nFromOffset\x12\x1b\n\x17\x46ROM_OFFSET_UNSPECIFIED\x10\x00\x12\x19\n\x15\x46ROM_OFFSET_BEGINNING\x10\x01\x12\x16\n\x12\x46ROM_OFFSET_LATEST\x10\x02\x42GP\x01ZCgithub.com/block/ftl/common/protos/xyz/block/ftl/schema/v1;schemapbb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -33,10 +33,10 @@ if not _descriptor._USE_C_DESCRIPTORS: _globals['DESCRIPTOR']._loaded_options = None _globals['DESCRIPTOR']._serialized_options = b'P\001ZCgithub.com/block/ftl/common/protos/xyz/block/ftl/schema/v1;schemapb' - _globals['_ALIASKIND']._serialized_start=14669 - _globals['_ALIASKIND']._serialized_end=14729 - _globals['_FROMOFFSET']._serialized_start=14731 - _globals['_FROMOFFSET']._serialized_end=14823 + _globals['_ALIASKIND']._serialized_start=14673 + _globals['_ALIASKIND']._serialized_end=14733 + _globals['_FROMOFFSET']._serialized_start=14735 + _globals['_FROMOFFSET']._serialized_end=14827 _globals['_AWSIAMAUTHDATABASECONNECTOR']._serialized_start=99 _globals['_AWSIAMAUTHDATABASECONNECTOR']._serialized_end=278 _globals['_ANY']._serialized_start=280 @@ -90,99 +90,99 @@ _globals['_MAP']._serialized_start=4417 _globals['_MAP']._serialized_end=4590 _globals['_METADATA']._serialized_start=4593 - _globals['_METADATA']._serialized_end=5843 - _globals['_METADATAALIAS']._serialized_start=5846 - _globals['_METADATAALIAS']._serialized_end=6005 - _globals['_METADATAARTEFACT']._serialized_start=6008 - _globals['_METADATAARTEFACT']._serialized_end=6168 - _globals['_METADATACALLS']._serialized_start=6171 - _globals['_METADATACALLS']._serialized_end=6304 - _globals['_METADATACONFIG']._serialized_start=6307 - _globals['_METADATACONFIG']._serialized_end=6443 - _globals['_METADATACRONJOB']._serialized_start=6445 - _globals['_METADATACRONJOB']._serialized_end=6548 - _globals['_METADATADBCOLUMN']._serialized_start=6550 - _globals['_METADATADBCOLUMN']._serialized_end=6676 - _globals['_METADATADATABASES']._serialized_start=6679 - _globals['_METADATADATABASES']._serialized_end=6816 - _globals['_METADATAENCODING']._serialized_start=6819 - _globals['_METADATAENCODING']._serialized_end=6949 - _globals['_METADATAINGRESS']._serialized_start=6952 - _globals['_METADATAINGRESS']._serialized_end=7146 - _globals['_METADATAPARTITIONS']._serialized_start=7148 - _globals['_METADATAPARTITIONS']._serialized_end=7266 - _globals['_METADATAPUBLISHER']._serialized_start=7269 - _globals['_METADATAPUBLISHER']._serialized_end=7408 - _globals['_METADATARETRY']._serialized_start=7411 - _globals['_METADATARETRY']._serialized_end=7662 - _globals['_METADATASQLMIGRATION']._serialized_start=7664 - _globals['_METADATASQLMIGRATION']._serialized_end=7776 - _globals['_METADATASQLQUERY']._serialized_start=7779 - _globals['_METADATASQLQUERY']._serialized_end=7911 - _globals['_METADATASECRETS']._serialized_start=7914 - _globals['_METADATASECRETS']._serialized_end=8053 - _globals['_METADATASUBSCRIBER']._serialized_start=8056 - _globals['_METADATASUBSCRIBER']._serialized_end=8297 - _globals['_METADATATYPEMAP']._serialized_start=8300 - _globals['_METADATATYPEMAP']._serialized_end=8442 - _globals['_MODULE']._serialized_start=8445 - _globals['_MODULE']._serialized_end=8777 - _globals['_MODULERUNTIME']._serialized_start=8780 - _globals['_MODULERUNTIME']._serialized_end=9051 - _globals['_MODULERUNTIMEBASE']._serialized_start=9054 - _globals['_MODULERUNTIMEBASE']._serialized_end=9261 - _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_start=9264 - _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_end=9478 - _globals['_MODULERUNTIMEEVENT']._serialized_start=9481 - _globals['_MODULERUNTIMEEVENT']._serialized_end=9819 - _globals['_MODULERUNTIMESCALING']._serialized_start=9821 - _globals['_MODULERUNTIMESCALING']._serialized_end=9878 - _globals['_OPTIONAL']._serialized_start=9881 - _globals['_OPTIONAL']._serialized_end=10022 - _globals['_POSITION']._serialized_start=10024 - _globals['_POSITION']._serialized_end=10106 - _globals['_REF']._serialized_start=10109 - _globals['_REF']._serialized_end=10296 - _globals['_RUNTIMEEVENT']._serialized_start=10299 - _globals['_RUNTIMEEVENT']._serialized_end=10919 - _globals['_SCHEMA']._serialized_start=10922 - _globals['_SCHEMA']._serialized_end=11055 - _globals['_SECRET']._serialized_start=11058 - _globals['_SECRET']._serialized_end=11231 - _globals['_STRING']._serialized_start=11233 - _globals['_STRING']._serialized_end=11307 - _globals['_STRINGVALUE']._serialized_start=11309 - _globals['_STRINGVALUE']._serialized_end=11410 - _globals['_TIME']._serialized_start=11412 - _globals['_TIME']._serialized_end=11484 - _globals['_TOPIC']._serialized_start=11487 - _globals['_TOPIC']._serialized_end=11832 - _globals['_TOPICRUNTIME']._serialized_start=11834 - _globals['_TOPICRUNTIME']._serialized_end=11912 - _globals['_TOPICRUNTIMEEVENT']._serialized_start=11914 - _globals['_TOPICRUNTIMEEVENT']._serialized_end=12014 - _globals['_TYPE']._serialized_start=12017 - _globals['_TYPE']._serialized_end=12683 - _globals['_TYPEALIAS']._serialized_start=12686 - _globals['_TYPEALIAS']._serialized_end=12949 - _globals['_TYPEPARAMETER']._serialized_start=12951 - _globals['_TYPEPARAMETER']._serialized_end=13052 - _globals['_TYPEVALUE']._serialized_start=13055 - _globals['_TYPEVALUE']._serialized_end=13185 - _globals['_UNIT']._serialized_start=13187 - _globals['_UNIT']._serialized_end=13259 - _globals['_VALUE']._serialized_start=13262 - _globals['_VALUE']._serialized_end=13488 - _globals['_VERB']._serialized_start=13491 - _globals['_VERB']._serialized_end=13897 - _globals['_VERBRUNTIME']._serialized_start=13900 - _globals['_VERBRUNTIME']._serialized_end=14083 - _globals['_VERBRUNTIMEBASE']._serialized_start=14086 - _globals['_VERBRUNTIMEBASE']._serialized_end=14264 - _globals['_VERBRUNTIMEEVENT']._serialized_start=14266 - _globals['_VERBRUNTIMEEVENT']._serialized_end=14371 - _globals['_VERBRUNTIMEPAYLOAD']._serialized_start=14374 - _globals['_VERBRUNTIMEPAYLOAD']._serialized_end=14603 - _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_start=14605 - _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_end=14667 + _globals['_METADATA']._serialized_end=5846 + _globals['_METADATAALIAS']._serialized_start=5849 + _globals['_METADATAALIAS']._serialized_end=6008 + _globals['_METADATAARTEFACT']._serialized_start=6011 + _globals['_METADATAARTEFACT']._serialized_end=6171 + _globals['_METADATACALLS']._serialized_start=6174 + _globals['_METADATACALLS']._serialized_end=6307 + _globals['_METADATACONFIG']._serialized_start=6310 + _globals['_METADATACONFIG']._serialized_end=6446 + _globals['_METADATACRONJOB']._serialized_start=6448 + _globals['_METADATACRONJOB']._serialized_end=6551 + _globals['_METADATADATABASES']._serialized_start=6554 + _globals['_METADATADATABASES']._serialized_end=6691 + _globals['_METADATAENCODING']._serialized_start=6694 + _globals['_METADATAENCODING']._serialized_end=6824 + _globals['_METADATAINGRESS']._serialized_start=6827 + _globals['_METADATAINGRESS']._serialized_end=7021 + _globals['_METADATAPARTITIONS']._serialized_start=7023 + _globals['_METADATAPARTITIONS']._serialized_end=7141 + _globals['_METADATAPUBLISHER']._serialized_start=7144 + _globals['_METADATAPUBLISHER']._serialized_end=7283 + _globals['_METADATARETRY']._serialized_start=7286 + _globals['_METADATARETRY']._serialized_end=7537 + _globals['_METADATASQLCOLUMN']._serialized_start=7539 + _globals['_METADATASQLCOLUMN']._serialized_end=7666 + _globals['_METADATASQLMIGRATION']._serialized_start=7668 + _globals['_METADATASQLMIGRATION']._serialized_end=7780 + _globals['_METADATASQLQUERY']._serialized_start=7783 + _globals['_METADATASQLQUERY']._serialized_end=7915 + _globals['_METADATASECRETS']._serialized_start=7918 + _globals['_METADATASECRETS']._serialized_end=8057 + _globals['_METADATASUBSCRIBER']._serialized_start=8060 + _globals['_METADATASUBSCRIBER']._serialized_end=8301 + _globals['_METADATATYPEMAP']._serialized_start=8304 + _globals['_METADATATYPEMAP']._serialized_end=8446 + _globals['_MODULE']._serialized_start=8449 + _globals['_MODULE']._serialized_end=8781 + _globals['_MODULERUNTIME']._serialized_start=8784 + _globals['_MODULERUNTIME']._serialized_end=9055 + _globals['_MODULERUNTIMEBASE']._serialized_start=9058 + _globals['_MODULERUNTIMEBASE']._serialized_end=9265 + _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_start=9268 + _globals['_MODULERUNTIMEDEPLOYMENT']._serialized_end=9482 + _globals['_MODULERUNTIMEEVENT']._serialized_start=9485 + _globals['_MODULERUNTIMEEVENT']._serialized_end=9823 + _globals['_MODULERUNTIMESCALING']._serialized_start=9825 + _globals['_MODULERUNTIMESCALING']._serialized_end=9882 + _globals['_OPTIONAL']._serialized_start=9885 + _globals['_OPTIONAL']._serialized_end=10026 + _globals['_POSITION']._serialized_start=10028 + _globals['_POSITION']._serialized_end=10110 + _globals['_REF']._serialized_start=10113 + _globals['_REF']._serialized_end=10300 + _globals['_RUNTIMEEVENT']._serialized_start=10303 + _globals['_RUNTIMEEVENT']._serialized_end=10923 + _globals['_SCHEMA']._serialized_start=10926 + _globals['_SCHEMA']._serialized_end=11059 + _globals['_SECRET']._serialized_start=11062 + _globals['_SECRET']._serialized_end=11235 + _globals['_STRING']._serialized_start=11237 + _globals['_STRING']._serialized_end=11311 + _globals['_STRINGVALUE']._serialized_start=11313 + _globals['_STRINGVALUE']._serialized_end=11414 + _globals['_TIME']._serialized_start=11416 + _globals['_TIME']._serialized_end=11488 + _globals['_TOPIC']._serialized_start=11491 + _globals['_TOPIC']._serialized_end=11836 + _globals['_TOPICRUNTIME']._serialized_start=11838 + _globals['_TOPICRUNTIME']._serialized_end=11916 + _globals['_TOPICRUNTIMEEVENT']._serialized_start=11918 + _globals['_TOPICRUNTIMEEVENT']._serialized_end=12018 + _globals['_TYPE']._serialized_start=12021 + _globals['_TYPE']._serialized_end=12687 + _globals['_TYPEALIAS']._serialized_start=12690 + _globals['_TYPEALIAS']._serialized_end=12953 + _globals['_TYPEPARAMETER']._serialized_start=12955 + _globals['_TYPEPARAMETER']._serialized_end=13056 + _globals['_TYPEVALUE']._serialized_start=13059 + _globals['_TYPEVALUE']._serialized_end=13189 + _globals['_UNIT']._serialized_start=13191 + _globals['_UNIT']._serialized_end=13263 + _globals['_VALUE']._serialized_start=13266 + _globals['_VALUE']._serialized_end=13492 + _globals['_VERB']._serialized_start=13495 + _globals['_VERB']._serialized_end=13901 + _globals['_VERBRUNTIME']._serialized_start=13904 + _globals['_VERBRUNTIME']._serialized_end=14087 + _globals['_VERBRUNTIMEBASE']._serialized_start=14090 + _globals['_VERBRUNTIMEBASE']._serialized_end=14268 + _globals['_VERBRUNTIMEEVENT']._serialized_start=14270 + _globals['_VERBRUNTIMEEVENT']._serialized_end=14375 + _globals['_VERBRUNTIMEPAYLOAD']._serialized_start=14378 + _globals['_VERBRUNTIMEPAYLOAD']._serialized_end=14607 + _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_start=14609 + _globals['_VERBRUNTIMESUBSCRIPTION']._serialized_end=14671 # @@protoc_insertion_point(module_scope) diff --git a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi index d8c170dcd..6a5e95ced 100644 --- a/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi +++ b/python-runtime/ftl/src/ftl/protos/xyz/block/ftl/schema/v1/schema_pb2.pyi @@ -274,19 +274,19 @@ class Map(_message.Message): def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., key: _Optional[_Union[Type, _Mapping]] = ..., value: _Optional[_Union[Type, _Mapping]] = ...) -> None: ... class Metadata(_message.Message): - __slots__ = ("alias", "artefact", "calls", "config", "cron_job", "db_column", "databases", "encoding", "ingress", "partitions", "publisher", "retry", "sql_migration", "sql_query", "secrets", "subscriber", "type_map") + __slots__ = ("alias", "artefact", "calls", "config", "cron_job", "databases", "encoding", "ingress", "partitions", "publisher", "retry", "sql_column", "sql_migration", "sql_query", "secrets", "subscriber", "type_map") ALIAS_FIELD_NUMBER: _ClassVar[int] ARTEFACT_FIELD_NUMBER: _ClassVar[int] CALLS_FIELD_NUMBER: _ClassVar[int] CONFIG_FIELD_NUMBER: _ClassVar[int] CRON_JOB_FIELD_NUMBER: _ClassVar[int] - DB_COLUMN_FIELD_NUMBER: _ClassVar[int] DATABASES_FIELD_NUMBER: _ClassVar[int] ENCODING_FIELD_NUMBER: _ClassVar[int] INGRESS_FIELD_NUMBER: _ClassVar[int] PARTITIONS_FIELD_NUMBER: _ClassVar[int] PUBLISHER_FIELD_NUMBER: _ClassVar[int] RETRY_FIELD_NUMBER: _ClassVar[int] + SQL_COLUMN_FIELD_NUMBER: _ClassVar[int] SQL_MIGRATION_FIELD_NUMBER: _ClassVar[int] SQL_QUERY_FIELD_NUMBER: _ClassVar[int] SECRETS_FIELD_NUMBER: _ClassVar[int] @@ -297,19 +297,19 @@ class Metadata(_message.Message): calls: MetadataCalls config: MetadataConfig cron_job: MetadataCronJob - db_column: MetadataDBColumn databases: MetadataDatabases encoding: MetadataEncoding ingress: MetadataIngress partitions: MetadataPartitions publisher: MetadataPublisher retry: MetadataRetry + sql_column: MetadataSQLColumn sql_migration: MetadataSQLMigration sql_query: MetadataSQLQuery secrets: MetadataSecrets subscriber: MetadataSubscriber type_map: MetadataTypeMap - def __init__(self, alias: _Optional[_Union[MetadataAlias, _Mapping]] = ..., artefact: _Optional[_Union[MetadataArtefact, _Mapping]] = ..., calls: _Optional[_Union[MetadataCalls, _Mapping]] = ..., config: _Optional[_Union[MetadataConfig, _Mapping]] = ..., cron_job: _Optional[_Union[MetadataCronJob, _Mapping]] = ..., db_column: _Optional[_Union[MetadataDBColumn, _Mapping]] = ..., databases: _Optional[_Union[MetadataDatabases, _Mapping]] = ..., encoding: _Optional[_Union[MetadataEncoding, _Mapping]] = ..., ingress: _Optional[_Union[MetadataIngress, _Mapping]] = ..., partitions: _Optional[_Union[MetadataPartitions, _Mapping]] = ..., publisher: _Optional[_Union[MetadataPublisher, _Mapping]] = ..., retry: _Optional[_Union[MetadataRetry, _Mapping]] = ..., sql_migration: _Optional[_Union[MetadataSQLMigration, _Mapping]] = ..., sql_query: _Optional[_Union[MetadataSQLQuery, _Mapping]] = ..., secrets: _Optional[_Union[MetadataSecrets, _Mapping]] = ..., subscriber: _Optional[_Union[MetadataSubscriber, _Mapping]] = ..., type_map: _Optional[_Union[MetadataTypeMap, _Mapping]] = ...) -> None: ... + def __init__(self, alias: _Optional[_Union[MetadataAlias, _Mapping]] = ..., artefact: _Optional[_Union[MetadataArtefact, _Mapping]] = ..., calls: _Optional[_Union[MetadataCalls, _Mapping]] = ..., config: _Optional[_Union[MetadataConfig, _Mapping]] = ..., cron_job: _Optional[_Union[MetadataCronJob, _Mapping]] = ..., databases: _Optional[_Union[MetadataDatabases, _Mapping]] = ..., encoding: _Optional[_Union[MetadataEncoding, _Mapping]] = ..., ingress: _Optional[_Union[MetadataIngress, _Mapping]] = ..., partitions: _Optional[_Union[MetadataPartitions, _Mapping]] = ..., publisher: _Optional[_Union[MetadataPublisher, _Mapping]] = ..., retry: _Optional[_Union[MetadataRetry, _Mapping]] = ..., sql_column: _Optional[_Union[MetadataSQLColumn, _Mapping]] = ..., sql_migration: _Optional[_Union[MetadataSQLMigration, _Mapping]] = ..., sql_query: _Optional[_Union[MetadataSQLQuery, _Mapping]] = ..., secrets: _Optional[_Union[MetadataSecrets, _Mapping]] = ..., subscriber: _Optional[_Union[MetadataSubscriber, _Mapping]] = ..., type_map: _Optional[_Union[MetadataTypeMap, _Mapping]] = ...) -> None: ... class MetadataAlias(_message.Message): __slots__ = ("pos", "kind", "alias") @@ -357,16 +357,6 @@ class MetadataCronJob(_message.Message): cron: str def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., cron: _Optional[str] = ...) -> None: ... -class MetadataDBColumn(_message.Message): - __slots__ = ("pos", "table", "name") - POS_FIELD_NUMBER: _ClassVar[int] - TABLE_FIELD_NUMBER: _ClassVar[int] - NAME_FIELD_NUMBER: _ClassVar[int] - pos: Position - table: str - name: str - def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., table: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ... - class MetadataDatabases(_message.Message): __slots__ = ("pos", "calls") POS_FIELD_NUMBER: _ClassVar[int] @@ -427,6 +417,16 @@ class MetadataRetry(_message.Message): catch: Ref def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., count: _Optional[int] = ..., min_backoff: _Optional[str] = ..., max_backoff: _Optional[str] = ..., catch: _Optional[_Union[Ref, _Mapping]] = ...) -> None: ... +class MetadataSQLColumn(_message.Message): + __slots__ = ("pos", "table", "name") + POS_FIELD_NUMBER: _ClassVar[int] + TABLE_FIELD_NUMBER: _ClassVar[int] + NAME_FIELD_NUMBER: _ClassVar[int] + pos: Position + table: str + name: str + def __init__(self, pos: _Optional[_Union[Position, _Mapping]] = ..., table: _Optional[str] = ..., name: _Optional[str] = ...) -> None: ... + class MetadataSQLMigration(_message.Message): __slots__ = ("pos", "digest") POS_FIELD_NUMBER: _ClassVar[int]