From 49c4b86c6d77e9394278d64207b61777791ed82f Mon Sep 17 00:00:00 2001 From: Alec Thomas Date: Wed, 2 Oct 2024 14:30:42 +1000 Subject: [PATCH] chore: statically extract .proto from Go source --- .go-arch-lint.yml | 2 +- .golangci.yml | 1 - Justfile | 4 +- backend/controller/ingress/ingress_test.go | 4 +- backend/controller/ingress/request.go | 2 +- backend/controller/ingress/response.go | 2 +- .../xyz/block/ftl/v1/schema/runtime.pb.go | 356 --- .../xyz/block/ftl/v1/schema/runtime.proto | 33 - .../xyz/block/ftl/v1/schema/schema.pb.go | 2343 ++++++++++------- .../xyz/block/ftl/v1/schema/schema.proto | 102 +- cmd/ftl-schema/main.go | 11 - cmd/go2proto/main.go | 411 +++ frontend/cli/cmd_schema.go | 1 - frontend/cli/cmd_schema_protobuf.go | 14 - .../xyz/block/ftl/v1/schema/schema_pb.ts | 461 ++-- go-runtime/schema/data/analyzer.go | 2 +- internal/schema/aliaskind_enumer.go | 8 +- internal/schema/jsonvalidate.go | 4 +- internal/schema/metadataalias.go | 4 +- internal/schema/module.go | 11 + internal/schema/parser.go | 10 - internal/schema/protobuf.go | 197 -- internal/schema/schema_test.go | 8 +- internal/schema/verb.go | 20 + scripts/{ftl-schema => go2proto} | 0 25 files changed, 2167 insertions(+), 1844 deletions(-) delete mode 100644 backend/protos/xyz/block/ftl/v1/schema/runtime.pb.go delete mode 100644 backend/protos/xyz/block/ftl/v1/schema/runtime.proto delete mode 100644 cmd/ftl-schema/main.go create mode 100644 cmd/go2proto/main.go delete mode 100644 frontend/cli/cmd_schema_protobuf.go delete mode 100644 internal/schema/protobuf.go rename scripts/{ftl-schema => go2proto} (100%) diff --git a/.go-arch-lint.yml b/.go-arch-lint.yml index 7261656747..9ed916517d 100644 --- a/.go-arch-lint.yml +++ b/.go-arch-lint.yml @@ -19,7 +19,7 @@ components: frontend: { in: frontend/console/** } ftl-gen-lsp-cmd: { in: cmd/ftl-gen-lsp/** } ftl-initdb-cmd: { in: cmd/ftl-initdb/** } - ftl-schema-cmd: { in: cmd/ftl-schema/** } + go2proto: { in: cmd/go2proto/** } lint-commit-or-rollback-cmd: { in: cmd/lint-commit-or-rollback/** } databasetesting: { in: backend/controller/sql/databasetesting/** } sql: { in: backend/controller/sql/** } diff --git a/.golangci.yml b/.golangci.yml index f2b0bd3df4..24966007bc 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -101,7 +101,6 @@ linters-settings: # ignorePackageGlobs: # - github.com/TBD54566975/ftl/* spancheck: - extra-start-span-signatures: - "github.com/TBD54566975/ftl/backend/controller/observability.BeginSpan:opentelemetry" issues: diff --git a/Justfile b/Justfile index 061889d7f8..7553817d8b 100644 --- a/Justfile +++ b/Justfile @@ -129,12 +129,12 @@ pnpm-install: # Regenerate protos build-protos: pnpm-install - @mk {{SCHEMA_OUT}} : internal/schema -- "ftl-schema > {{SCHEMA_OUT}} && buf format -w && buf lint" + @mk {{SCHEMA_OUT}} : internal/schema -- "go2proto -o "{{SCHEMA_OUT}}" -g 'github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema;schemapb' xyz.block.ftl.v1.schema ./internal/schema.Schema && buf format -w && buf lint" @mk {{PROTOS_OUT}} : {{PROTOS_IN}} -- "cd backend/protos && buf generate" # Unconditionally rebuild protos build-protos-unconditionally: pnpm-install - ftl-schema > {{SCHEMA_OUT}} && buf format -w && buf lint + go2proto -o "{{SCHEMA_OUT}}" -g 'github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema;schemapb' xyz.block.ftl.v1.schema ./internal/schema.Schema && buf format -w && buf lint cd backend/protos && buf generate # Run integration test(s) diff --git a/backend/controller/ingress/ingress_test.go b/backend/controller/ingress/ingress_test.go index 8f9a7113e1..d0f8e596a6 100644 --- a/backend/controller/ingress/ingress_test.go +++ b/backend/controller/ingress/ingress_test.go @@ -119,7 +119,7 @@ func TestValidation(t *testing.T) { {name: "IntAlias", schema: `module test { typealias IntAlias Int - data Test { intValue test.IntAlias } + data Test { intValue test.IntAlias } }`, request: obj{"intValue": 10.0}, }, @@ -245,7 +245,7 @@ func TestResponseBodyForVerb(t *testing.T) { &schema.Data{ Name: "Test", Fields: []*schema.Field{ - {Name: "message", Type: &schema.String{}, Metadata: []schema.Metadata{&schema.MetadataAlias{Kind: schema.AliasKindJSON, Alias: "msg"}}}, + {Name: "message", Type: &schema.String{}, Metadata: []schema.Metadata{&schema.MetadataAlias{Kind: schema.AliasKindJson, Alias: "msg"}}}, }, }, jsonVerb, diff --git a/backend/controller/ingress/request.go b/backend/controller/ingress/request.go index 883c66d47c..d67031147c 100644 --- a/backend/controller/ingress/request.go +++ b/backend/controller/ingress/request.go @@ -312,7 +312,7 @@ func parseQueryParams(values url.Values, data *schema.Data) (map[string]any, err var field *schema.Field for _, f := range data.Fields { - if jsonAlias, ok := f.Alias(schema.AliasKindJSON).Get(); (ok && jsonAlias == key) || f.Name == key { + if jsonAlias, ok := f.Alias(schema.AliasKindJson).Get(); (ok && jsonAlias == key) || f.Name == key { field = f } for _, typeParam := range data.TypeParameters { diff --git a/backend/controller/ingress/response.go b/backend/controller/ingress/response.go index 8a2c26babf..876f360f75 100644 --- a/backend/controller/ingress/response.go +++ b/backend/controller/ingress/response.go @@ -80,7 +80,7 @@ func bodyForType(typ schema.Type, sch *schema.Schema, data []byte) ([]byte, erro } err = schema.TransformAliasedFields(sch, t, response, func(obj map[string]any, field *schema.Field) string { - if jsonAlias, ok := field.Alias(schema.AliasKindJSON).Get(); ok && field.Name != jsonAlias { + if jsonAlias, ok := field.Alias(schema.AliasKindJson).Get(); ok && field.Name != jsonAlias { obj[jsonAlias] = obj[field.Name] delete(obj, field.Name) return jsonAlias diff --git a/backend/protos/xyz/block/ftl/v1/schema/runtime.pb.go b/backend/protos/xyz/block/ftl/v1/schema/runtime.pb.go deleted file mode 100644 index 2759609fa7..0000000000 --- a/backend/protos/xyz/block/ftl/v1/schema/runtime.pb.go +++ /dev/null @@ -1,356 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.34.2 -// protoc (unknown) -// source: xyz/block/ftl/v1/schema/runtime.proto - -package schemapb - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Status int32 - -const ( - Status_OFFLINE Status = 0 - Status_STARTING Status = 1 - Status_ONLINE Status = 2 - Status_STOPPING Status = 3 - Status_STOPPED Status = 4 - Status_ERRORED Status = 5 -) - -// Enum value maps for Status. -var ( - Status_name = map[int32]string{ - 0: "OFFLINE", - 1: "STARTING", - 2: "ONLINE", - 3: "STOPPING", - 4: "STOPPED", - 5: "ERRORED", - } - Status_value = map[string]int32{ - "OFFLINE": 0, - "STARTING": 1, - "ONLINE": 2, - "STOPPING": 3, - "STOPPED": 4, - "ERRORED": 5, - } -) - -func (x Status) Enum() *Status { - p := new(Status) - *p = x - return p -} - -func (x Status) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Status) Descriptor() protoreflect.EnumDescriptor { - return file_xyz_block_ftl_v1_schema_runtime_proto_enumTypes[0].Descriptor() -} - -func (Status) Type() protoreflect.EnumType { - return &file_xyz_block_ftl_v1_schema_runtime_proto_enumTypes[0] -} - -func (x Status) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Status.Descriptor instead. -func (Status) EnumDescriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_runtime_proto_rawDescGZIP(), []int{0} -} - -type ModuleRuntime struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CreateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` - MinReplicas int32 `protobuf:"varint,3,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` - // OS the module was built for. If empty, the module is OS-agnostic. - Os *string `protobuf:"bytes,4,opt,name=os,proto3,oneof" json:"os,omitempty"` - // CPU architecture the module was built for. If empty, the module is CPU-agnostic. - Arch *string `protobuf:"bytes,5,opt,name=arch,proto3,oneof" json:"arch,omitempty"` -} - -func (x *ModuleRuntime) Reset() { - *x = ModuleRuntime{} - if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ModuleRuntime) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ModuleRuntime) ProtoMessage() {} - -func (x *ModuleRuntime) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ModuleRuntime.ProtoReflect.Descriptor instead. -func (*ModuleRuntime) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_runtime_proto_rawDescGZIP(), []int{0} -} - -func (x *ModuleRuntime) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *ModuleRuntime) GetLanguage() string { - if x != nil { - return x.Language - } - return "" -} - -func (x *ModuleRuntime) GetMinReplicas() int32 { - if x != nil { - return x.MinReplicas - } - return 0 -} - -func (x *ModuleRuntime) GetOs() string { - if x != nil && x.Os != nil { - return *x.Os - } - return "" -} - -func (x *ModuleRuntime) GetArch() string { - if x != nil && x.Arch != nil { - return *x.Arch - } - return "" -} - -type VerbRuntime struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CreateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - StartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` - Status Status `protobuf:"varint,3,opt,name=status,proto3,enum=xyz.block.ftl.v1.schema.Status" json:"status,omitempty"` -} - -func (x *VerbRuntime) Reset() { - *x = VerbRuntime{} - if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VerbRuntime) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VerbRuntime) ProtoMessage() {} - -func (x *VerbRuntime) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VerbRuntime.ProtoReflect.Descriptor instead. -func (*VerbRuntime) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_runtime_proto_rawDescGZIP(), []int{1} -} - -func (x *VerbRuntime) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *VerbRuntime) GetStartTime() *timestamppb.Timestamp { - if x != nil { - return x.StartTime - } - return nil -} - -func (x *VerbRuntime) GetStatus() Status { - if x != nil { - return x.Status - } - return Status_OFFLINE -} - -var File_xyz_block_ftl_v1_schema_runtime_proto protoreflect.FileDescriptor - -var file_xyz_block_ftl_v1_schema_runtime_proto_rawDesc = []byte{ - 0x0a, 0x25, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, - 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 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, 0x22, 0xc9, 0x01, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 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, 0x21, 0x0a, 0x0c, - 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, - 0x13, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, - 0x03, 0x5f, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x61, 0x72, 0x63, 0x68, 0x22, 0xbe, 0x01, - 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 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, 0x39, 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, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x57, - 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46, 0x46, 0x4c, - 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x52, - 0x52, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x05, 0x42, 0x4e, 0x50, 0x01, 0x5a, 0x4a, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, - 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3b, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_xyz_block_ftl_v1_schema_runtime_proto_rawDescOnce sync.Once - file_xyz_block_ftl_v1_schema_runtime_proto_rawDescData = file_xyz_block_ftl_v1_schema_runtime_proto_rawDesc -) - -func file_xyz_block_ftl_v1_schema_runtime_proto_rawDescGZIP() []byte { - file_xyz_block_ftl_v1_schema_runtime_proto_rawDescOnce.Do(func() { - file_xyz_block_ftl_v1_schema_runtime_proto_rawDescData = protoimpl.X.CompressGZIP(file_xyz_block_ftl_v1_schema_runtime_proto_rawDescData) - }) - return file_xyz_block_ftl_v1_schema_runtime_proto_rawDescData -} - -var file_xyz_block_ftl_v1_schema_runtime_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_xyz_block_ftl_v1_schema_runtime_proto_goTypes = []any{ - (Status)(0), // 0: xyz.block.ftl.v1.schema.Status - (*ModuleRuntime)(nil), // 1: xyz.block.ftl.v1.schema.ModuleRuntime - (*VerbRuntime)(nil), // 2: xyz.block.ftl.v1.schema.VerbRuntime - (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp -} -var file_xyz_block_ftl_v1_schema_runtime_proto_depIdxs = []int32{ - 3, // 0: xyz.block.ftl.v1.schema.ModuleRuntime.create_time:type_name -> google.protobuf.Timestamp - 3, // 1: xyz.block.ftl.v1.schema.VerbRuntime.create_time:type_name -> google.protobuf.Timestamp - 3, // 2: xyz.block.ftl.v1.schema.VerbRuntime.start_time:type_name -> google.protobuf.Timestamp - 0, // 3: xyz.block.ftl.v1.schema.VerbRuntime.status:type_name -> xyz.block.ftl.v1.schema.Status - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_xyz_block_ftl_v1_schema_runtime_proto_init() } -func file_xyz_block_ftl_v1_schema_runtime_proto_init() { - if File_xyz_block_ftl_v1_schema_runtime_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ModuleRuntime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*VerbRuntime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes[0].OneofWrappers = []any{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xyz_block_ftl_v1_schema_runtime_proto_rawDesc, - NumEnums: 1, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xyz_block_ftl_v1_schema_runtime_proto_goTypes, - DependencyIndexes: file_xyz_block_ftl_v1_schema_runtime_proto_depIdxs, - EnumInfos: file_xyz_block_ftl_v1_schema_runtime_proto_enumTypes, - MessageInfos: file_xyz_block_ftl_v1_schema_runtime_proto_msgTypes, - }.Build() - File_xyz_block_ftl_v1_schema_runtime_proto = out.File - file_xyz_block_ftl_v1_schema_runtime_proto_rawDesc = nil - file_xyz_block_ftl_v1_schema_runtime_proto_goTypes = nil - file_xyz_block_ftl_v1_schema_runtime_proto_depIdxs = nil -} diff --git a/backend/protos/xyz/block/ftl/v1/schema/runtime.proto b/backend/protos/xyz/block/ftl/v1/schema/runtime.proto deleted file mode 100644 index ee87799eda..0000000000 --- a/backend/protos/xyz/block/ftl/v1/schema/runtime.proto +++ /dev/null @@ -1,33 +0,0 @@ -syntax = "proto3"; - -package xyz.block.ftl.v1.schema; - -import "google/protobuf/timestamp.proto"; - -option go_package = "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema;schemapb"; -option java_multiple_files = true; - -enum Status { - OFFLINE = 0; - STARTING = 1; - ONLINE = 2; - STOPPING = 3; - STOPPED = 4; - ERRORED = 5; -} - -message ModuleRuntime { - google.protobuf.Timestamp create_time = 1; - string language = 2; - int32 min_replicas = 3; - // OS the module was built for. If empty, the module is OS-agnostic. - optional string os = 4; - // CPU architecture the module was built for. If empty, the module is CPU-agnostic. - optional string arch = 5; -} - -message VerbRuntime { - google.protobuf.Timestamp create_time = 1; - google.protobuf.Timestamp start_time = 2; - Status status = 3; -} diff --git a/backend/protos/xyz/block/ftl/v1/schema/schema.pb.go b/backend/protos/xyz/block/ftl/v1/schema/schema.pb.go index 43365b3caf..c6b9133992 100644 --- a/backend/protos/xyz/block/ftl/v1/schema/schema.pb.go +++ b/backend/protos/xyz/block/ftl/v1/schema/schema.pb.go @@ -4,13 +4,12 @@ // protoc (unknown) // source: xyz/block/ftl/v1/schema/schema.proto -// This file is generated by github.com/TBD54566975/ftl/internal/schema/protobuf.go, DO NOT MODIFY - package schemapb import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -22,6 +21,107 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type AliasKind int32 + +const ( + AliasKind_ALIAS_KIND_JSON AliasKind = 0 +) + +// Enum value maps for AliasKind. +var ( + AliasKind_name = map[int32]string{ + 0: "ALIAS_KIND_JSON", + } + AliasKind_value = map[string]int32{ + "ALIAS_KIND_JSON": 0, + } +) + +func (x AliasKind) Enum() *AliasKind { + p := new(AliasKind) + *p = x + return p +} + +func (x AliasKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AliasKind) Descriptor() protoreflect.EnumDescriptor { + return file_xyz_block_ftl_v1_schema_schema_proto_enumTypes[0].Descriptor() +} + +func (AliasKind) Type() protoreflect.EnumType { + return &file_xyz_block_ftl_v1_schema_schema_proto_enumTypes[0] +} + +func (x AliasKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AliasKind.Descriptor instead. +func (AliasKind) EnumDescriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{0} +} + +type VerbStatus int32 + +const ( + VerbStatus_VERB_STATUS_ERROR VerbStatus = 0 + VerbStatus_VERB_STATUS_OFFLINE VerbStatus = 1 + VerbStatus_VERB_STATUS_ONLINE VerbStatus = 2 + VerbStatus_VERB_STATUS_STARTING VerbStatus = 3 + VerbStatus_VERB_STATUS_STOPPED VerbStatus = 4 + VerbStatus_VERB_STATUS_STOPPING VerbStatus = 5 +) + +// Enum value maps for VerbStatus. +var ( + VerbStatus_name = map[int32]string{ + 0: "VERB_STATUS_ERROR", + 1: "VERB_STATUS_OFFLINE", + 2: "VERB_STATUS_ONLINE", + 3: "VERB_STATUS_STARTING", + 4: "VERB_STATUS_STOPPED", + 5: "VERB_STATUS_STOPPING", + } + VerbStatus_value = map[string]int32{ + "VERB_STATUS_ERROR": 0, + "VERB_STATUS_OFFLINE": 1, + "VERB_STATUS_ONLINE": 2, + "VERB_STATUS_STARTING": 3, + "VERB_STATUS_STOPPED": 4, + "VERB_STATUS_STOPPING": 5, + } +) + +func (x VerbStatus) Enum() *VerbStatus { + p := new(VerbStatus) + *p = x + return p +} + +func (x VerbStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (VerbStatus) Descriptor() protoreflect.EnumDescriptor { + return file_xyz_block_ftl_v1_schema_schema_proto_enumTypes[1].Descriptor() +} + +func (VerbStatus) Type() protoreflect.EnumType { + return &file_xyz_block_ftl_v1_schema_schema_proto_enumTypes[1] +} + +func (x VerbStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use VerbStatus.Descriptor instead. +func (VerbStatus) EnumDescriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{1} +} + type Any struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -391,8 +491,8 @@ type Database struct { Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` Comments []string `protobuf:"bytes,2,rep,name=comments,proto3" json:"comments,omitempty"` - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` } func (x *Database) Reset() { @@ -441,16 +541,16 @@ func (x *Database) GetComments() []string { return nil } -func (x *Database) GetName() string { +func (x *Database) GetType() string { if x != nil { - return x.Name + return x.Type } return "" } -func (x *Database) GetType() string { +func (x *Database) GetName() string { if x != nil { - return x.Type + return x.Name } return "" } @@ -462,16 +562,16 @@ type Decl struct { // Types that are assignable to Value: // + // *Decl_Config // *Decl_Data - // *Decl_Verb // *Decl_Database // *Decl_Enum - // *Decl_TypeAlias - // *Decl_Config - // *Decl_Secret // *Decl_Fsm - // *Decl_Topic + // *Decl_Secret // *Decl_Subscription + // *Decl_Topic + // *Decl_TypeAlias + // *Decl_Verb Value isDecl_Value `protobuf_oneof:"value"` } @@ -514,16 +614,16 @@ func (m *Decl) GetValue() isDecl_Value { return nil } -func (x *Decl) GetData() *Data { - if x, ok := x.GetValue().(*Decl_Data); ok { - return x.Data +func (x *Decl) GetConfig() *Config { + if x, ok := x.GetValue().(*Decl_Config); ok { + return x.Config } return nil } -func (x *Decl) GetVerb() *Verb { - if x, ok := x.GetValue().(*Decl_Verb); ok { - return x.Verb +func (x *Decl) GetData() *Data { + if x, ok := x.GetValue().(*Decl_Data); ok { + return x.Data } return nil } @@ -542,16 +642,9 @@ func (x *Decl) GetEnum() *Enum { return nil } -func (x *Decl) GetTypeAlias() *TypeAlias { - if x, ok := x.GetValue().(*Decl_TypeAlias); ok { - return x.TypeAlias - } - return nil -} - -func (x *Decl) GetConfig() *Config { - if x, ok := x.GetValue().(*Decl_Config); ok { - return x.Config +func (x *Decl) GetFsm() *FSM { + if x, ok := x.GetValue().(*Decl_Fsm); ok { + return x.Fsm } return nil } @@ -563,9 +656,9 @@ func (x *Decl) GetSecret() *Secret { return nil } -func (x *Decl) GetFsm() *FSM { - if x, ok := x.GetValue().(*Decl_Fsm); ok { - return x.Fsm +func (x *Decl) GetSubscription() *Subscription { + if x, ok := x.GetValue().(*Decl_Subscription); ok { + return x.Subscription } return nil } @@ -577,9 +670,16 @@ func (x *Decl) GetTopic() *Topic { return nil } -func (x *Decl) GetSubscription() *Subscription { - if x, ok := x.GetValue().(*Decl_Subscription); ok { - return x.Subscription +func (x *Decl) GetTypeAlias() *TypeAlias { + if x, ok := x.GetValue().(*Decl_TypeAlias); ok { + return x.TypeAlias + } + return nil +} + +func (x *Decl) GetVerb() *Verb { + if x, ok := x.GetValue().(*Decl_Verb); ok { + return x.Verb } return nil } @@ -588,12 +688,12 @@ type isDecl_Value interface { isDecl_Value() } -type Decl_Data struct { - Data *Data `protobuf:"bytes,1,opt,name=data,proto3,oneof"` +type Decl_Config struct { + Config *Config `protobuf:"bytes,1,opt,name=config,proto3,oneof"` } -type Decl_Verb struct { - Verb *Verb `protobuf:"bytes,2,opt,name=verb,proto3,oneof"` +type Decl_Data struct { + Data *Data `protobuf:"bytes,2,opt,name=data,proto3,oneof"` } type Decl_Database struct { @@ -604,49 +704,49 @@ type Decl_Enum struct { Enum *Enum `protobuf:"bytes,4,opt,name=enum,proto3,oneof"` } -type Decl_TypeAlias struct { - TypeAlias *TypeAlias `protobuf:"bytes,5,opt,name=typeAlias,proto3,oneof"` -} - -type Decl_Config struct { - Config *Config `protobuf:"bytes,6,opt,name=config,proto3,oneof"` +type Decl_Fsm struct { + Fsm *FSM `protobuf:"bytes,5,opt,name=fsm,proto3,oneof"` } type Decl_Secret struct { - Secret *Secret `protobuf:"bytes,7,opt,name=secret,proto3,oneof"` + Secret *Secret `protobuf:"bytes,6,opt,name=secret,proto3,oneof"` } -type Decl_Fsm struct { - Fsm *FSM `protobuf:"bytes,8,opt,name=fsm,proto3,oneof"` +type Decl_Subscription struct { + Subscription *Subscription `protobuf:"bytes,7,opt,name=subscription,proto3,oneof"` } type Decl_Topic struct { - Topic *Topic `protobuf:"bytes,9,opt,name=topic,proto3,oneof"` + Topic *Topic `protobuf:"bytes,8,opt,name=topic,proto3,oneof"` } -type Decl_Subscription struct { - Subscription *Subscription `protobuf:"bytes,10,opt,name=subscription,proto3,oneof"` +type Decl_TypeAlias struct { + TypeAlias *TypeAlias `protobuf:"bytes,9,opt,name=typeAlias,proto3,oneof"` } -func (*Decl_Data) isDecl_Value() {} +type Decl_Verb struct { + Verb *Verb `protobuf:"bytes,10,opt,name=verb,proto3,oneof"` +} -func (*Decl_Verb) isDecl_Value() {} +func (*Decl_Config) isDecl_Value() {} + +func (*Decl_Data) isDecl_Value() {} func (*Decl_Database) isDecl_Value() {} func (*Decl_Enum) isDecl_Value() {} -func (*Decl_TypeAlias) isDecl_Value() {} - -func (*Decl_Config) isDecl_Value() {} +func (*Decl_Fsm) isDecl_Value() {} func (*Decl_Secret) isDecl_Value() {} -func (*Decl_Fsm) isDecl_Value() {} +func (*Decl_Subscription) isDecl_Value() {} func (*Decl_Topic) isDecl_Value() {} -func (*Decl_Subscription) isDecl_Value() {} +func (*Decl_TypeAlias) isDecl_Value() {} + +func (*Decl_Verb) isDecl_Value() {} type Enum struct { state protoimpl.MessageState @@ -814,9 +914,9 @@ type FSM struct { Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` Comments []string `protobuf:"bytes,2,rep,name=comments,proto3" json:"comments,omitempty"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Metadata []*Metadata `protobuf:"bytes,6,rep,name=metadata,proto3" json:"metadata,omitempty"` Start []*Ref `protobuf:"bytes,4,rep,name=start,proto3" json:"start,omitempty"` Transitions []*FSMTransition `protobuf:"bytes,5,rep,name=transitions,proto3" json:"transitions,omitempty"` - Metadata []*Metadata `protobuf:"bytes,6,rep,name=metadata,proto3" json:"metadata,omitempty"` } func (x *FSM) Reset() { @@ -872,23 +972,23 @@ func (x *FSM) GetName() string { return "" } -func (x *FSM) GetStart() []*Ref { +func (x *FSM) GetMetadata() []*Metadata { if x != nil { - return x.Start + return x.Metadata } return nil } -func (x *FSM) GetTransitions() []*FSMTransition { +func (x *FSM) GetStart() []*Ref { if x != nil { - return x.Transitions + return x.Start } return nil } -func (x *FSM) GetMetadata() []*Metadata { +func (x *FSM) GetTransitions() []*FSMTransition { if x != nil { - return x.Metadata + return x.Transitions } return nil } @@ -970,8 +1070,8 @@ type Field struct { unknownFields protoimpl.UnknownFields Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Comments []string `protobuf:"bytes,3,rep,name=comments,proto3" json:"comments,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Type *Type `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` Metadata []*Metadata `protobuf:"bytes,5,rep,name=metadata,proto3" json:"metadata,omitempty"` } @@ -1015,18 +1115,18 @@ func (x *Field) GetPos() *Position { return nil } -func (x *Field) GetName() string { +func (x *Field) GetComments() []string { if x != nil { - return x.Name + return x.Comments } - return "" + return nil } -func (x *Field) GetComments() []string { +func (x *Field) GetName() string { if x != nil { - return x.Comments + return x.Name } - return nil + return "" } func (x *Field) GetType() *Type { @@ -1453,15 +1553,15 @@ type Metadata struct { // Types that are assignable to Value: // + // *Metadata_Alias // *Metadata_Calls - // *Metadata_Ingress // *Metadata_CronJob // *Metadata_Databases - // *Metadata_Alias + // *Metadata_Encoding + // *Metadata_Ingress // *Metadata_Retry // *Metadata_Subscriber // *Metadata_TypeMap - // *Metadata_Encoding Value isMetadata_Value `protobuf_oneof:"value"` } @@ -1504,16 +1604,16 @@ func (m *Metadata) GetValue() isMetadata_Value { return nil } -func (x *Metadata) GetCalls() *MetadataCalls { - if x, ok := x.GetValue().(*Metadata_Calls); ok { - return x.Calls +func (x *Metadata) GetAlias() *MetadataAlias { + if x, ok := x.GetValue().(*Metadata_Alias); ok { + return x.Alias } return nil } -func (x *Metadata) GetIngress() *MetadataIngress { - if x, ok := x.GetValue().(*Metadata_Ingress); ok { - return x.Ingress +func (x *Metadata) GetCalls() *MetadataCalls { + if x, ok := x.GetValue().(*Metadata_Calls); ok { + return x.Calls } return nil } @@ -1532,9 +1632,16 @@ func (x *Metadata) GetDatabases() *MetadataDatabases { return nil } -func (x *Metadata) GetAlias() *MetadataAlias { - if x, ok := x.GetValue().(*Metadata_Alias); ok { - return x.Alias +func (x *Metadata) GetEncoding() *MetadataEncoding { + if x, ok := x.GetValue().(*Metadata_Encoding); ok { + return x.Encoding + } + return nil +} + +func (x *Metadata) GetIngress() *MetadataIngress { + if x, ok := x.GetValue().(*Metadata_Ingress); ok { + return x.Ingress } return nil } @@ -1560,23 +1667,16 @@ func (x *Metadata) GetTypeMap() *MetadataTypeMap { return nil } -func (x *Metadata) GetEncoding() *MetadataEncoding { - if x, ok := x.GetValue().(*Metadata_Encoding); ok { - return x.Encoding - } - return nil -} - type isMetadata_Value interface { isMetadata_Value() } -type Metadata_Calls struct { - Calls *MetadataCalls `protobuf:"bytes,1,opt,name=calls,proto3,oneof"` +type Metadata_Alias struct { + Alias *MetadataAlias `protobuf:"bytes,1,opt,name=alias,proto3,oneof"` } -type Metadata_Ingress struct { - Ingress *MetadataIngress `protobuf:"bytes,2,opt,name=ingress,proto3,oneof"` +type Metadata_Calls struct { + Calls *MetadataCalls `protobuf:"bytes,2,opt,name=calls,proto3,oneof"` } type Metadata_CronJob struct { @@ -1587,35 +1687,37 @@ type Metadata_Databases struct { Databases *MetadataDatabases `protobuf:"bytes,4,opt,name=databases,proto3,oneof"` } -type Metadata_Alias struct { - Alias *MetadataAlias `protobuf:"bytes,5,opt,name=alias,proto3,oneof"` +type Metadata_Encoding struct { + Encoding *MetadataEncoding `protobuf:"bytes,5,opt,name=encoding,proto3,oneof"` +} + +type Metadata_Ingress struct { + Ingress *MetadataIngress `protobuf:"bytes,6,opt,name=ingress,proto3,oneof"` } type Metadata_Retry struct { - Retry *MetadataRetry `protobuf:"bytes,6,opt,name=retry,proto3,oneof"` + Retry *MetadataRetry `protobuf:"bytes,7,opt,name=retry,proto3,oneof"` } type Metadata_Subscriber struct { - Subscriber *MetadataSubscriber `protobuf:"bytes,7,opt,name=subscriber,proto3,oneof"` + Subscriber *MetadataSubscriber `protobuf:"bytes,8,opt,name=subscriber,proto3,oneof"` } type Metadata_TypeMap struct { - TypeMap *MetadataTypeMap `protobuf:"bytes,8,opt,name=typeMap,proto3,oneof"` + TypeMap *MetadataTypeMap `protobuf:"bytes,9,opt,name=typeMap,proto3,oneof"` } -type Metadata_Encoding struct { - Encoding *MetadataEncoding `protobuf:"bytes,9,opt,name=encoding,proto3,oneof"` -} +func (*Metadata_Alias) isMetadata_Value() {} func (*Metadata_Calls) isMetadata_Value() {} -func (*Metadata_Ingress) isMetadata_Value() {} - func (*Metadata_CronJob) isMetadata_Value() {} func (*Metadata_Databases) isMetadata_Value() {} -func (*Metadata_Alias) isMetadata_Value() {} +func (*Metadata_Encoding) isMetadata_Value() {} + +func (*Metadata_Ingress) isMetadata_Value() {} func (*Metadata_Retry) isMetadata_Value() {} @@ -1623,15 +1725,13 @@ func (*Metadata_Subscriber) isMetadata_Value() {} func (*Metadata_TypeMap) isMetadata_Value() {} -func (*Metadata_Encoding) isMetadata_Value() {} - type MetadataAlias struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Kind int64 `protobuf:"varint,2,opt,name=kind,proto3" json:"kind,omitempty"` + Kind AliasKind `protobuf:"varint,2,opt,name=kind,proto3,enum=xyz.block.ftl.v1.schema.AliasKind" json:"kind,omitempty"` Alias string `protobuf:"bytes,3,opt,name=alias,proto3" json:"alias,omitempty"` } @@ -1674,11 +1774,11 @@ func (x *MetadataAlias) GetPos() *Position { return nil } -func (x *MetadataAlias) GetKind() int64 { +func (x *MetadataAlias) GetKind() AliasKind { if x != nil { return x.Kind } - return 0 + return AliasKind_ALIAS_KIND_JSON } func (x *MetadataAlias) GetAlias() string { @@ -2189,12 +2289,12 @@ type Module struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Runtime *ModuleRuntime `protobuf:"bytes,31634,opt,name=runtime,proto3,oneof" json:"runtime,omitempty"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` Comments []string `protobuf:"bytes,2,rep,name=comments,proto3" json:"comments,omitempty"` Builtin bool `protobuf:"varint,3,opt,name=builtin,proto3" json:"builtin,omitempty"` Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` Decls []*Decl `protobuf:"bytes,5,rep,name=decls,proto3" json:"decls,omitempty"` + Runtime *ModuleRuntime `protobuf:"bytes,31634,opt,name=runtime,proto3,oneof" json:"runtime,omitempty"` } func (x *Module) Reset() { @@ -2229,13 +2329,6 @@ func (*Module) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{30} } -func (x *Module) GetRuntime() *ModuleRuntime { - if x != nil { - return x.Runtime - } - return nil -} - func (x *Module) GetPos() *Position { if x != nil { return x.Pos @@ -2271,17 +2364,27 @@ func (x *Module) GetDecls() []*Decl { return nil } -type Optional struct { +func (x *Module) GetRuntime() *ModuleRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +type ModuleRuntime struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Type *Type `protobuf:"bytes,2,opt,name=type,proto3,oneof" json:"type,omitempty"` + CreateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=createTime,proto3" json:"createTime,omitempty"` + Language string `protobuf:"bytes,2,opt,name=language,proto3" json:"language,omitempty"` + MinReplicas int32 `protobuf:"varint,3,opt,name=minReplicas,proto3" json:"minReplicas,omitempty"` + Os *string `protobuf:"bytes,4,opt,name=os,proto3,oneof" json:"os,omitempty"` + Arch *string `protobuf:"bytes,5,opt,name=arch,proto3,oneof" json:"arch,omitempty"` } -func (x *Optional) Reset() { - *x = Optional{} +func (x *ModuleRuntime) Reset() { + *x = ModuleRuntime{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2289,13 +2392,13 @@ func (x *Optional) Reset() { } } -func (x *Optional) String() string { +func (x *ModuleRuntime) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Optional) ProtoMessage() {} +func (*ModuleRuntime) ProtoMessage() {} -func (x *Optional) ProtoReflect() protoreflect.Message { +func (x *ModuleRuntime) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2307,23 +2410,99 @@ func (x *Optional) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Optional.ProtoReflect.Descriptor instead. -func (*Optional) Descriptor() ([]byte, []int) { +// Deprecated: Use ModuleRuntime.ProtoReflect.Descriptor instead. +func (*ModuleRuntime) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{31} } -func (x *Optional) GetPos() *Position { +func (x *ModuleRuntime) GetCreateTime() *timestamppb.Timestamp { if x != nil { - return x.Pos + return x.CreateTime } return nil } -func (x *Optional) GetType() *Type { +func (x *ModuleRuntime) GetLanguage() string { if x != nil { - return x.Type + return x.Language } - return nil + return "" +} + +func (x *ModuleRuntime) GetMinReplicas() int32 { + if x != nil { + return x.MinReplicas + } + return 0 +} + +func (x *ModuleRuntime) GetOs() string { + if x != nil && x.Os != nil { + return *x.Os + } + return "" +} + +func (x *ModuleRuntime) GetArch() string { + if x != nil && x.Arch != nil { + return *x.Arch + } + return "" +} + +type Optional struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Type *Type `protobuf:"bytes,2,opt,name=type,proto3,oneof" json:"type,omitempty"` +} + +func (x *Optional) Reset() { + *x = Optional{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Optional) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Optional) ProtoMessage() {} + +func (x *Optional) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Optional.ProtoReflect.Descriptor instead. +func (*Optional) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{32} +} + +func (x *Optional) GetPos() *Position { + if x != nil { + return x.Pos + } + return nil +} + +func (x *Optional) GetType() *Type { + if x != nil { + return x.Type + } + return nil } type Position struct { @@ -2339,7 +2518,7 @@ type Position struct { func (x *Position) Reset() { *x = Position{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2352,7 +2531,7 @@ func (x *Position) String() string { func (*Position) ProtoMessage() {} func (x *Position) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2365,7 +2544,7 @@ func (x *Position) ProtoReflect() protoreflect.Message { // Deprecated: Use Position.ProtoReflect.Descriptor instead. func (*Position) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{32} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{33} } func (x *Position) GetFilename() string { @@ -2395,15 +2574,15 @@ type Ref struct { unknownFields protoimpl.UnknownFields Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Module string `protobuf:"bytes,3,opt,name=module,proto3" json:"module,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` TypeParameters []*Type `protobuf:"bytes,4,rep,name=typeParameters,proto3" json:"typeParameters,omitempty"` } func (x *Ref) Reset() { *x = Ref{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2416,7 +2595,7 @@ func (x *Ref) String() string { func (*Ref) ProtoMessage() {} func (x *Ref) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2429,7 +2608,7 @@ func (x *Ref) ProtoReflect() protoreflect.Message { // Deprecated: Use Ref.ProtoReflect.Descriptor instead. func (*Ref) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{33} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{34} } func (x *Ref) GetPos() *Position { @@ -2439,16 +2618,16 @@ func (x *Ref) GetPos() *Position { return nil } -func (x *Ref) GetName() string { +func (x *Ref) GetModule() string { if x != nil { - return x.Name + return x.Module } return "" } -func (x *Ref) GetModule() string { +func (x *Ref) GetName() string { if x != nil { - return x.Module + return x.Name } return "" } @@ -2472,7 +2651,7 @@ type Schema struct { func (x *Schema) Reset() { *x = Schema{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2485,7 +2664,7 @@ func (x *Schema) String() string { func (*Schema) ProtoMessage() {} func (x *Schema) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2498,7 +2677,7 @@ func (x *Schema) ProtoReflect() protoreflect.Message { // Deprecated: Use Schema.ProtoReflect.Descriptor instead. func (*Schema) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{34} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{35} } func (x *Schema) GetPos() *Position { @@ -2529,7 +2708,7 @@ type Secret struct { func (x *Secret) Reset() { *x = Secret{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2542,7 +2721,7 @@ func (x *Secret) String() string { func (*Secret) ProtoMessage() {} func (x *Secret) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2555,7 +2734,7 @@ func (x *Secret) ProtoReflect() protoreflect.Message { // Deprecated: Use Secret.ProtoReflect.Descriptor instead. func (*Secret) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{35} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{36} } func (x *Secret) GetPos() *Position { @@ -2597,7 +2776,7 @@ type String struct { func (x *String) Reset() { *x = String{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2610,7 +2789,7 @@ func (x *String) String() string { func (*String) ProtoMessage() {} func (x *String) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2623,7 +2802,7 @@ func (x *String) ProtoReflect() protoreflect.Message { // Deprecated: Use String.ProtoReflect.Descriptor instead. func (*String) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{36} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{37} } func (x *String) GetPos() *Position { @@ -2645,7 +2824,7 @@ type StringValue struct { func (x *StringValue) Reset() { *x = StringValue{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[37] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2658,7 +2837,7 @@ func (x *StringValue) String() string { func (*StringValue) ProtoMessage() {} func (x *StringValue) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[37] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2671,7 +2850,7 @@ func (x *StringValue) ProtoReflect() protoreflect.Message { // Deprecated: Use StringValue.ProtoReflect.Descriptor instead. func (*StringValue) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{37} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{38} } func (x *StringValue) GetPos() *Position { @@ -2702,7 +2881,7 @@ type Subscription struct { func (x *Subscription) Reset() { *x = Subscription{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[38] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2715,7 +2894,7 @@ func (x *Subscription) String() string { func (*Subscription) ProtoMessage() {} func (x *Subscription) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[38] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2728,7 +2907,7 @@ func (x *Subscription) ProtoReflect() protoreflect.Message { // Deprecated: Use Subscription.ProtoReflect.Descriptor instead. func (*Subscription) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{38} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{39} } func (x *Subscription) GetPos() *Position { @@ -2770,7 +2949,7 @@ type Time struct { func (x *Time) Reset() { *x = Time{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[39] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2783,7 +2962,7 @@ func (x *Time) String() string { func (*Time) ProtoMessage() {} func (x *Time) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[39] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2796,7 +2975,7 @@ func (x *Time) ProtoReflect() protoreflect.Message { // Deprecated: Use Time.ProtoReflect.Descriptor instead. func (*Time) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{39} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{40} } func (x *Time) GetPos() *Position { @@ -2821,7 +3000,7 @@ type Topic struct { func (x *Topic) Reset() { *x = Topic{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[40] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2834,7 +3013,7 @@ func (x *Topic) String() string { func (*Topic) ProtoMessage() {} func (x *Topic) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[40] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2847,7 +3026,7 @@ func (x *Topic) ProtoReflect() protoreflect.Message { // Deprecated: Use Topic.ProtoReflect.Descriptor instead. func (*Topic) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{40} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{41} } func (x *Topic) GetPos() *Position { @@ -2892,25 +3071,25 @@ type Type struct { // Types that are assignable to Value: // - // *Type_Int + // *Type_Any + // *Type_Array + // *Type_Bool + // *Type_Bytes // *Type_Float + // *Type_Int + // *Type_Map + // *Type_Optional + // *Type_Ref // *Type_String_ - // *Type_Bytes - // *Type_Bool // *Type_Time - // *Type_Array - // *Type_Map - // *Type_Any // *Type_Unit - // *Type_Ref - // *Type_Optional Value isType_Value `protobuf_oneof:"value"` } func (x *Type) Reset() { *x = Type{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2923,7 +3102,7 @@ func (x *Type) String() string { func (*Type) ProtoMessage() {} func (x *Type) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2936,7 +3115,7 @@ func (x *Type) ProtoReflect() protoreflect.Message { // Deprecated: Use Type.ProtoReflect.Descriptor instead. func (*Type) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{41} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{42} } func (m *Type) GetValue() isType_Value { @@ -2946,23 +3125,23 @@ func (m *Type) GetValue() isType_Value { return nil } -func (x *Type) GetInt() *Int { - if x, ok := x.GetValue().(*Type_Int); ok { - return x.Int +func (x *Type) GetAny() *Any { + if x, ok := x.GetValue().(*Type_Any); ok { + return x.Any } return nil } -func (x *Type) GetFloat() *Float { - if x, ok := x.GetValue().(*Type_Float); ok { - return x.Float +func (x *Type) GetArray() *Array { + if x, ok := x.GetValue().(*Type_Array); ok { + return x.Array } return nil } -func (x *Type) GetString_() *String { - if x, ok := x.GetValue().(*Type_String_); ok { - return x.String_ +func (x *Type) GetBool() *Bool { + if x, ok := x.GetValue().(*Type_Bool); ok { + return x.Bool } return nil } @@ -2974,58 +3153,58 @@ func (x *Type) GetBytes() *Bytes { return nil } -func (x *Type) GetBool() *Bool { - if x, ok := x.GetValue().(*Type_Bool); ok { - return x.Bool +func (x *Type) GetFloat() *Float { + if x, ok := x.GetValue().(*Type_Float); ok { + return x.Float } return nil } -func (x *Type) GetTime() *Time { - if x, ok := x.GetValue().(*Type_Time); ok { - return x.Time +func (x *Type) GetInt() *Int { + if x, ok := x.GetValue().(*Type_Int); ok { + return x.Int } return nil } -func (x *Type) GetArray() *Array { - if x, ok := x.GetValue().(*Type_Array); ok { - return x.Array +func (x *Type) GetMap() *Map { + if x, ok := x.GetValue().(*Type_Map); ok { + return x.Map } return nil } -func (x *Type) GetMap() *Map { - if x, ok := x.GetValue().(*Type_Map); ok { - return x.Map +func (x *Type) GetOptional() *Optional { + if x, ok := x.GetValue().(*Type_Optional); ok { + return x.Optional } return nil } -func (x *Type) GetAny() *Any { - if x, ok := x.GetValue().(*Type_Any); ok { - return x.Any +func (x *Type) GetRef() *Ref { + if x, ok := x.GetValue().(*Type_Ref); ok { + return x.Ref } return nil } -func (x *Type) GetUnit() *Unit { - if x, ok := x.GetValue().(*Type_Unit); ok { - return x.Unit +func (x *Type) GetString_() *String { + if x, ok := x.GetValue().(*Type_String_); ok { + return x.String_ } return nil } -func (x *Type) GetRef() *Ref { - if x, ok := x.GetValue().(*Type_Ref); ok { - return x.Ref +func (x *Type) GetTime() *Time { + if x, ok := x.GetValue().(*Type_Time); ok { + return x.Time } return nil } -func (x *Type) GetOptional() *Optional { - if x, ok := x.GetValue().(*Type_Optional); ok { - return x.Optional +func (x *Type) GetUnit() *Unit { + if x, ok := x.GetValue().(*Type_Unit); ok { + return x.Unit } return nil } @@ -3034,77 +3213,77 @@ type isType_Value interface { isType_Value() } -type Type_Int struct { - Int *Int `protobuf:"bytes,1,opt,name=int,proto3,oneof"` +type Type_Any struct { + Any *Any `protobuf:"bytes,1,opt,name=any,proto3,oneof"` } -type Type_Float struct { - Float *Float `protobuf:"bytes,2,opt,name=float,proto3,oneof"` +type Type_Array struct { + Array *Array `protobuf:"bytes,2,opt,name=array,proto3,oneof"` } -type Type_String_ struct { - String_ *String `protobuf:"bytes,3,opt,name=string,proto3,oneof"` +type Type_Bool struct { + Bool *Bool `protobuf:"bytes,3,opt,name=bool,proto3,oneof"` } type Type_Bytes struct { Bytes *Bytes `protobuf:"bytes,4,opt,name=bytes,proto3,oneof"` } -type Type_Bool struct { - Bool *Bool `protobuf:"bytes,5,opt,name=bool,proto3,oneof"` +type Type_Float struct { + Float *Float `protobuf:"bytes,5,opt,name=float,proto3,oneof"` } -type Type_Time struct { - Time *Time `protobuf:"bytes,6,opt,name=time,proto3,oneof"` +type Type_Int struct { + Int *Int `protobuf:"bytes,6,opt,name=int,proto3,oneof"` } -type Type_Array struct { - Array *Array `protobuf:"bytes,7,opt,name=array,proto3,oneof"` +type Type_Map struct { + Map *Map `protobuf:"bytes,7,opt,name=map,proto3,oneof"` } -type Type_Map struct { - Map *Map `protobuf:"bytes,8,opt,name=map,proto3,oneof"` +type Type_Optional struct { + Optional *Optional `protobuf:"bytes,8,opt,name=optional,proto3,oneof"` } -type Type_Any struct { - Any *Any `protobuf:"bytes,9,opt,name=any,proto3,oneof"` +type Type_Ref struct { + Ref *Ref `protobuf:"bytes,9,opt,name=ref,proto3,oneof"` } -type Type_Unit struct { - Unit *Unit `protobuf:"bytes,10,opt,name=unit,proto3,oneof"` +type Type_String_ struct { + String_ *String `protobuf:"bytes,10,opt,name=string,proto3,oneof"` } -type Type_Ref struct { - Ref *Ref `protobuf:"bytes,11,opt,name=ref,proto3,oneof"` +type Type_Time struct { + Time *Time `protobuf:"bytes,11,opt,name=time,proto3,oneof"` } -type Type_Optional struct { - Optional *Optional `protobuf:"bytes,12,opt,name=optional,proto3,oneof"` +type Type_Unit struct { + Unit *Unit `protobuf:"bytes,12,opt,name=unit,proto3,oneof"` } -func (*Type_Int) isType_Value() {} +func (*Type_Any) isType_Value() {} -func (*Type_Float) isType_Value() {} +func (*Type_Array) isType_Value() {} -func (*Type_String_) isType_Value() {} +func (*Type_Bool) isType_Value() {} func (*Type_Bytes) isType_Value() {} -func (*Type_Bool) isType_Value() {} - -func (*Type_Time) isType_Value() {} +func (*Type_Float) isType_Value() {} -func (*Type_Array) isType_Value() {} +func (*Type_Int) isType_Value() {} func (*Type_Map) isType_Value() {} -func (*Type_Any) isType_Value() {} - -func (*Type_Unit) isType_Value() {} +func (*Type_Optional) isType_Value() {} func (*Type_Ref) isType_Value() {} -func (*Type_Optional) isType_Value() {} +func (*Type_String_) isType_Value() {} + +func (*Type_Time) isType_Value() {} + +func (*Type_Unit) isType_Value() {} type TypeAlias struct { state protoimpl.MessageState @@ -3122,7 +3301,7 @@ type TypeAlias struct { func (x *TypeAlias) Reset() { *x = TypeAlias{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3135,7 +3314,7 @@ func (x *TypeAlias) String() string { func (*TypeAlias) ProtoMessage() {} func (x *TypeAlias) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3148,7 +3327,7 @@ func (x *TypeAlias) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeAlias.ProtoReflect.Descriptor instead. func (*TypeAlias) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{42} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{43} } func (x *TypeAlias) GetPos() *Position { @@ -3205,7 +3384,7 @@ type TypeParameter struct { func (x *TypeParameter) Reset() { *x = TypeParameter{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[43] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3218,7 +3397,7 @@ func (x *TypeParameter) String() string { func (*TypeParameter) ProtoMessage() {} func (x *TypeParameter) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[43] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3231,7 +3410,7 @@ func (x *TypeParameter) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeParameter.ProtoReflect.Descriptor instead. func (*TypeParameter) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{43} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{44} } func (x *TypeParameter) GetPos() *Position { @@ -3260,7 +3439,7 @@ type TypeValue struct { func (x *TypeValue) Reset() { *x = TypeValue{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[44] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3273,7 +3452,7 @@ func (x *TypeValue) String() string { func (*TypeValue) ProtoMessage() {} func (x *TypeValue) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[44] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3286,7 +3465,7 @@ func (x *TypeValue) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeValue.ProtoReflect.Descriptor instead. func (*TypeValue) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{44} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{45} } func (x *TypeValue) GetPos() *Position { @@ -3314,7 +3493,7 @@ type Unit struct { func (x *Unit) Reset() { *x = Unit{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[45] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3327,7 +3506,7 @@ func (x *Unit) String() string { func (*Unit) ProtoMessage() {} func (x *Unit) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[45] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3340,7 +3519,7 @@ func (x *Unit) ProtoReflect() protoreflect.Message { // Deprecated: Use Unit.ProtoReflect.Descriptor instead. func (*Unit) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{45} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{46} } func (x *Unit) GetPos() *Position { @@ -3357,8 +3536,8 @@ type Value struct { // Types that are assignable to Value: // - // *Value_StringValue // *Value_IntValue + // *Value_StringValue // *Value_TypeValue Value isValue_Value `protobuf_oneof:"value"` } @@ -3366,7 +3545,7 @@ type Value struct { func (x *Value) Reset() { *x = Value{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3379,7 +3558,7 @@ func (x *Value) String() string { func (*Value) ProtoMessage() {} func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3392,7 +3571,7 @@ func (x *Value) ProtoReflect() protoreflect.Message { // Deprecated: Use Value.ProtoReflect.Descriptor instead. func (*Value) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{46} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{47} } func (m *Value) GetValue() isValue_Value { @@ -3402,16 +3581,16 @@ func (m *Value) GetValue() isValue_Value { return nil } -func (x *Value) GetStringValue() *StringValue { - if x, ok := x.GetValue().(*Value_StringValue); ok { - return x.StringValue +func (x *Value) GetIntValue() *IntValue { + if x, ok := x.GetValue().(*Value_IntValue); ok { + return x.IntValue } return nil } -func (x *Value) GetIntValue() *IntValue { - if x, ok := x.GetValue().(*Value_IntValue); ok { - return x.IntValue +func (x *Value) GetStringValue() *StringValue { + if x, ok := x.GetValue().(*Value_StringValue); ok { + return x.StringValue } return nil } @@ -3427,22 +3606,22 @@ type isValue_Value interface { isValue_Value() } -type Value_StringValue struct { - StringValue *StringValue `protobuf:"bytes,1,opt,name=stringValue,proto3,oneof"` +type Value_IntValue struct { + IntValue *IntValue `protobuf:"bytes,1,opt,name=intValue,proto3,oneof"` } -type Value_IntValue struct { - IntValue *IntValue `protobuf:"bytes,2,opt,name=intValue,proto3,oneof"` +type Value_StringValue struct { + StringValue *StringValue `protobuf:"bytes,2,opt,name=stringValue,proto3,oneof"` } type Value_TypeValue struct { TypeValue *TypeValue `protobuf:"bytes,3,opt,name=typeValue,proto3,oneof"` } -func (*Value_StringValue) isValue_Value() {} - func (*Value_IntValue) isValue_Value() {} +func (*Value_StringValue) isValue_Value() {} + func (*Value_TypeValue) isValue_Value() {} type Verb struct { @@ -3450,7 +3629,6 @@ type Verb struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Runtime *VerbRuntime `protobuf:"bytes,31634,opt,name=runtime,proto3,oneof" json:"runtime,omitempty"` Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` Comments []string `protobuf:"bytes,2,rep,name=comments,proto3" json:"comments,omitempty"` Export bool `protobuf:"varint,3,opt,name=export,proto3" json:"export,omitempty"` @@ -3458,12 +3636,13 @@ type Verb struct { Request *Type `protobuf:"bytes,5,opt,name=request,proto3" json:"request,omitempty"` Response *Type `protobuf:"bytes,6,opt,name=response,proto3" json:"response,omitempty"` Metadata []*Metadata `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty"` + Runtime *VerbRuntime `protobuf:"bytes,31634,opt,name=runtime,proto3,oneof" json:"runtime,omitempty"` } func (x *Verb) Reset() { *x = Verb{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3476,7 +3655,7 @@ func (x *Verb) String() string { func (*Verb) ProtoMessage() {} func (x *Verb) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3489,14 +3668,7 @@ func (x *Verb) ProtoReflect() protoreflect.Message { // Deprecated: Use Verb.ProtoReflect.Descriptor instead. func (*Verb) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{47} -} - -func (x *Verb) GetRuntime() *VerbRuntime { - if x != nil { - return x.Runtime - } - return nil + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{48} } func (x *Verb) GetPos() *Position { @@ -3548,6 +3720,76 @@ func (x *Verb) GetMetadata() []*Metadata { return nil } +func (x *Verb) GetRuntime() *VerbRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +type VerbRuntime struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CreateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=createTime,proto3" json:"createTime,omitempty"` + StartTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=startTime,proto3" json:"startTime,omitempty"` + Status VerbStatus `protobuf:"varint,3,opt,name=status,proto3,enum=xyz.block.ftl.v1.schema.VerbStatus" json:"status,omitempty"` +} + +func (x *VerbRuntime) Reset() { + *x = VerbRuntime{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VerbRuntime) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VerbRuntime) ProtoMessage() {} + +func (x *VerbRuntime) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VerbRuntime.ProtoReflect.Descriptor instead. +func (*VerbRuntime) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{49} +} + +func (x *VerbRuntime) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *VerbRuntime) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *VerbRuntime) GetStatus() VerbStatus { + if x != nil { + return x.Status + } + return VerbStatus_VERB_STATUS_ERROR +} + var File_xyz_block_ftl_v1_schema_schema_proto protoreflect.FileDescriptor var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ @@ -3555,80 +3797,80 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, - 0x25, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, - 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x47, 0x0a, 0x03, 0x41, 0x6e, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 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, - 0x82, 0x01, 0x0a, 0x05, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 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, + 0x22, 0x47, 0x0a, 0x03, 0x41, 0x6e, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x82, 0x01, 0x0a, 0x05, 0x41, 0x72, + 0x72, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, + 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x48, + 0x0a, 0x04, 0x42, 0x6f, 0x6f, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x49, 0x0a, 0x05, 0x42, 0x79, 0x74, 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, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xad, 0x01, 0x0a, 0x06, 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, 0x76, 0x31, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, - 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x07, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x48, 0x0a, 0x04, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x38, 0x0a, 0x03, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0xd7, 0x02, 0x0a, 0x04, 0x44, 0x61, 0x74, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x49, - 0x0a, 0x05, 0x42, 0x79, 0x74, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xad, 0x01, 0x0a, 0x06, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xd7, 0x02, 0x0a, 0x04, 0x44, 0x61, - 0x74, 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, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x4e, 0x0a, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x52, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 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, 0x4e, + 0x0a, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x0e, + 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x36, + 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x90, 0x01, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 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, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, - 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe0, 0x04, 0x0a, 0x04, 0x44, 0x65, 0x63, 0x6c, 0x12, - 0x33, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x52, 0x06, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 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, 0x90, 0x01, + 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 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, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 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, 0xe0, 0x04, 0x0a, 0x04, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, - 0x62, 0x48, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x3f, 0x0a, 0x08, 0x64, 0x61, 0x74, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, 0x00, @@ -3636,378 +3878,497 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, - 0x42, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6c, - 0x69, 0x61, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x39, - 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, - 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x66, 0x73, 0x6d, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x46, 0x53, 0x4d, 0x48, 0x00, 0x52, 0x03, 0x66, 0x73, 0x6d, 0x12, 0x36, 0x0a, 0x05, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x12, 0x4b, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 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, - 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x93, 0x02, 0x0a, 0x04, 0x45, 0x6e, - 0x75, 0x6d, 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, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x36, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, - 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x08, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x6e, 0x74, 0x52, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x42, 0x06, - 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, - 0xb5, 0x01, 0x0a, 0x0b, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xb4, 0x02, 0x0a, 0x03, 0x46, 0x53, 0x4d, 0x12, - 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, + 0x30, 0x0a, 0x03, 0x66, 0x73, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x53, 0x4d, 0x48, 0x00, 0x52, 0x03, 0x66, 0x73, + 0x6d, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x0c, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 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, 0x12, 0x36, 0x0a, 0x05, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x48, 0x0a, - 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x53, 0x4d, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 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, 0xdb, - 0x01, 0x0a, 0x0d, 0x46, 0x53, 0x4d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 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, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x35, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, - 0x65, 0x66, 0x48, 0x01, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, - 0x02, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x70, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0xeb, 0x01, 0x0a, - 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 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, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x49, 0x0a, 0x05, 0x46, 0x6c, - 0x6f, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xe3, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x5d, - 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, - 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x63, 0x0a, - 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, - 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x12, 0x49, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 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, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x6c, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x47, 0x0a, 0x03, 0x49, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x03, + 0x6d, 0x61, 0x2e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x12, 0x42, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, + 0x79, 0x70, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, + 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x48, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x93, 0x02, 0x0a, 0x04, 0x45, 0x6e, 0x75, 0x6d, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x62, - 0x0a, 0x08, 0x49, 0x6e, 0x74, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, - 0x6f, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x03, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, - 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x03, 0x6b, 0x65, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, - 0x6f, 0x73, 0x22, 0x89, 0x05, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x3e, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x44, 0x0a, 0x07, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 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, 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, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x3e, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 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, 0x36, + 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, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x01, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x40, 0x0a, 0x08, 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, + 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x52, 0x08, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x6e, 0x74, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, + 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x0b, 0x45, 0x6e, + 0x75, 0x6d, 0x56, 0x61, 0x72, 0x69, 0x61, 0x6e, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 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, + 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, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, + 0x73, 0x22, 0xb4, 0x02, 0x0a, 0x03, 0x46, 0x53, 0x4d, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, 0x79, 0x48, 0x00, - 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 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, + 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, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x48, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x44, 0x0a, 0x07, 0x74, 0x79, 0x70, 0x65, 0x4d, 0x61, - 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x53, 0x4d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xdb, 0x01, 0x0a, 0x0d, 0x46, 0x53, 0x4d, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 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, 0x12, 0x47, 0x0a, 0x08, - 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x61, 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, 0x35, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7b, - 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, - 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 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, 0x85, 0x01, 0x0a, 0x0d, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x38, 0x0a, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x01, 0x52, 0x04, + 0x66, 0x72, 0x6f, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, + 0x66, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x07, 0x0a, + 0x05, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0xeb, 0x01, 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, + 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, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x49, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0xe3, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, + 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x5d, 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, + 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, + 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x63, 0x0a, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, + 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x12, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, + 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, + 0x73, 0x22, 0x6c, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 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, + 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, + 0x47, 0x0a, 0x03, 0x49, 0x6e, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x62, 0x0a, 0x08, 0x49, 0x6e, 0x74, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xad, 0x01, 0x0a, + 0x03, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x03, 0x6b, 0x65, 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, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x89, 0x05, 0x0a, + 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x05, 0x61, 0x6c, 0x69, + 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x41, 0x6c, 0x69, 0x61, 0x73, + 0x48, 0x00, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x3e, 0x0a, 0x05, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x48, 0x00, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x44, 0x0a, 0x07, 0x63, 0x72, 0x6f, + 0x6e, 0x4a, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 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, + 0x68, 0x65, 0x6d, 0x61, 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, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x3e, 0x0a, 0x05, 0x72, 0x65, + 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, + 0x79, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x74, 0x72, 0x79, 0x12, 0x4d, 0x0a, 0x0a, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x44, 0x0a, 0x07, 0x74, 0x79, 0x70, + 0x65, 0x4d, 0x61, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, + 0x52, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xf9, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, - 0x42, 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, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, - 0x42, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 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, 0x6a, - 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, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 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, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xf9, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x42, + 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, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x42, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 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, 0x6a, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x8d, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 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, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4e, 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, 0x9e, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x8d, 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, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x4e, 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, 0x9e, 0x02, 0x0a, 0x06, 0x4d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x47, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x48, 0x00, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x38, - 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, + 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, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x05, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x12, 0x47, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 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, 0xc7, 0x01, 0x0a, 0x0d, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 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, 0x20, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x13, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x02, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x61, + 0x72, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x04, 0x61, 0x72, 0x63, + 0x68, 0x88, 0x01, 0x01, 0x42, 0x05, 0x0a, 0x03, 0x5f, 0x6f, 0x73, 0x42, 0x07, 0x0a, 0x05, 0x5f, + 0x61, 0x72, 0x63, 0x68, 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, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 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, 0xba, 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, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x45, 0x0a, 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 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, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 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, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, - 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, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x65, 0x63, 0x6c, - 0x52, 0x05, 0x64, 0x65, 0x63, 0x6c, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, - 0x69, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x8d, 0x01, 0x0a, 0x08, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, + 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, - 0xba, 0x01, 0x0a, 0x03, 0x52, 0x65, 0x66, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, + 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 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, 0x45, 0x0a, - 0x0e, 0x74, 0x79, 0x70, 0x65, 0x50, 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, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 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, 0xb4, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 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, 0x76, + 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x32, 0x0a, 0x05, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 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, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, + 0x73, 0x22, 0xc6, 0x01, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 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, 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xb4, 0x01, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x9a, 0x05, 0x0a, 0x04, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x61, 0x6e, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, + 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x48, 0x00, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 0x12, 0x33, 0x0a, + 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x03, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x6d, 0x61, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, - 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 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, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x61, 0x70, 0x48, + 0x00, 0x52, 0x03, 0x6d, 0x61, 0x70, 0x12, 0x3f, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 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, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, + 0x65, 0x66, 0x48, 0x00, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 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, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x75, 0x6e, 0x69, + 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xc6, 0x01, 0x0a, 0x05, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 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, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0xdf, 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, + 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 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, 0x42, 0x0a, 0x09, + 0x74, 0x79, 0x70, 0x65, 0x56, 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, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1a, 0x0a, 0x08, @@ -4015,134 +4376,54 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, - 0x73, 0x22, 0x9a, 0x05, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, 0x74, 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, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x48, 0x00, 0x52, 0x05, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 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, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x18, + 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, - 0x42, 0x6f, 0x6f, 0x6c, 0x48, 0x00, 0x52, 0x04, 0x62, 0x6f, 0x6f, 0x6c, 0x12, 0x33, 0x0a, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, + 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, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x69, 0x6d, - 0x65, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x41, 0x72, 0x72, 0x61, 0x79, - 0x48, 0x00, 0x52, 0x05, 0x61, 0x72, 0x72, 0x61, 0x79, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4d, 0x61, 0x70, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x61, 0x70, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 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, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x6e, - 0x69, 0x74, 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, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, - 0x03, 0x72, 0x65, 0x66, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x61, 0x6c, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 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, + 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 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, 0xdf, - 0x01, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 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, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x3f, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x56, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x56, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 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, 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, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, - 0x6d, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, - 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, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x01, 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, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 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, + 0x68, 0x65, 0x6d, 0x61, 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, 0xc0, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 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, 0x38, + 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 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, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, - 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x4e, 0x50, 0x01, 0x5a, 0x4a, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, - 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, - 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x3b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x6d, 0x61, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x20, 0x0a, 0x09, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x4b, 0x69, + 0x6e, 0x64, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x4c, 0x49, 0x41, 0x53, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x2a, 0xa1, 0x01, 0x0a, 0x0a, 0x56, 0x65, 0x72, 0x62, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x45, 0x52, 0x42, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x17, 0x0a, + 0x13, 0x56, 0x45, 0x52, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x46, 0x46, + 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x56, 0x45, 0x52, 0x42, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4f, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x18, + 0x0a, 0x14, 0x56, 0x45, 0x52, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, + 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x56, 0x45, 0x52, 0x42, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x18, 0x0a, 0x14, 0x56, 0x45, 0x52, 0x42, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x42, 0x4e, 0x50, 0x01, 0x5a, + 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, + 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x3b, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -4157,179 +4438,188 @@ func file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP() []byte { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescData } -var file_xyz_block_ftl_v1_schema_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_xyz_block_ftl_v1_schema_schema_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_xyz_block_ftl_v1_schema_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 50) var file_xyz_block_ftl_v1_schema_schema_proto_goTypes = []any{ - (*Any)(nil), // 0: xyz.block.ftl.v1.schema.Any - (*Array)(nil), // 1: xyz.block.ftl.v1.schema.Array - (*Bool)(nil), // 2: xyz.block.ftl.v1.schema.Bool - (*Bytes)(nil), // 3: xyz.block.ftl.v1.schema.Bytes - (*Config)(nil), // 4: xyz.block.ftl.v1.schema.Config - (*Data)(nil), // 5: xyz.block.ftl.v1.schema.Data - (*Database)(nil), // 6: xyz.block.ftl.v1.schema.Database - (*Decl)(nil), // 7: xyz.block.ftl.v1.schema.Decl - (*Enum)(nil), // 8: xyz.block.ftl.v1.schema.Enum - (*EnumVariant)(nil), // 9: xyz.block.ftl.v1.schema.EnumVariant - (*FSM)(nil), // 10: xyz.block.ftl.v1.schema.FSM - (*FSMTransition)(nil), // 11: xyz.block.ftl.v1.schema.FSMTransition - (*Field)(nil), // 12: xyz.block.ftl.v1.schema.Field - (*Float)(nil), // 13: xyz.block.ftl.v1.schema.Float - (*IngressPathComponent)(nil), // 14: xyz.block.ftl.v1.schema.IngressPathComponent - (*IngressPathLiteral)(nil), // 15: xyz.block.ftl.v1.schema.IngressPathLiteral - (*IngressPathParameter)(nil), // 16: xyz.block.ftl.v1.schema.IngressPathParameter - (*Int)(nil), // 17: xyz.block.ftl.v1.schema.Int - (*IntValue)(nil), // 18: xyz.block.ftl.v1.schema.IntValue - (*Map)(nil), // 19: xyz.block.ftl.v1.schema.Map - (*Metadata)(nil), // 20: xyz.block.ftl.v1.schema.Metadata - (*MetadataAlias)(nil), // 21: xyz.block.ftl.v1.schema.MetadataAlias - (*MetadataCalls)(nil), // 22: xyz.block.ftl.v1.schema.MetadataCalls - (*MetadataCronJob)(nil), // 23: xyz.block.ftl.v1.schema.MetadataCronJob - (*MetadataDatabases)(nil), // 24: xyz.block.ftl.v1.schema.MetadataDatabases - (*MetadataEncoding)(nil), // 25: xyz.block.ftl.v1.schema.MetadataEncoding - (*MetadataIngress)(nil), // 26: xyz.block.ftl.v1.schema.MetadataIngress - (*MetadataRetry)(nil), // 27: xyz.block.ftl.v1.schema.MetadataRetry - (*MetadataSubscriber)(nil), // 28: xyz.block.ftl.v1.schema.MetadataSubscriber - (*MetadataTypeMap)(nil), // 29: xyz.block.ftl.v1.schema.MetadataTypeMap - (*Module)(nil), // 30: xyz.block.ftl.v1.schema.Module - (*Optional)(nil), // 31: xyz.block.ftl.v1.schema.Optional - (*Position)(nil), // 32: xyz.block.ftl.v1.schema.Position - (*Ref)(nil), // 33: xyz.block.ftl.v1.schema.Ref - (*Schema)(nil), // 34: xyz.block.ftl.v1.schema.Schema - (*Secret)(nil), // 35: xyz.block.ftl.v1.schema.Secret - (*String)(nil), // 36: xyz.block.ftl.v1.schema.String - (*StringValue)(nil), // 37: xyz.block.ftl.v1.schema.StringValue - (*Subscription)(nil), // 38: xyz.block.ftl.v1.schema.Subscription - (*Time)(nil), // 39: xyz.block.ftl.v1.schema.Time - (*Topic)(nil), // 40: xyz.block.ftl.v1.schema.Topic - (*Type)(nil), // 41: xyz.block.ftl.v1.schema.Type - (*TypeAlias)(nil), // 42: xyz.block.ftl.v1.schema.TypeAlias - (*TypeParameter)(nil), // 43: xyz.block.ftl.v1.schema.TypeParameter - (*TypeValue)(nil), // 44: xyz.block.ftl.v1.schema.TypeValue - (*Unit)(nil), // 45: xyz.block.ftl.v1.schema.Unit - (*Value)(nil), // 46: xyz.block.ftl.v1.schema.Value - (*Verb)(nil), // 47: xyz.block.ftl.v1.schema.Verb - (*ModuleRuntime)(nil), // 48: xyz.block.ftl.v1.schema.ModuleRuntime - (*VerbRuntime)(nil), // 49: xyz.block.ftl.v1.schema.VerbRuntime + (AliasKind)(0), // 0: xyz.block.ftl.v1.schema.AliasKind + (VerbStatus)(0), // 1: xyz.block.ftl.v1.schema.VerbStatus + (*Any)(nil), // 2: xyz.block.ftl.v1.schema.Any + (*Array)(nil), // 3: xyz.block.ftl.v1.schema.Array + (*Bool)(nil), // 4: xyz.block.ftl.v1.schema.Bool + (*Bytes)(nil), // 5: xyz.block.ftl.v1.schema.Bytes + (*Config)(nil), // 6: xyz.block.ftl.v1.schema.Config + (*Data)(nil), // 7: xyz.block.ftl.v1.schema.Data + (*Database)(nil), // 8: xyz.block.ftl.v1.schema.Database + (*Decl)(nil), // 9: xyz.block.ftl.v1.schema.Decl + (*Enum)(nil), // 10: xyz.block.ftl.v1.schema.Enum + (*EnumVariant)(nil), // 11: xyz.block.ftl.v1.schema.EnumVariant + (*FSM)(nil), // 12: xyz.block.ftl.v1.schema.FSM + (*FSMTransition)(nil), // 13: xyz.block.ftl.v1.schema.FSMTransition + (*Field)(nil), // 14: xyz.block.ftl.v1.schema.Field + (*Float)(nil), // 15: xyz.block.ftl.v1.schema.Float + (*IngressPathComponent)(nil), // 16: xyz.block.ftl.v1.schema.IngressPathComponent + (*IngressPathLiteral)(nil), // 17: xyz.block.ftl.v1.schema.IngressPathLiteral + (*IngressPathParameter)(nil), // 18: xyz.block.ftl.v1.schema.IngressPathParameter + (*Int)(nil), // 19: xyz.block.ftl.v1.schema.Int + (*IntValue)(nil), // 20: xyz.block.ftl.v1.schema.IntValue + (*Map)(nil), // 21: xyz.block.ftl.v1.schema.Map + (*Metadata)(nil), // 22: xyz.block.ftl.v1.schema.Metadata + (*MetadataAlias)(nil), // 23: xyz.block.ftl.v1.schema.MetadataAlias + (*MetadataCalls)(nil), // 24: xyz.block.ftl.v1.schema.MetadataCalls + (*MetadataCronJob)(nil), // 25: xyz.block.ftl.v1.schema.MetadataCronJob + (*MetadataDatabases)(nil), // 26: xyz.block.ftl.v1.schema.MetadataDatabases + (*MetadataEncoding)(nil), // 27: xyz.block.ftl.v1.schema.MetadataEncoding + (*MetadataIngress)(nil), // 28: xyz.block.ftl.v1.schema.MetadataIngress + (*MetadataRetry)(nil), // 29: xyz.block.ftl.v1.schema.MetadataRetry + (*MetadataSubscriber)(nil), // 30: xyz.block.ftl.v1.schema.MetadataSubscriber + (*MetadataTypeMap)(nil), // 31: xyz.block.ftl.v1.schema.MetadataTypeMap + (*Module)(nil), // 32: xyz.block.ftl.v1.schema.Module + (*ModuleRuntime)(nil), // 33: xyz.block.ftl.v1.schema.ModuleRuntime + (*Optional)(nil), // 34: xyz.block.ftl.v1.schema.Optional + (*Position)(nil), // 35: xyz.block.ftl.v1.schema.Position + (*Ref)(nil), // 36: xyz.block.ftl.v1.schema.Ref + (*Schema)(nil), // 37: xyz.block.ftl.v1.schema.Schema + (*Secret)(nil), // 38: xyz.block.ftl.v1.schema.Secret + (*String)(nil), // 39: xyz.block.ftl.v1.schema.String + (*StringValue)(nil), // 40: xyz.block.ftl.v1.schema.StringValue + (*Subscription)(nil), // 41: xyz.block.ftl.v1.schema.Subscription + (*Time)(nil), // 42: xyz.block.ftl.v1.schema.Time + (*Topic)(nil), // 43: xyz.block.ftl.v1.schema.Topic + (*Type)(nil), // 44: xyz.block.ftl.v1.schema.Type + (*TypeAlias)(nil), // 45: xyz.block.ftl.v1.schema.TypeAlias + (*TypeParameter)(nil), // 46: xyz.block.ftl.v1.schema.TypeParameter + (*TypeValue)(nil), // 47: xyz.block.ftl.v1.schema.TypeValue + (*Unit)(nil), // 48: xyz.block.ftl.v1.schema.Unit + (*Value)(nil), // 49: xyz.block.ftl.v1.schema.Value + (*Verb)(nil), // 50: xyz.block.ftl.v1.schema.Verb + (*VerbRuntime)(nil), // 51: xyz.block.ftl.v1.schema.VerbRuntime + (*timestamppb.Timestamp)(nil), // 52: google.protobuf.Timestamp } var file_xyz_block_ftl_v1_schema_schema_proto_depIdxs = []int32{ - 32, // 0: xyz.block.ftl.v1.schema.Any.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 1: xyz.block.ftl.v1.schema.Array.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 2: xyz.block.ftl.v1.schema.Array.element:type_name -> xyz.block.ftl.v1.schema.Type - 32, // 3: xyz.block.ftl.v1.schema.Bool.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 4: xyz.block.ftl.v1.schema.Bytes.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 5: xyz.block.ftl.v1.schema.Config.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 6: xyz.block.ftl.v1.schema.Config.type:type_name -> xyz.block.ftl.v1.schema.Type - 32, // 7: xyz.block.ftl.v1.schema.Data.pos:type_name -> xyz.block.ftl.v1.schema.Position - 43, // 8: xyz.block.ftl.v1.schema.Data.typeParameters:type_name -> xyz.block.ftl.v1.schema.TypeParameter - 12, // 9: xyz.block.ftl.v1.schema.Data.fields:type_name -> xyz.block.ftl.v1.schema.Field - 20, // 10: xyz.block.ftl.v1.schema.Data.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 32, // 11: xyz.block.ftl.v1.schema.Database.pos:type_name -> xyz.block.ftl.v1.schema.Position - 5, // 12: xyz.block.ftl.v1.schema.Decl.data:type_name -> xyz.block.ftl.v1.schema.Data - 47, // 13: xyz.block.ftl.v1.schema.Decl.verb:type_name -> xyz.block.ftl.v1.schema.Verb - 6, // 14: xyz.block.ftl.v1.schema.Decl.database:type_name -> xyz.block.ftl.v1.schema.Database - 8, // 15: xyz.block.ftl.v1.schema.Decl.enum:type_name -> xyz.block.ftl.v1.schema.Enum - 42, // 16: xyz.block.ftl.v1.schema.Decl.typeAlias:type_name -> xyz.block.ftl.v1.schema.TypeAlias - 4, // 17: xyz.block.ftl.v1.schema.Decl.config:type_name -> xyz.block.ftl.v1.schema.Config - 35, // 18: xyz.block.ftl.v1.schema.Decl.secret:type_name -> xyz.block.ftl.v1.schema.Secret - 10, // 19: xyz.block.ftl.v1.schema.Decl.fsm:type_name -> xyz.block.ftl.v1.schema.FSM - 40, // 20: xyz.block.ftl.v1.schema.Decl.topic:type_name -> xyz.block.ftl.v1.schema.Topic - 38, // 21: xyz.block.ftl.v1.schema.Decl.subscription:type_name -> xyz.block.ftl.v1.schema.Subscription - 32, // 22: xyz.block.ftl.v1.schema.Enum.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 23: xyz.block.ftl.v1.schema.Enum.type:type_name -> xyz.block.ftl.v1.schema.Type - 9, // 24: xyz.block.ftl.v1.schema.Enum.variants:type_name -> xyz.block.ftl.v1.schema.EnumVariant - 32, // 25: xyz.block.ftl.v1.schema.EnumVariant.pos:type_name -> xyz.block.ftl.v1.schema.Position - 46, // 26: xyz.block.ftl.v1.schema.EnumVariant.value:type_name -> xyz.block.ftl.v1.schema.Value - 32, // 27: xyz.block.ftl.v1.schema.FSM.pos:type_name -> xyz.block.ftl.v1.schema.Position - 33, // 28: xyz.block.ftl.v1.schema.FSM.start:type_name -> xyz.block.ftl.v1.schema.Ref - 11, // 29: xyz.block.ftl.v1.schema.FSM.transitions:type_name -> xyz.block.ftl.v1.schema.FSMTransition - 20, // 30: xyz.block.ftl.v1.schema.FSM.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 32, // 31: xyz.block.ftl.v1.schema.FSMTransition.pos:type_name -> xyz.block.ftl.v1.schema.Position - 33, // 32: xyz.block.ftl.v1.schema.FSMTransition.from:type_name -> xyz.block.ftl.v1.schema.Ref - 33, // 33: xyz.block.ftl.v1.schema.FSMTransition.to:type_name -> xyz.block.ftl.v1.schema.Ref - 32, // 34: xyz.block.ftl.v1.schema.Field.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 35: xyz.block.ftl.v1.schema.Field.type:type_name -> xyz.block.ftl.v1.schema.Type - 20, // 36: xyz.block.ftl.v1.schema.Field.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 32, // 37: xyz.block.ftl.v1.schema.Float.pos:type_name -> xyz.block.ftl.v1.schema.Position - 15, // 38: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathLiteral:type_name -> xyz.block.ftl.v1.schema.IngressPathLiteral - 16, // 39: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathParameter:type_name -> xyz.block.ftl.v1.schema.IngressPathParameter - 32, // 40: xyz.block.ftl.v1.schema.IngressPathLiteral.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 41: xyz.block.ftl.v1.schema.IngressPathParameter.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 42: xyz.block.ftl.v1.schema.Int.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 43: xyz.block.ftl.v1.schema.IntValue.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 44: xyz.block.ftl.v1.schema.Map.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 45: xyz.block.ftl.v1.schema.Map.key:type_name -> xyz.block.ftl.v1.schema.Type - 41, // 46: xyz.block.ftl.v1.schema.Map.value:type_name -> xyz.block.ftl.v1.schema.Type - 22, // 47: xyz.block.ftl.v1.schema.Metadata.calls:type_name -> xyz.block.ftl.v1.schema.MetadataCalls - 26, // 48: xyz.block.ftl.v1.schema.Metadata.ingress:type_name -> xyz.block.ftl.v1.schema.MetadataIngress - 23, // 49: xyz.block.ftl.v1.schema.Metadata.cronJob:type_name -> xyz.block.ftl.v1.schema.MetadataCronJob - 24, // 50: xyz.block.ftl.v1.schema.Metadata.databases:type_name -> xyz.block.ftl.v1.schema.MetadataDatabases - 21, // 51: xyz.block.ftl.v1.schema.Metadata.alias:type_name -> xyz.block.ftl.v1.schema.MetadataAlias - 27, // 52: xyz.block.ftl.v1.schema.Metadata.retry:type_name -> xyz.block.ftl.v1.schema.MetadataRetry - 28, // 53: xyz.block.ftl.v1.schema.Metadata.subscriber:type_name -> xyz.block.ftl.v1.schema.MetadataSubscriber - 29, // 54: xyz.block.ftl.v1.schema.Metadata.typeMap:type_name -> xyz.block.ftl.v1.schema.MetadataTypeMap - 25, // 55: xyz.block.ftl.v1.schema.Metadata.encoding:type_name -> xyz.block.ftl.v1.schema.MetadataEncoding - 32, // 56: xyz.block.ftl.v1.schema.MetadataAlias.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 57: xyz.block.ftl.v1.schema.MetadataCalls.pos:type_name -> xyz.block.ftl.v1.schema.Position - 33, // 58: xyz.block.ftl.v1.schema.MetadataCalls.calls:type_name -> xyz.block.ftl.v1.schema.Ref - 32, // 59: xyz.block.ftl.v1.schema.MetadataCronJob.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 60: xyz.block.ftl.v1.schema.MetadataDatabases.pos:type_name -> xyz.block.ftl.v1.schema.Position - 33, // 61: xyz.block.ftl.v1.schema.MetadataDatabases.calls:type_name -> xyz.block.ftl.v1.schema.Ref - 32, // 62: xyz.block.ftl.v1.schema.MetadataEncoding.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 63: xyz.block.ftl.v1.schema.MetadataIngress.pos:type_name -> xyz.block.ftl.v1.schema.Position - 14, // 64: xyz.block.ftl.v1.schema.MetadataIngress.path:type_name -> xyz.block.ftl.v1.schema.IngressPathComponent - 32, // 65: xyz.block.ftl.v1.schema.MetadataRetry.pos:type_name -> xyz.block.ftl.v1.schema.Position - 33, // 66: xyz.block.ftl.v1.schema.MetadataRetry.catch:type_name -> xyz.block.ftl.v1.schema.Ref - 32, // 67: xyz.block.ftl.v1.schema.MetadataSubscriber.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 68: xyz.block.ftl.v1.schema.MetadataTypeMap.pos:type_name -> xyz.block.ftl.v1.schema.Position - 48, // 69: xyz.block.ftl.v1.schema.Module.runtime:type_name -> xyz.block.ftl.v1.schema.ModuleRuntime - 32, // 70: xyz.block.ftl.v1.schema.Module.pos:type_name -> xyz.block.ftl.v1.schema.Position - 7, // 71: xyz.block.ftl.v1.schema.Module.decls:type_name -> xyz.block.ftl.v1.schema.Decl - 32, // 72: xyz.block.ftl.v1.schema.Optional.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 73: xyz.block.ftl.v1.schema.Optional.type:type_name -> xyz.block.ftl.v1.schema.Type - 32, // 74: xyz.block.ftl.v1.schema.Ref.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 75: xyz.block.ftl.v1.schema.Ref.typeParameters:type_name -> xyz.block.ftl.v1.schema.Type - 32, // 76: xyz.block.ftl.v1.schema.Schema.pos:type_name -> xyz.block.ftl.v1.schema.Position - 30, // 77: xyz.block.ftl.v1.schema.Schema.modules:type_name -> xyz.block.ftl.v1.schema.Module - 32, // 78: xyz.block.ftl.v1.schema.Secret.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 79: xyz.block.ftl.v1.schema.Secret.type:type_name -> xyz.block.ftl.v1.schema.Type - 32, // 80: xyz.block.ftl.v1.schema.String.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 81: xyz.block.ftl.v1.schema.StringValue.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 82: xyz.block.ftl.v1.schema.Subscription.pos:type_name -> xyz.block.ftl.v1.schema.Position - 33, // 83: xyz.block.ftl.v1.schema.Subscription.topic:type_name -> xyz.block.ftl.v1.schema.Ref - 32, // 84: xyz.block.ftl.v1.schema.Time.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 85: xyz.block.ftl.v1.schema.Topic.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 86: xyz.block.ftl.v1.schema.Topic.event:type_name -> xyz.block.ftl.v1.schema.Type - 17, // 87: xyz.block.ftl.v1.schema.Type.int:type_name -> xyz.block.ftl.v1.schema.Int - 13, // 88: xyz.block.ftl.v1.schema.Type.float:type_name -> xyz.block.ftl.v1.schema.Float - 36, // 89: xyz.block.ftl.v1.schema.Type.string:type_name -> xyz.block.ftl.v1.schema.String - 3, // 90: xyz.block.ftl.v1.schema.Type.bytes:type_name -> xyz.block.ftl.v1.schema.Bytes - 2, // 91: xyz.block.ftl.v1.schema.Type.bool:type_name -> xyz.block.ftl.v1.schema.Bool - 39, // 92: xyz.block.ftl.v1.schema.Type.time:type_name -> xyz.block.ftl.v1.schema.Time - 1, // 93: xyz.block.ftl.v1.schema.Type.array:type_name -> xyz.block.ftl.v1.schema.Array - 19, // 94: xyz.block.ftl.v1.schema.Type.map:type_name -> xyz.block.ftl.v1.schema.Map - 0, // 95: xyz.block.ftl.v1.schema.Type.any:type_name -> xyz.block.ftl.v1.schema.Any - 45, // 96: xyz.block.ftl.v1.schema.Type.unit:type_name -> xyz.block.ftl.v1.schema.Unit - 33, // 97: xyz.block.ftl.v1.schema.Type.ref:type_name -> xyz.block.ftl.v1.schema.Ref - 31, // 98: xyz.block.ftl.v1.schema.Type.optional:type_name -> xyz.block.ftl.v1.schema.Optional - 32, // 99: xyz.block.ftl.v1.schema.TypeAlias.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 100: xyz.block.ftl.v1.schema.TypeAlias.type:type_name -> xyz.block.ftl.v1.schema.Type - 20, // 101: xyz.block.ftl.v1.schema.TypeAlias.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 32, // 102: xyz.block.ftl.v1.schema.TypeParameter.pos:type_name -> xyz.block.ftl.v1.schema.Position - 32, // 103: xyz.block.ftl.v1.schema.TypeValue.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 104: xyz.block.ftl.v1.schema.TypeValue.value:type_name -> xyz.block.ftl.v1.schema.Type - 32, // 105: xyz.block.ftl.v1.schema.Unit.pos:type_name -> xyz.block.ftl.v1.schema.Position - 37, // 106: xyz.block.ftl.v1.schema.Value.stringValue:type_name -> xyz.block.ftl.v1.schema.StringValue - 18, // 107: xyz.block.ftl.v1.schema.Value.intValue:type_name -> xyz.block.ftl.v1.schema.IntValue - 44, // 108: xyz.block.ftl.v1.schema.Value.typeValue:type_name -> xyz.block.ftl.v1.schema.TypeValue - 49, // 109: xyz.block.ftl.v1.schema.Verb.runtime:type_name -> xyz.block.ftl.v1.schema.VerbRuntime - 32, // 110: xyz.block.ftl.v1.schema.Verb.pos:type_name -> xyz.block.ftl.v1.schema.Position - 41, // 111: xyz.block.ftl.v1.schema.Verb.request:type_name -> xyz.block.ftl.v1.schema.Type - 41, // 112: xyz.block.ftl.v1.schema.Verb.response:type_name -> xyz.block.ftl.v1.schema.Type - 20, // 113: xyz.block.ftl.v1.schema.Verb.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 114, // [114:114] is the sub-list for method output_type - 114, // [114:114] is the sub-list for method input_type - 114, // [114:114] is the sub-list for extension type_name - 114, // [114:114] is the sub-list for extension extendee - 0, // [0:114] is the sub-list for field type_name + 35, // 0: xyz.block.ftl.v1.schema.Any.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 1: xyz.block.ftl.v1.schema.Array.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 2: xyz.block.ftl.v1.schema.Array.element:type_name -> xyz.block.ftl.v1.schema.Type + 35, // 3: xyz.block.ftl.v1.schema.Bool.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 4: xyz.block.ftl.v1.schema.Bytes.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 5: xyz.block.ftl.v1.schema.Config.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 6: xyz.block.ftl.v1.schema.Config.type:type_name -> xyz.block.ftl.v1.schema.Type + 35, // 7: xyz.block.ftl.v1.schema.Data.pos:type_name -> xyz.block.ftl.v1.schema.Position + 46, // 8: xyz.block.ftl.v1.schema.Data.typeParameters:type_name -> xyz.block.ftl.v1.schema.TypeParameter + 14, // 9: xyz.block.ftl.v1.schema.Data.fields:type_name -> xyz.block.ftl.v1.schema.Field + 22, // 10: xyz.block.ftl.v1.schema.Data.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 35, // 11: xyz.block.ftl.v1.schema.Database.pos:type_name -> xyz.block.ftl.v1.schema.Position + 6, // 12: xyz.block.ftl.v1.schema.Decl.config:type_name -> xyz.block.ftl.v1.schema.Config + 7, // 13: xyz.block.ftl.v1.schema.Decl.data:type_name -> xyz.block.ftl.v1.schema.Data + 8, // 14: xyz.block.ftl.v1.schema.Decl.database:type_name -> xyz.block.ftl.v1.schema.Database + 10, // 15: xyz.block.ftl.v1.schema.Decl.enum:type_name -> xyz.block.ftl.v1.schema.Enum + 12, // 16: xyz.block.ftl.v1.schema.Decl.fsm:type_name -> xyz.block.ftl.v1.schema.FSM + 38, // 17: xyz.block.ftl.v1.schema.Decl.secret:type_name -> xyz.block.ftl.v1.schema.Secret + 41, // 18: xyz.block.ftl.v1.schema.Decl.subscription:type_name -> xyz.block.ftl.v1.schema.Subscription + 43, // 19: xyz.block.ftl.v1.schema.Decl.topic:type_name -> xyz.block.ftl.v1.schema.Topic + 45, // 20: xyz.block.ftl.v1.schema.Decl.typeAlias:type_name -> xyz.block.ftl.v1.schema.TypeAlias + 50, // 21: xyz.block.ftl.v1.schema.Decl.verb:type_name -> xyz.block.ftl.v1.schema.Verb + 35, // 22: xyz.block.ftl.v1.schema.Enum.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 23: xyz.block.ftl.v1.schema.Enum.type:type_name -> xyz.block.ftl.v1.schema.Type + 11, // 24: xyz.block.ftl.v1.schema.Enum.variants:type_name -> xyz.block.ftl.v1.schema.EnumVariant + 35, // 25: xyz.block.ftl.v1.schema.EnumVariant.pos:type_name -> xyz.block.ftl.v1.schema.Position + 49, // 26: xyz.block.ftl.v1.schema.EnumVariant.value:type_name -> xyz.block.ftl.v1.schema.Value + 35, // 27: xyz.block.ftl.v1.schema.FSM.pos:type_name -> xyz.block.ftl.v1.schema.Position + 22, // 28: xyz.block.ftl.v1.schema.FSM.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 36, // 29: xyz.block.ftl.v1.schema.FSM.start:type_name -> xyz.block.ftl.v1.schema.Ref + 13, // 30: xyz.block.ftl.v1.schema.FSM.transitions:type_name -> xyz.block.ftl.v1.schema.FSMTransition + 35, // 31: xyz.block.ftl.v1.schema.FSMTransition.pos:type_name -> xyz.block.ftl.v1.schema.Position + 36, // 32: xyz.block.ftl.v1.schema.FSMTransition.from:type_name -> xyz.block.ftl.v1.schema.Ref + 36, // 33: xyz.block.ftl.v1.schema.FSMTransition.to:type_name -> xyz.block.ftl.v1.schema.Ref + 35, // 34: xyz.block.ftl.v1.schema.Field.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 35: xyz.block.ftl.v1.schema.Field.type:type_name -> xyz.block.ftl.v1.schema.Type + 22, // 36: xyz.block.ftl.v1.schema.Field.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 35, // 37: xyz.block.ftl.v1.schema.Float.pos:type_name -> xyz.block.ftl.v1.schema.Position + 17, // 38: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathLiteral:type_name -> xyz.block.ftl.v1.schema.IngressPathLiteral + 18, // 39: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathParameter:type_name -> xyz.block.ftl.v1.schema.IngressPathParameter + 35, // 40: xyz.block.ftl.v1.schema.IngressPathLiteral.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 41: xyz.block.ftl.v1.schema.IngressPathParameter.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 42: xyz.block.ftl.v1.schema.Int.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 43: xyz.block.ftl.v1.schema.IntValue.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 44: xyz.block.ftl.v1.schema.Map.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 45: xyz.block.ftl.v1.schema.Map.key:type_name -> xyz.block.ftl.v1.schema.Type + 44, // 46: xyz.block.ftl.v1.schema.Map.value:type_name -> xyz.block.ftl.v1.schema.Type + 23, // 47: xyz.block.ftl.v1.schema.Metadata.alias:type_name -> xyz.block.ftl.v1.schema.MetadataAlias + 24, // 48: xyz.block.ftl.v1.schema.Metadata.calls:type_name -> xyz.block.ftl.v1.schema.MetadataCalls + 25, // 49: xyz.block.ftl.v1.schema.Metadata.cronJob:type_name -> xyz.block.ftl.v1.schema.MetadataCronJob + 26, // 50: xyz.block.ftl.v1.schema.Metadata.databases:type_name -> xyz.block.ftl.v1.schema.MetadataDatabases + 27, // 51: xyz.block.ftl.v1.schema.Metadata.encoding:type_name -> xyz.block.ftl.v1.schema.MetadataEncoding + 28, // 52: xyz.block.ftl.v1.schema.Metadata.ingress:type_name -> xyz.block.ftl.v1.schema.MetadataIngress + 29, // 53: xyz.block.ftl.v1.schema.Metadata.retry:type_name -> xyz.block.ftl.v1.schema.MetadataRetry + 30, // 54: xyz.block.ftl.v1.schema.Metadata.subscriber:type_name -> xyz.block.ftl.v1.schema.MetadataSubscriber + 31, // 55: xyz.block.ftl.v1.schema.Metadata.typeMap:type_name -> xyz.block.ftl.v1.schema.MetadataTypeMap + 35, // 56: xyz.block.ftl.v1.schema.MetadataAlias.pos:type_name -> xyz.block.ftl.v1.schema.Position + 0, // 57: xyz.block.ftl.v1.schema.MetadataAlias.kind:type_name -> xyz.block.ftl.v1.schema.AliasKind + 35, // 58: xyz.block.ftl.v1.schema.MetadataCalls.pos:type_name -> xyz.block.ftl.v1.schema.Position + 36, // 59: xyz.block.ftl.v1.schema.MetadataCalls.calls:type_name -> xyz.block.ftl.v1.schema.Ref + 35, // 60: xyz.block.ftl.v1.schema.MetadataCronJob.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 61: xyz.block.ftl.v1.schema.MetadataDatabases.pos:type_name -> xyz.block.ftl.v1.schema.Position + 36, // 62: xyz.block.ftl.v1.schema.MetadataDatabases.calls:type_name -> xyz.block.ftl.v1.schema.Ref + 35, // 63: xyz.block.ftl.v1.schema.MetadataEncoding.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 64: xyz.block.ftl.v1.schema.MetadataIngress.pos:type_name -> xyz.block.ftl.v1.schema.Position + 16, // 65: xyz.block.ftl.v1.schema.MetadataIngress.path:type_name -> xyz.block.ftl.v1.schema.IngressPathComponent + 35, // 66: xyz.block.ftl.v1.schema.MetadataRetry.pos:type_name -> xyz.block.ftl.v1.schema.Position + 36, // 67: xyz.block.ftl.v1.schema.MetadataRetry.catch:type_name -> xyz.block.ftl.v1.schema.Ref + 35, // 68: xyz.block.ftl.v1.schema.MetadataSubscriber.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 69: xyz.block.ftl.v1.schema.MetadataTypeMap.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 70: xyz.block.ftl.v1.schema.Module.pos:type_name -> xyz.block.ftl.v1.schema.Position + 9, // 71: xyz.block.ftl.v1.schema.Module.decls:type_name -> xyz.block.ftl.v1.schema.Decl + 33, // 72: xyz.block.ftl.v1.schema.Module.runtime:type_name -> xyz.block.ftl.v1.schema.ModuleRuntime + 52, // 73: xyz.block.ftl.v1.schema.ModuleRuntime.createTime:type_name -> google.protobuf.Timestamp + 35, // 74: xyz.block.ftl.v1.schema.Optional.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 75: xyz.block.ftl.v1.schema.Optional.type:type_name -> xyz.block.ftl.v1.schema.Type + 35, // 76: xyz.block.ftl.v1.schema.Ref.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 77: xyz.block.ftl.v1.schema.Ref.typeParameters:type_name -> xyz.block.ftl.v1.schema.Type + 35, // 78: xyz.block.ftl.v1.schema.Schema.pos:type_name -> xyz.block.ftl.v1.schema.Position + 32, // 79: xyz.block.ftl.v1.schema.Schema.modules:type_name -> xyz.block.ftl.v1.schema.Module + 35, // 80: xyz.block.ftl.v1.schema.Secret.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 81: xyz.block.ftl.v1.schema.Secret.type:type_name -> xyz.block.ftl.v1.schema.Type + 35, // 82: xyz.block.ftl.v1.schema.String.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 83: xyz.block.ftl.v1.schema.StringValue.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 84: xyz.block.ftl.v1.schema.Subscription.pos:type_name -> xyz.block.ftl.v1.schema.Position + 36, // 85: xyz.block.ftl.v1.schema.Subscription.topic:type_name -> xyz.block.ftl.v1.schema.Ref + 35, // 86: xyz.block.ftl.v1.schema.Time.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 87: xyz.block.ftl.v1.schema.Topic.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 88: xyz.block.ftl.v1.schema.Topic.event:type_name -> xyz.block.ftl.v1.schema.Type + 2, // 89: xyz.block.ftl.v1.schema.Type.any:type_name -> xyz.block.ftl.v1.schema.Any + 3, // 90: xyz.block.ftl.v1.schema.Type.array:type_name -> xyz.block.ftl.v1.schema.Array + 4, // 91: xyz.block.ftl.v1.schema.Type.bool:type_name -> xyz.block.ftl.v1.schema.Bool + 5, // 92: xyz.block.ftl.v1.schema.Type.bytes:type_name -> xyz.block.ftl.v1.schema.Bytes + 15, // 93: xyz.block.ftl.v1.schema.Type.float:type_name -> xyz.block.ftl.v1.schema.Float + 19, // 94: xyz.block.ftl.v1.schema.Type.int:type_name -> xyz.block.ftl.v1.schema.Int + 21, // 95: xyz.block.ftl.v1.schema.Type.map:type_name -> xyz.block.ftl.v1.schema.Map + 34, // 96: xyz.block.ftl.v1.schema.Type.optional:type_name -> xyz.block.ftl.v1.schema.Optional + 36, // 97: xyz.block.ftl.v1.schema.Type.ref:type_name -> xyz.block.ftl.v1.schema.Ref + 39, // 98: xyz.block.ftl.v1.schema.Type.string:type_name -> xyz.block.ftl.v1.schema.String + 42, // 99: xyz.block.ftl.v1.schema.Type.time:type_name -> xyz.block.ftl.v1.schema.Time + 48, // 100: xyz.block.ftl.v1.schema.Type.unit:type_name -> xyz.block.ftl.v1.schema.Unit + 35, // 101: xyz.block.ftl.v1.schema.TypeAlias.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 102: xyz.block.ftl.v1.schema.TypeAlias.type:type_name -> xyz.block.ftl.v1.schema.Type + 22, // 103: xyz.block.ftl.v1.schema.TypeAlias.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 35, // 104: xyz.block.ftl.v1.schema.TypeParameter.pos:type_name -> xyz.block.ftl.v1.schema.Position + 35, // 105: xyz.block.ftl.v1.schema.TypeValue.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 106: xyz.block.ftl.v1.schema.TypeValue.value:type_name -> xyz.block.ftl.v1.schema.Type + 35, // 107: xyz.block.ftl.v1.schema.Unit.pos:type_name -> xyz.block.ftl.v1.schema.Position + 20, // 108: xyz.block.ftl.v1.schema.Value.intValue:type_name -> xyz.block.ftl.v1.schema.IntValue + 40, // 109: xyz.block.ftl.v1.schema.Value.stringValue:type_name -> xyz.block.ftl.v1.schema.StringValue + 47, // 110: xyz.block.ftl.v1.schema.Value.typeValue:type_name -> xyz.block.ftl.v1.schema.TypeValue + 35, // 111: xyz.block.ftl.v1.schema.Verb.pos:type_name -> xyz.block.ftl.v1.schema.Position + 44, // 112: xyz.block.ftl.v1.schema.Verb.request:type_name -> xyz.block.ftl.v1.schema.Type + 44, // 113: xyz.block.ftl.v1.schema.Verb.response:type_name -> xyz.block.ftl.v1.schema.Type + 22, // 114: xyz.block.ftl.v1.schema.Verb.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 51, // 115: xyz.block.ftl.v1.schema.Verb.runtime:type_name -> xyz.block.ftl.v1.schema.VerbRuntime + 52, // 116: xyz.block.ftl.v1.schema.VerbRuntime.createTime:type_name -> google.protobuf.Timestamp + 52, // 117: xyz.block.ftl.v1.schema.VerbRuntime.startTime:type_name -> google.protobuf.Timestamp + 1, // 118: xyz.block.ftl.v1.schema.VerbRuntime.status:type_name -> xyz.block.ftl.v1.schema.VerbStatus + 119, // [119:119] is the sub-list for method output_type + 119, // [119:119] is the sub-list for method input_type + 119, // [119:119] is the sub-list for extension type_name + 119, // [119:119] is the sub-list for extension extendee + 0, // [0:119] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_schema_schema_proto_init() } @@ -4337,7 +4627,6 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { if File_xyz_block_ftl_v1_schema_schema_proto != nil { return } - file_xyz_block_ftl_v1_schema_runtime_proto_init() if !protoimpl.UnsafeEnabled { file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Any); i { @@ -4712,7 +5001,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*Optional); i { + switch v := v.(*ModuleRuntime); i { case 0: return &v.state case 1: @@ -4724,7 +5013,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*Position); i { + switch v := v.(*Optional); i { case 0: return &v.state case 1: @@ -4736,7 +5025,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*Ref); i { + switch v := v.(*Position); i { case 0: return &v.state case 1: @@ -4748,7 +5037,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*Schema); i { + switch v := v.(*Ref); i { case 0: return &v.state case 1: @@ -4760,7 +5049,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*Secret); i { + switch v := v.(*Schema); i { case 0: return &v.state case 1: @@ -4772,7 +5061,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*String); i { + switch v := v.(*Secret); i { case 0: return &v.state case 1: @@ -4784,7 +5073,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*StringValue); i { + switch v := v.(*String); i { case 0: return &v.state case 1: @@ -4796,7 +5085,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*Subscription); i { + switch v := v.(*StringValue); i { case 0: return &v.state case 1: @@ -4808,7 +5097,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*Time); i { + switch v := v.(*Subscription); i { case 0: return &v.state case 1: @@ -4820,7 +5109,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*Topic); i { + switch v := v.(*Time); i { case 0: return &v.state case 1: @@ -4832,7 +5121,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*Type); i { + switch v := v.(*Topic); i { case 0: return &v.state case 1: @@ -4844,7 +5133,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*TypeAlias); i { + switch v := v.(*Type); i { case 0: return &v.state case 1: @@ -4856,7 +5145,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*TypeParameter); i { + switch v := v.(*TypeAlias); i { case 0: return &v.state case 1: @@ -4868,7 +5157,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*TypeValue); i { + switch v := v.(*TypeParameter); i { case 0: return &v.state case 1: @@ -4880,7 +5169,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*Unit); i { + switch v := v.(*TypeValue); i { case 0: return &v.state case 1: @@ -4892,7 +5181,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*Value); i { + switch v := v.(*Unit); i { case 0: return &v.state case 1: @@ -4904,6 +5193,18 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47].Exporter = func(v any, i int) any { + switch v := v.(*Value); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*Verb); i { case 0: return &v.state @@ -4915,6 +5216,18 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { return nil } } + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[49].Exporter = func(v any, i int) any { + switch v := v.(*VerbRuntime); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[0].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[1].OneofWrappers = []any{} @@ -4924,16 +5237,16 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[5].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[6].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[7].OneofWrappers = []any{ + (*Decl_Config)(nil), (*Decl_Data)(nil), - (*Decl_Verb)(nil), (*Decl_Database)(nil), (*Decl_Enum)(nil), - (*Decl_TypeAlias)(nil), - (*Decl_Config)(nil), - (*Decl_Secret)(nil), (*Decl_Fsm)(nil), - (*Decl_Topic)(nil), + (*Decl_Secret)(nil), (*Decl_Subscription)(nil), + (*Decl_Topic)(nil), + (*Decl_TypeAlias)(nil), + (*Decl_Verb)(nil), } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[8].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[9].OneofWrappers = []any{} @@ -4951,15 +5264,15 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[18].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[19].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[20].OneofWrappers = []any{ + (*Metadata_Alias)(nil), (*Metadata_Calls)(nil), - (*Metadata_Ingress)(nil), (*Metadata_CronJob)(nil), (*Metadata_Databases)(nil), - (*Metadata_Alias)(nil), + (*Metadata_Encoding)(nil), + (*Metadata_Ingress)(nil), (*Metadata_Retry)(nil), (*Metadata_Subscriber)(nil), (*Metadata_TypeMap)(nil), - (*Metadata_Encoding)(nil), } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[21].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[22].OneofWrappers = []any{} @@ -4972,7 +5285,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[29].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[30].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[31].OneofWrappers = []any{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[33].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[34].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[35].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[36].OneofWrappers = []any{} @@ -4980,42 +5293,44 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[38].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[39].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[40].OneofWrappers = []any{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41].OneofWrappers = []any{ - (*Type_Int)(nil), + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[41].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42].OneofWrappers = []any{ + (*Type_Any)(nil), + (*Type_Array)(nil), + (*Type_Bool)(nil), + (*Type_Bytes)(nil), (*Type_Float)(nil), + (*Type_Int)(nil), + (*Type_Map)(nil), + (*Type_Optional)(nil), + (*Type_Ref)(nil), (*Type_String_)(nil), - (*Type_Bytes)(nil), - (*Type_Bool)(nil), (*Type_Time)(nil), - (*Type_Array)(nil), - (*Type_Map)(nil), - (*Type_Any)(nil), (*Type_Unit)(nil), - (*Type_Ref)(nil), - (*Type_Optional)(nil), } - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[42].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[43].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[44].OneofWrappers = []any{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[45].OneofWrappers = []any{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46].OneofWrappers = []any{ - (*Value_StringValue)(nil), + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[46].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47].OneofWrappers = []any{ (*Value_IntValue)(nil), + (*Value_StringValue)(nil), (*Value_TypeValue)(nil), } - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[47].OneofWrappers = []any{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[48].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_schema_schema_proto_rawDesc, - NumEnums: 0, - NumMessages: 48, + NumEnums: 2, + NumMessages: 50, NumExtensions: 0, NumServices: 0, }, GoTypes: file_xyz_block_ftl_v1_schema_schema_proto_goTypes, DependencyIndexes: file_xyz_block_ftl_v1_schema_schema_proto_depIdxs, + EnumInfos: file_xyz_block_ftl_v1_schema_schema_proto_enumTypes, MessageInfos: file_xyz_block_ftl_v1_schema_schema_proto_msgTypes, }.Build() File_xyz_block_ftl_v1_schema_schema_proto = out.File diff --git a/backend/protos/xyz/block/ftl/v1/schema/schema.proto b/backend/protos/xyz/block/ftl/v1/schema/schema.proto index fb7ad24238..06412b6dd4 100644 --- a/backend/protos/xyz/block/ftl/v1/schema/schema.proto +++ b/backend/protos/xyz/block/ftl/v1/schema/schema.proto @@ -1,13 +1,16 @@ syntax = "proto3"; -// This file is generated by github.com/TBD54566975/ftl/internal/schema/protobuf.go, DO NOT MODIFY package xyz.block.ftl.v1.schema; -import "xyz/block/ftl/v1/schema/runtime.proto"; +import "google/protobuf/timestamp.proto"; option go_package = "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema;schemapb"; option java_multiple_files = true; +enum AliasKind { + ALIAS_KIND_JSON = 0; +} + message Any { optional Position pos = 1; } @@ -45,22 +48,22 @@ message Data { message Database { optional Position pos = 1; repeated string comments = 2; - string name = 3; string type = 4; + string name = 3; } message Decl { oneof value { - Data data = 1; - Verb verb = 2; + Config config = 1; + Data data = 2; Database database = 3; Enum enum = 4; - TypeAlias typeAlias = 5; - Config config = 6; - Secret secret = 7; - FSM fsm = 8; - Topic topic = 9; - Subscription subscription = 10; + FSM fsm = 5; + Secret secret = 6; + Subscription subscription = 7; + Topic topic = 8; + TypeAlias typeAlias = 9; + Verb verb = 10; } } @@ -84,9 +87,9 @@ message FSM { optional Position pos = 1; repeated string comments = 2; string name = 3; + repeated Metadata metadata = 6; repeated Ref start = 4; repeated FSMTransition transitions = 5; - repeated Metadata metadata = 6; } message FSMTransition { @@ -98,8 +101,8 @@ message FSMTransition { message Field { optional Position pos = 1; - string name = 2; repeated string comments = 3; + string name = 2; Type type = 4; repeated Metadata metadata = 5; } @@ -142,21 +145,21 @@ message Map { message Metadata { oneof value { - MetadataCalls calls = 1; - MetadataIngress ingress = 2; + MetadataAlias alias = 1; + MetadataCalls calls = 2; MetadataCronJob cronJob = 3; MetadataDatabases databases = 4; - MetadataAlias alias = 5; - MetadataRetry retry = 6; - MetadataSubscriber subscriber = 7; - MetadataTypeMap typeMap = 8; - MetadataEncoding encoding = 9; + MetadataEncoding encoding = 5; + MetadataIngress ingress = 6; + MetadataRetry retry = 7; + MetadataSubscriber subscriber = 8; + MetadataTypeMap typeMap = 9; } } message MetadataAlias { optional Position pos = 1; - int64 kind = 2; + AliasKind kind = 2; string alias = 3; } @@ -208,13 +211,20 @@ message MetadataTypeMap { } message Module { - optional ModuleRuntime runtime = 31634; - optional Position pos = 1; repeated string comments = 2; bool builtin = 3; string name = 4; repeated Decl decls = 5; + optional ModuleRuntime runtime = 31634; +} + +message ModuleRuntime { + google.protobuf.Timestamp createTime = 1; + string language = 2; + int32 minReplicas = 3; + optional string os = 4; + optional string arch = 5; } message Optional { @@ -230,8 +240,8 @@ message Position { message Ref { optional Position pos = 1; - string name = 2; string module = 3; + string name = 2; repeated Type typeParameters = 4; } @@ -277,18 +287,18 @@ message Topic { message Type { oneof value { - Int int = 1; - Float float = 2; - String string = 3; + Any any = 1; + Array array = 2; + Bool bool = 3; Bytes bytes = 4; - Bool bool = 5; - Time time = 6; - Array array = 7; - Map map = 8; - Any any = 9; - Unit unit = 10; - Ref ref = 11; - Optional optional = 12; + Float float = 5; + Int int = 6; + Map map = 7; + Optional optional = 8; + Ref ref = 9; + String string = 10; + Time time = 11; + Unit unit = 12; } } @@ -317,15 +327,13 @@ message Unit { message Value { oneof value { - StringValue stringValue = 1; - IntValue intValue = 2; + IntValue intValue = 1; + StringValue stringValue = 2; TypeValue typeValue = 3; } } message Verb { - optional VerbRuntime runtime = 31634; - optional Position pos = 1; repeated string comments = 2; bool export = 3; @@ -333,4 +341,20 @@ message Verb { Type request = 5; Type response = 6; repeated Metadata metadata = 7; + optional VerbRuntime runtime = 31634; +} + +message VerbRuntime { + google.protobuf.Timestamp createTime = 1; + google.protobuf.Timestamp startTime = 2; + VerbStatus status = 3; +} + +enum VerbStatus { + VERB_STATUS_ERROR = 0; + VERB_STATUS_OFFLINE = 1; + VERB_STATUS_ONLINE = 2; + VERB_STATUS_STARTING = 3; + VERB_STATUS_STOPPED = 4; + VERB_STATUS_STOPPING = 5; } diff --git a/cmd/ftl-schema/main.go b/cmd/ftl-schema/main.go deleted file mode 100644 index 845833bea2..0000000000 --- a/cmd/ftl-schema/main.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/TBD54566975/ftl/internal/schema" -) - -func main() { - fmt.Println(schema.ProtobufSchema()) -} diff --git a/cmd/go2proto/main.go b/cmd/go2proto/main.go new file mode 100644 index 0000000000..e463a2739b --- /dev/null +++ b/cmd/go2proto/main.go @@ -0,0 +1,411 @@ +package main + +import ( + "errors" + "fmt" + "go/token" + "go/types" + "maps" + "os" + "reflect" + "slices" + "sort" + "strconv" + "strings" + "text/template" + + "github.com/alecthomas/kong" + "golang.org/x/tools/go/packages" + + "github.com/TBD54566975/ftl/internal/schema/strcase" +) + +type Config struct { + Output string `help:"Output file to write generated protobuf schema to." short:"o"` + Imports []string `help:"Additional imports to include in the generated protobuf schema." short:"I"` + GoPackage string `help:"Go package to use in the generated protobuf schema." short:"g"` + + Package string `arg:"" help:"Package name to use in the generated protobuf schema."` + Ref []string `arg:"" help:"Type to generate protobuf schema from in the form PKG.TYPE. eg. github.com/foo/bar.Waz" required:"true" placeholder:"PKG.TYPE"` +} + +func main() { + fset := token.NewFileSet() + cli := Config{} + kctx := kong.Parse(&cli) + + out := os.Stdout + if cli.Output != "" { + var err error + out, err = os.Create(cli.Output + "~") + kctx.FatalIfErrorf(err) + } + + var resolved *PkgRefs + for _, ref := range cli.Ref { + parts := strings.Split(ref, ".") + pkg := strings.Join(parts[:len(parts)-1], ".") + if resolved != nil && resolved.path != pkg { + kctx.Fatalf("only a single package is supported") + } else if resolved == nil { + resolved = &PkgRefs{ref: ref, path: pkg} + } + resolved.refs = append(resolved.refs, parts[len(parts)-1]) + } + pkgs, err := packages.Load(&packages.Config{ + Fset: fset, + Mode: packages.NeedTypes | packages.NeedTypesInfo | packages.NeedDeps | packages.NeedImports | packages.NeedSyntax | packages.NeedFiles | packages.NeedName, + }, resolved.path) + kctx.FatalIfErrorf(err) + for _, pkg := range pkgs { + resolved.pkg = pkg + if len(pkg.Errors) > 0 { + fmt.Fprintf(os.Stderr, "go2proto: warning: %s\n", pkg.Errors[0]) + break + } + } + if resolved.pkg.Types == nil { + kctx.Fatalf("package %s had fatal errors, cannot continue", resolved.path) + } + + err = generate(out, cli, resolved) + if gerr := new(GenError); errors.As(err, &gerr) { + pos := fset.Position(gerr.pos) + kctx.Fatalf("%s:%d: %s", pos.Filename, pos.Line, err) + } else { + kctx.FatalIfErrorf(err) + } + + err = os.Rename(cli.Output+"~", cli.Output) + kctx.FatalIfErrorf(err) +} + +type GenError struct { + pos token.Pos + err error +} + +func (g GenError) Error() string { return g.err.Error() } +func (g GenError) Unwrap() error { return g.err } + +type PkgRefs struct { + path string + ref string + refs []string + pkg *packages.Package +} + +type State struct { + Config + Decls map[string]string + Renamed map[string]string + // Key is the name of the type, value is the names of the types it is a sum type of. + Pkg *packages.Package +} + +func (s State) String() string { + w := &strings.Builder{} + for _, name := range slices.Sorted(maps.Keys(s.Decls)) { + w.WriteString(s.Decls[name]) + } + return w.String() +} + +func genErrorf(pos token.Pos, format string, args ...any) error { + err := fmt.Errorf(format, args...) + if gerr := new(GenError); errors.As(err, &gerr) { + return &GenError{pos: gerr.pos, err: err} + } + return &GenError{pos: pos, err: err} +} + +var tmpl = template.Must(template.New("proto"). + Parse(` +syntax = "proto3"; + +package {{ .Package }}; +{{ range .Imports }} +import "{{.}}"; +{{- end}} +{{ if .GoPackage }} +option go_package = "{{ .GoPackage }}"; +{{ end -}} +option java_multiple_files = true; + +{{ range $name, $decl := .Decls }} +{{- $decl }} +{{ end}} +`)) + +func generate(out *os.File, config Config, pkg *PkgRefs) error { + state := State{ + Config: config, + Decls: map[string]string{}, + Renamed: map[string]string{}, + Pkg: pkg.pkg, + } + for _, sym := range pkg.refs { + obj := pkg.pkg.Types.Scope().Lookup(sym) + if obj == nil { + return fmt.Errorf("%s: not found in package %s", sym, pkg.pkg.ID) + } + if err := state.generateType(obj, obj.Type()); err != nil { + return fmt.Errorf("%s: %w", sym, err) + } + } + if err := tmpl.Execute(out, state); err != nil { + return fmt.Errorf("template error: %w", err) + } + return nil +} + +func (s *State) resolve(name string) (resolvedName string, ok bool) { + resolvedName, ok = s.Renamed[name] + if ok { + name = resolvedName + } + _, ok = s.Decls[name] + return name, ok +} + +func (s *State) addImport(name string) { + for _, imp := range s.Imports { + if imp == name { + return + } + } + s.Imports = append(s.Imports, name) +} + +func (s *State) generateType(obj types.Object, t types.Type) error { + switch t := t.(type) { + case *types.Named: + if t.TypeParams() != nil { + return genErrorf(obj.Pos(), "generic types are not supported") + } + switch u := t.Underlying().(type) { + case *types.Struct: + if err := s.extractStruct(t, u); err != nil { + return genErrorf(obj.Pos(), "%w", err) + } + return nil + + case *types.Interface: + return s.extractSumType(t.Obj(), u) + + case *types.Basic: + return s.extractEnum(t) + + default: + return genErrorf(obj.Pos(), "unsupported named type %T", u) + } + + case *types.Basic: + return nil + + case *types.Slice: + return s.generateType(obj, t.Elem()) + + case *types.Pointer: + return s.generateType(obj, t.Elem()) + + case *types.Interface: + return genErrorf(obj.Pos(), "unnamed interfaces are not supported") + + default: + return genErrorf(obj.Pos(), "unsupported type %T", obj.Type()) + } +} + +type builtinType struct { + ref string + path string +} + +var builtinTypes = map[string]builtinType{ + "time.Time": {"google.protobuf.Timestamp", "google/protobuf/timestamp.proto"}, + "time.Duration": {"google.protobuf.Duration", "google/protobuf/duration.proto"}, +} + +func (s *State) extractStruct(n *types.Named, t *types.Struct) error { + if imp, ok := builtinTypes[n.String()]; ok { + s.addImport(imp.path) + return nil + } + + name, ok := s.resolve(n.Obj().Name()) + if ok { + return nil + } + s.Decls[name] = "" + w := &strings.Builder{} + fmt.Fprintf(w, "message %s {\n", name) + for i := range t.NumFields() { + field := t.Field(i) + pb := reflect.StructTag(t.Tag(i)).Get("protobuf") + if pb == "-" { + continue + } else if pb == "" { + return genErrorf(n.Obj().Pos(), "%s: missing protobuf tag", field.Name()) + } + tag, err := parsePBTag(pb) + if err != nil { + return genErrorf(n.Obj().Pos(), "%s: %w", field.Name(), err) + } + prefix := "" + if tag.Optional { + prefix = "optional " + } + if err := s.generateType(field, field.Type()); err != nil { + return fmt.Errorf("%s: %w", field.Name(), err) + } + fmt.Fprintf(w, " %s%s %s = %d;\n", prefix, typeRef(field.Type()), strcase.ToLowerCamel(field.Name()), tag.ID) + } + fmt.Fprintf(w, "}\n") + s.Decls[name] = w.String() + return nil +} + +func (s *State) extractSumType(obj types.Object, i *types.Interface) error { + sumTypeName, ok := s.resolve(obj.Name()) + if ok { + return nil + } + s.Decls[sumTypeName] = "" + w := &strings.Builder{} + sums := []string{} + fmt.Fprintf(w, "message %s {\n", sumTypeName) + fmt.Fprintf(w, " oneof value {\n") + scope := s.Pkg.Types.Scope() + for _, name := range scope.Names() { + sym := scope.Lookup(name) + if sym == obj { + continue + } + if types.Implements(sym.Type(), i) || types.Implements(types.NewPointer(sym.Type()), i) { + if err := s.generateType(sym, sym.Type()); err != nil { + return genErrorf(sym.Pos(), "%s: %w", name, err) + } + sums = append(sums, name) + } + } + // The ID's we generate here aren't stable. Not sure what to do about that, but for now we just sort them and deal with + // the backwards incompatibility. The buf linter will pick this up in PRs though. + sort.Strings(sums) + for i, sum := range sums { + fieldName := strcase.ToLowerCamel(strings.TrimPrefix(sum, sumTypeName)) + fmt.Fprintf(w, " %s %s = %d;\n", sum, fieldName, i+1) + } + fmt.Fprintf(w, " }\n") + fmt.Fprintf(w, "}\n") + s.Decls[sumTypeName] = w.String() + return nil +} + +func (s *State) extractEnum(t *types.Named) error { + enumName, ok := s.resolve(t.Obj().Name()) + if ok { + return nil + } + s.Decls[enumName] = "" + w := &strings.Builder{} + enums := map[string]int{} + fmt.Fprintf(w, "enum %s {\n", enumName) + scope := s.Pkg.Types.Scope() + for _, name := range scope.Names() { + sym := scope.Lookup(name) + if sym == t.Obj() || sym.Type() != t { + continue + } + c, ok := sym.(*types.Const) + if !ok { + return genErrorf(sym.Pos(), "expected const") + } + n, err := strconv.Atoi(c.Val().String()) + if err != nil { + return genErrorf(sym.Pos(), "enum value %q must be a constant integer: %w", c.Val(), err) + } + if strcase.ToUpperCamel(name) != name { + return genErrorf(sym.Pos(), "enum value %q must be upper camel case %q", name, strcase.ToUpperCamel(name)) + } + if !strings.HasPrefix(name, enumName) { + return genErrorf(sym.Pos(), "enum value %q must start with %q", name, enumName) + } + enums[name] = n + } + for i, sum := range slices.Sorted(maps.Keys(enums)) { + fmt.Fprintf(w, " %s = %d;\n", strcase.ToUpperSnake(sum), i) + } + fmt.Fprintf(w, "}\n") + s.Decls[enumName] = w.String() + return nil +} + +type pbTag struct { + ID int + Optional bool +} + +func parsePBTag(tag string) (pbTag, error) { + parts := strings.Split(tag, ",") + if len(parts) == 0 { + return pbTag{}, fmt.Errorf("missing tag") + } + id, err := strconv.Atoi(parts[0]) + if err != nil { + return pbTag{}, fmt.Errorf("invalid id: %w", err) + } + out := pbTag{ID: id} + for _, part := range parts[1:] { + switch part { + case "optional": + out.Optional = true + + default: + return pbTag{}, fmt.Errorf("unknown tag: %s", tag) + } + } + return out, nil +} + +func typeRef(t types.Type) string { + switch t := t.(type) { + case *types.Named: + ref := t.Obj().Pkg().Path() + "." + t.Obj().Name() + if t, ok := builtinTypes[ref]; ok { + return t.ref + } + return t.Obj().Name() + + case *types.Slice: + if t.Elem().String() == "byte" { + return "bytes" + } + return "repeated " + typeRef(t.Elem()) + + case *types.Pointer: + return typeRef(t.Elem()) + + default: + switch t.String() { + case "int": + return "int64" + + case "uint": + return "uint64" + + case "float64": + return "double" + + case "float32": + return "float" + + case "string", "bool", "uint64", "int64", "uint32", "int32": + return t.String() + + default: + panic(fmt.Sprintf("unsupported type %s", t.String())) + + } + } +} diff --git a/frontend/cli/cmd_schema.go b/frontend/cli/cmd_schema.go index 8edcc619db..ed0b96c06f 100644 --- a/frontend/cli/cmd_schema.go +++ b/frontend/cli/cmd_schema.go @@ -3,7 +3,6 @@ package main type schemaCmd struct { Get getSchemaCmd `default:"" cmd:"" help:"Retrieve the cluster FTL schema."` Diff schemaDiffCmd `cmd:"" help:"Print any schema differences between this cluster and another cluster. Returns an exit code of 1 if there are differences."` - Protobuf schemaProtobufCmd `cmd:"" help:"Generate protobuf schema mirroring the FTL schema structure."` Generate schemaGenerateCmd `cmd:"" help:"Stream the schema from the cluster and generate files from the template."` Import schemaImportCmd `cmd:"" help:"Import messages to the FTL schema."` } diff --git a/frontend/cli/cmd_schema_protobuf.go b/frontend/cli/cmd_schema_protobuf.go deleted file mode 100644 index df97caaec1..0000000000 --- a/frontend/cli/cmd_schema_protobuf.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/TBD54566975/ftl/internal/schema" -) - -type schemaProtobufCmd struct{} - -func (c *schemaProtobufCmd) Run() error { //nolint:unparam - fmt.Println(schema.ProtobufSchema()) - return nil -} diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts b/frontend/console/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts index dcdf5eaa50..4519c81fdc 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts @@ -3,11 +3,66 @@ /* eslint-disable */ // @ts-nocheck -// This file is generated by github.com/TBD54566975/ftl/internal/schema/protobuf.go, DO NOT MODIFY - import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3, protoInt64 } from "@bufbuild/protobuf"; -import { ModuleRuntime, VerbRuntime } from "./runtime_pb.js"; +import { Message, proto3, protoInt64, Timestamp } from "@bufbuild/protobuf"; + +/** + * @generated from enum xyz.block.ftl.v1.schema.AliasKind + */ +export enum AliasKind { + /** + * @generated from enum value: ALIAS_KIND_JSON = 0; + */ + JSON = 0, +} +// Retrieve enum metadata with: proto3.getEnumType(AliasKind) +proto3.util.setEnumType(AliasKind, "xyz.block.ftl.v1.schema.AliasKind", [ + { no: 0, name: "ALIAS_KIND_JSON" }, +]); + +/** + * @generated from enum xyz.block.ftl.v1.schema.VerbStatus + */ +export enum VerbStatus { + /** + * @generated from enum value: VERB_STATUS_ERROR = 0; + */ + ERROR = 0, + + /** + * @generated from enum value: VERB_STATUS_OFFLINE = 1; + */ + OFFLINE = 1, + + /** + * @generated from enum value: VERB_STATUS_ONLINE = 2; + */ + ONLINE = 2, + + /** + * @generated from enum value: VERB_STATUS_STARTING = 3; + */ + STARTING = 3, + + /** + * @generated from enum value: VERB_STATUS_STOPPED = 4; + */ + STOPPED = 4, + + /** + * @generated from enum value: VERB_STATUS_STOPPING = 5; + */ + STOPPING = 5, +} +// Retrieve enum metadata with: proto3.getEnumType(VerbStatus) +proto3.util.setEnumType(VerbStatus, "xyz.block.ftl.v1.schema.VerbStatus", [ + { no: 0, name: "VERB_STATUS_ERROR" }, + { no: 1, name: "VERB_STATUS_OFFLINE" }, + { no: 2, name: "VERB_STATUS_ONLINE" }, + { no: 3, name: "VERB_STATUS_STARTING" }, + { no: 4, name: "VERB_STATUS_STOPPED" }, + { no: 5, name: "VERB_STATUS_STOPPING" }, +]); /** * @generated from message xyz.block.ftl.v1.schema.Any @@ -306,14 +361,14 @@ export class Database extends Message { comments: string[] = []; /** - * @generated from field: string name = 3; + * @generated from field: string type = 4; */ - name = ""; + type = ""; /** - * @generated from field: string type = 4; + * @generated from field: string name = 3; */ - type = ""; + name = ""; constructor(data?: PartialMessage) { super(); @@ -325,8 +380,8 @@ export class Database extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "pos", kind: "message", T: Position, opt: true }, { no: 2, name: "comments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, - { no: 3, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 4, name: "type", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Database { @@ -355,16 +410,16 @@ export class Decl extends Message { */ value: { /** - * @generated from field: xyz.block.ftl.v1.schema.Data data = 1; + * @generated from field: xyz.block.ftl.v1.schema.Config config = 1; */ - value: Data; - case: "data"; + value: Config; + case: "config"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Verb verb = 2; + * @generated from field: xyz.block.ftl.v1.schema.Data data = 2; */ - value: Verb; - case: "verb"; + value: Data; + case: "data"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Database database = 3; @@ -379,40 +434,40 @@ export class Decl extends Message { case: "enum"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.TypeAlias typeAlias = 5; - */ - value: TypeAlias; - case: "typeAlias"; - } | { - /** - * @generated from field: xyz.block.ftl.v1.schema.Config config = 6; + * @generated from field: xyz.block.ftl.v1.schema.FSM fsm = 5; */ - value: Config; - case: "config"; + value: FSM; + case: "fsm"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Secret secret = 7; + * @generated from field: xyz.block.ftl.v1.schema.Secret secret = 6; */ value: Secret; case: "secret"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.FSM fsm = 8; + * @generated from field: xyz.block.ftl.v1.schema.Subscription subscription = 7; */ - value: FSM; - case: "fsm"; + value: Subscription; + case: "subscription"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Topic topic = 9; + * @generated from field: xyz.block.ftl.v1.schema.Topic topic = 8; */ value: Topic; case: "topic"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Subscription subscription = 10; + * @generated from field: xyz.block.ftl.v1.schema.TypeAlias typeAlias = 9; */ - value: Subscription; - case: "subscription"; + value: TypeAlias; + case: "typeAlias"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.Verb verb = 10; + */ + value: Verb; + case: "verb"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -423,16 +478,16 @@ export class Decl extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.v1.schema.Decl"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "data", kind: "message", T: Data, oneof: "value" }, - { no: 2, name: "verb", kind: "message", T: Verb, oneof: "value" }, + { no: 1, name: "config", kind: "message", T: Config, oneof: "value" }, + { no: 2, name: "data", kind: "message", T: Data, oneof: "value" }, { no: 3, name: "database", kind: "message", T: Database, oneof: "value" }, { no: 4, name: "enum", kind: "message", T: Enum, oneof: "value" }, - { no: 5, name: "typeAlias", kind: "message", T: TypeAlias, oneof: "value" }, - { no: 6, name: "config", kind: "message", T: Config, oneof: "value" }, - { no: 7, name: "secret", kind: "message", T: Secret, oneof: "value" }, - { no: 8, name: "fsm", kind: "message", T: FSM, oneof: "value" }, - { no: 9, name: "topic", kind: "message", T: Topic, oneof: "value" }, - { no: 10, name: "subscription", kind: "message", T: Subscription, oneof: "value" }, + { no: 5, name: "fsm", kind: "message", T: FSM, oneof: "value" }, + { no: 6, name: "secret", kind: "message", T: Secret, oneof: "value" }, + { no: 7, name: "subscription", kind: "message", T: Subscription, oneof: "value" }, + { no: 8, name: "topic", kind: "message", T: Topic, oneof: "value" }, + { no: 9, name: "typeAlias", kind: "message", T: TypeAlias, oneof: "value" }, + { no: 10, name: "verb", kind: "message", T: Verb, oneof: "value" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Decl { @@ -593,6 +648,11 @@ export class FSM extends Message { */ name = ""; + /** + * @generated from field: repeated xyz.block.ftl.v1.schema.Metadata metadata = 6; + */ + metadata: Metadata[] = []; + /** * @generated from field: repeated xyz.block.ftl.v1.schema.Ref start = 4; */ @@ -603,11 +663,6 @@ export class FSM extends Message { */ transitions: FSMTransition[] = []; - /** - * @generated from field: repeated xyz.block.ftl.v1.schema.Metadata metadata = 6; - */ - metadata: Metadata[] = []; - constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -619,9 +674,9 @@ export class FSM extends Message { { no: 1, name: "pos", kind: "message", T: Position, opt: true }, { no: 2, name: "comments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, { no: 3, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 6, name: "metadata", kind: "message", T: Metadata, repeated: true }, { no: 4, name: "start", kind: "message", T: Ref, repeated: true }, { no: 5, name: "transitions", kind: "message", T: FSMTransition, repeated: true }, - { no: 6, name: "metadata", kind: "message", T: Metadata, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): FSM { @@ -706,14 +761,14 @@ export class Field extends Message { pos?: Position; /** - * @generated from field: string name = 2; + * @generated from field: repeated string comments = 3; */ - name = ""; + comments: string[] = []; /** - * @generated from field: repeated string comments = 3; + * @generated from field: string name = 2; */ - comments: string[] = []; + name = ""; /** * @generated from field: xyz.block.ftl.v1.schema.Type type = 4; @@ -734,8 +789,8 @@ export class Field extends Message { static readonly typeName = "xyz.block.ftl.v1.schema.Field"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "pos", kind: "message", T: Position, opt: true }, - { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "comments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 4, name: "type", kind: "message", T: Type }, { no: 5, name: "metadata", kind: "message", T: Metadata, repeated: true }, ]); @@ -1068,16 +1123,16 @@ export class Metadata extends Message { */ value: { /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataCalls calls = 1; + * @generated from field: xyz.block.ftl.v1.schema.MetadataAlias alias = 1; */ - value: MetadataCalls; - case: "calls"; + value: MetadataAlias; + case: "alias"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataIngress ingress = 2; + * @generated from field: xyz.block.ftl.v1.schema.MetadataCalls calls = 2; */ - value: MetadataIngress; - case: "ingress"; + value: MetadataCalls; + case: "calls"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.MetadataCronJob cronJob = 3; @@ -1092,34 +1147,34 @@ export class Metadata extends Message { case: "databases"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataAlias alias = 5; + * @generated from field: xyz.block.ftl.v1.schema.MetadataEncoding encoding = 5; */ - value: MetadataAlias; - case: "alias"; + value: MetadataEncoding; + case: "encoding"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.MetadataIngress ingress = 6; + */ + value: MetadataIngress; + case: "ingress"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataRetry retry = 6; + * @generated from field: xyz.block.ftl.v1.schema.MetadataRetry retry = 7; */ value: MetadataRetry; case: "retry"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataSubscriber subscriber = 7; + * @generated from field: xyz.block.ftl.v1.schema.MetadataSubscriber subscriber = 8; */ value: MetadataSubscriber; case: "subscriber"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataTypeMap typeMap = 8; + * @generated from field: xyz.block.ftl.v1.schema.MetadataTypeMap typeMap = 9; */ value: MetadataTypeMap; case: "typeMap"; - } | { - /** - * @generated from field: xyz.block.ftl.v1.schema.MetadataEncoding encoding = 9; - */ - value: MetadataEncoding; - case: "encoding"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -1130,15 +1185,15 @@ export class Metadata extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.v1.schema.Metadata"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "calls", kind: "message", T: MetadataCalls, oneof: "value" }, - { no: 2, name: "ingress", kind: "message", T: MetadataIngress, oneof: "value" }, + { no: 1, name: "alias", kind: "message", T: MetadataAlias, oneof: "value" }, + { no: 2, name: "calls", kind: "message", T: MetadataCalls, oneof: "value" }, { no: 3, name: "cronJob", kind: "message", T: MetadataCronJob, oneof: "value" }, { no: 4, name: "databases", kind: "message", T: MetadataDatabases, oneof: "value" }, - { no: 5, name: "alias", kind: "message", T: MetadataAlias, oneof: "value" }, - { no: 6, name: "retry", kind: "message", T: MetadataRetry, oneof: "value" }, - { no: 7, name: "subscriber", kind: "message", T: MetadataSubscriber, oneof: "value" }, - { no: 8, name: "typeMap", kind: "message", T: MetadataTypeMap, oneof: "value" }, - { no: 9, name: "encoding", kind: "message", T: MetadataEncoding, oneof: "value" }, + { no: 5, name: "encoding", kind: "message", T: MetadataEncoding, oneof: "value" }, + { no: 6, name: "ingress", kind: "message", T: MetadataIngress, oneof: "value" }, + { no: 7, name: "retry", kind: "message", T: MetadataRetry, oneof: "value" }, + { no: 8, name: "subscriber", kind: "message", T: MetadataSubscriber, oneof: "value" }, + { no: 9, name: "typeMap", kind: "message", T: MetadataTypeMap, oneof: "value" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Metadata { @@ -1168,9 +1223,9 @@ export class MetadataAlias extends Message { pos?: Position; /** - * @generated from field: int64 kind = 2; + * @generated from field: xyz.block.ftl.v1.schema.AliasKind kind = 2; */ - kind = protoInt64.zero; + kind = AliasKind.JSON; /** * @generated from field: string alias = 3; @@ -1186,7 +1241,7 @@ export class MetadataAlias extends Message { static readonly typeName = "xyz.block.ftl.v1.schema.MetadataAlias"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "pos", kind: "message", T: Position, opt: true }, - { no: 2, name: "kind", kind: "scalar", T: 3 /* ScalarType.INT64 */ }, + { no: 2, name: "kind", kind: "enum", T: proto3.getEnumType(AliasKind) }, { no: 3, name: "alias", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); @@ -1597,11 +1652,6 @@ export class MetadataTypeMap extends Message { * @generated from message xyz.block.ftl.v1.schema.Module */ export class Module extends Message { - /** - * @generated from field: optional xyz.block.ftl.v1.schema.ModuleRuntime runtime = 31634; - */ - runtime?: ModuleRuntime; - /** * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; */ @@ -1627,6 +1677,11 @@ export class Module extends Message { */ decls: Decl[] = []; + /** + * @generated from field: optional xyz.block.ftl.v1.schema.ModuleRuntime runtime = 31634; + */ + runtime?: ModuleRuntime; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -1635,12 +1690,12 @@ export class Module extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.v1.schema.Module"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 31634, name: "runtime", kind: "message", T: ModuleRuntime, opt: true }, { no: 1, name: "pos", kind: "message", T: Position, opt: true }, { no: 2, name: "comments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, { no: 3, name: "builtin", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, { no: 4, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "decls", kind: "message", T: Decl, repeated: true }, + { no: 31634, name: "runtime", kind: "message", T: ModuleRuntime, opt: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Module { @@ -1660,6 +1715,67 @@ export class Module extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.schema.ModuleRuntime + */ +export class ModuleRuntime extends Message { + /** + * @generated from field: google.protobuf.Timestamp createTime = 1; + */ + createTime?: Timestamp; + + /** + * @generated from field: string language = 2; + */ + language = ""; + + /** + * @generated from field: int32 minReplicas = 3; + */ + minReplicas = 0; + + /** + * @generated from field: optional string os = 4; + */ + os?: string; + + /** + * @generated from field: optional string arch = 5; + */ + arch?: string; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.ModuleRuntime"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "createTime", kind: "message", T: Timestamp }, + { no: 2, name: "language", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "minReplicas", kind: "scalar", T: 5 /* ScalarType.INT32 */ }, + { no: 4, name: "os", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + { no: 5, name: "arch", kind: "scalar", T: 9 /* ScalarType.STRING */, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ModuleRuntime { + return new ModuleRuntime().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ModuleRuntime { + return new ModuleRuntime().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ModuleRuntime { + return new ModuleRuntime().fromJsonString(jsonString, options); + } + + static equals(a: ModuleRuntime | PlainMessage | undefined, b: ModuleRuntime | PlainMessage | undefined): boolean { + return proto3.util.equals(ModuleRuntime, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.schema.Optional */ @@ -1762,14 +1878,14 @@ export class Ref extends Message { pos?: Position; /** - * @generated from field: string name = 2; + * @generated from field: string module = 3; */ - name = ""; + module = ""; /** - * @generated from field: string module = 3; + * @generated from field: string name = 2; */ - module = ""; + name = ""; /** * @generated from field: repeated xyz.block.ftl.v1.schema.Type typeParameters = 4; @@ -1785,8 +1901,8 @@ export class Ref extends Message { static readonly typeName = "xyz.block.ftl.v1.schema.Ref"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "pos", kind: "message", T: Position, opt: true }, - { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 3, name: "module", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 4, name: "typeParameters", kind: "message", T: Type, repeated: true }, ]); @@ -2147,22 +2263,22 @@ export class Type extends Message { */ value: { /** - * @generated from field: xyz.block.ftl.v1.schema.Int int = 1; + * @generated from field: xyz.block.ftl.v1.schema.Any any = 1; */ - value: Int; - case: "int"; + value: Any; + case: "any"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Float float = 2; + * @generated from field: xyz.block.ftl.v1.schema.Array array = 2; */ - value: Float; - case: "float"; + value: Array; + case: "array"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.String string = 3; + * @generated from field: xyz.block.ftl.v1.schema.Bool bool = 3; */ - value: String; - case: "string"; + value: Bool; + case: "bool"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Bytes bytes = 4; @@ -2171,52 +2287,52 @@ export class Type extends Message { case: "bytes"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Bool bool = 5; + * @generated from field: xyz.block.ftl.v1.schema.Float float = 5; */ - value: Bool; - case: "bool"; + value: Float; + case: "float"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Time time = 6; + * @generated from field: xyz.block.ftl.v1.schema.Int int = 6; */ - value: Time; - case: "time"; + value: Int; + case: "int"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Array array = 7; + * @generated from field: xyz.block.ftl.v1.schema.Map map = 7; */ - value: Array; - case: "array"; + value: Map; + case: "map"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Map map = 8; + * @generated from field: xyz.block.ftl.v1.schema.Optional optional = 8; */ - value: Map; - case: "map"; + value: Optional; + case: "optional"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Any any = 9; + * @generated from field: xyz.block.ftl.v1.schema.Ref ref = 9; */ - value: Any; - case: "any"; + value: Ref; + case: "ref"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Unit unit = 10; + * @generated from field: xyz.block.ftl.v1.schema.String string = 10; */ - value: Unit; - case: "unit"; + value: String; + case: "string"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Ref ref = 11; + * @generated from field: xyz.block.ftl.v1.schema.Time time = 11; */ - value: Ref; - case: "ref"; + value: Time; + case: "time"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Optional optional = 12; + * @generated from field: xyz.block.ftl.v1.schema.Unit unit = 12; */ - value: Optional; - case: "optional"; + value: Unit; + case: "unit"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -2227,18 +2343,18 @@ export class Type extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.v1.schema.Type"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "int", kind: "message", T: Int, oneof: "value" }, - { no: 2, name: "float", kind: "message", T: Float, oneof: "value" }, - { no: 3, name: "string", kind: "message", T: String, oneof: "value" }, + { no: 1, name: "any", kind: "message", T: Any, oneof: "value" }, + { no: 2, name: "array", kind: "message", T: Array, oneof: "value" }, + { no: 3, name: "bool", kind: "message", T: Bool, oneof: "value" }, { no: 4, name: "bytes", kind: "message", T: Bytes, oneof: "value" }, - { no: 5, name: "bool", kind: "message", T: Bool, oneof: "value" }, - { no: 6, name: "time", kind: "message", T: Time, oneof: "value" }, - { no: 7, name: "array", kind: "message", T: Array, oneof: "value" }, - { no: 8, name: "map", kind: "message", T: Map, oneof: "value" }, - { no: 9, name: "any", kind: "message", T: Any, oneof: "value" }, - { no: 10, name: "unit", kind: "message", T: Unit, oneof: "value" }, - { no: 11, name: "ref", kind: "message", T: Ref, oneof: "value" }, - { no: 12, name: "optional", kind: "message", T: Optional, oneof: "value" }, + { no: 5, name: "float", kind: "message", T: Float, oneof: "value" }, + { no: 6, name: "int", kind: "message", T: Int, oneof: "value" }, + { no: 7, name: "map", kind: "message", T: Map, oneof: "value" }, + { no: 8, name: "optional", kind: "message", T: Optional, oneof: "value" }, + { no: 9, name: "ref", kind: "message", T: Ref, oneof: "value" }, + { no: 10, name: "string", kind: "message", T: String, oneof: "value" }, + { no: 11, name: "time", kind: "message", T: Time, oneof: "value" }, + { no: 12, name: "unit", kind: "message", T: Unit, oneof: "value" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Type { @@ -2457,16 +2573,16 @@ export class Value extends Message { */ value: { /** - * @generated from field: xyz.block.ftl.v1.schema.StringValue stringValue = 1; + * @generated from field: xyz.block.ftl.v1.schema.IntValue intValue = 1; */ - value: StringValue; - case: "stringValue"; + value: IntValue; + case: "intValue"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.IntValue intValue = 2; + * @generated from field: xyz.block.ftl.v1.schema.StringValue stringValue = 2; */ - value: IntValue; - case: "intValue"; + value: StringValue; + case: "stringValue"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.TypeValue typeValue = 3; @@ -2483,8 +2599,8 @@ export class Value extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.v1.schema.Value"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "stringValue", kind: "message", T: StringValue, oneof: "value" }, - { no: 2, name: "intValue", kind: "message", T: IntValue, oneof: "value" }, + { no: 1, name: "intValue", kind: "message", T: IntValue, oneof: "value" }, + { no: 2, name: "stringValue", kind: "message", T: StringValue, oneof: "value" }, { no: 3, name: "typeValue", kind: "message", T: TypeValue, oneof: "value" }, ]); @@ -2509,11 +2625,6 @@ export class Value extends Message { * @generated from message xyz.block.ftl.v1.schema.Verb */ export class Verb extends Message { - /** - * @generated from field: optional xyz.block.ftl.v1.schema.VerbRuntime runtime = 31634; - */ - runtime?: VerbRuntime; - /** * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; */ @@ -2549,6 +2660,11 @@ export class Verb extends Message { */ metadata: Metadata[] = []; + /** + * @generated from field: optional xyz.block.ftl.v1.schema.VerbRuntime runtime = 31634; + */ + runtime?: VerbRuntime; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -2557,7 +2673,6 @@ export class Verb extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "xyz.block.ftl.v1.schema.Verb"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 31634, name: "runtime", kind: "message", T: VerbRuntime, opt: true }, { no: 1, name: "pos", kind: "message", T: Position, opt: true }, { no: 2, name: "comments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, { no: 3, name: "export", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, @@ -2565,6 +2680,7 @@ export class Verb extends Message { { no: 5, name: "request", kind: "message", T: Type }, { no: 6, name: "response", kind: "message", T: Type }, { no: 7, name: "metadata", kind: "message", T: Metadata, repeated: true }, + { no: 31634, name: "runtime", kind: "message", T: VerbRuntime, opt: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Verb { @@ -2584,3 +2700,52 @@ export class Verb extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.schema.VerbRuntime + */ +export class VerbRuntime extends Message { + /** + * @generated from field: google.protobuf.Timestamp createTime = 1; + */ + createTime?: Timestamp; + + /** + * @generated from field: google.protobuf.Timestamp startTime = 2; + */ + startTime?: Timestamp; + + /** + * @generated from field: xyz.block.ftl.v1.schema.VerbStatus status = 3; + */ + status = VerbStatus.ERROR; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.VerbRuntime"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "createTime", kind: "message", T: Timestamp }, + { no: 2, name: "startTime", kind: "message", T: Timestamp }, + { no: 3, name: "status", kind: "enum", T: proto3.getEnumType(VerbStatus) }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VerbRuntime { + return new VerbRuntime().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VerbRuntime { + return new VerbRuntime().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VerbRuntime { + return new VerbRuntime().fromJsonString(jsonString, options); + } + + static equals(a: VerbRuntime | PlainMessage | undefined, b: VerbRuntime | PlainMessage | undefined): boolean { + return proto3.util.equals(VerbRuntime, a, b); + } +} + diff --git a/go-runtime/schema/data/analyzer.go b/go-runtime/schema/data/analyzer.go index fb128ba0f7..4417120678 100644 --- a/go-runtime/schema/data/analyzer.go +++ b/go-runtime/schema/data/analyzer.go @@ -94,7 +94,7 @@ func extractData(pass *analysis.Pass, node *ast.TypeSpec, named *types.Named) op if jsonFieldName != "" { metadata = append(metadata, &schema.MetadataAlias{ Pos: common.GoPosToSchemaPos(pass.Fset, node.Pos()), - Kind: schema.AliasKindJSON, + Kind: schema.AliasKindJson, Alias: jsonFieldName, }) } diff --git a/internal/schema/aliaskind_enumer.go b/internal/schema/aliaskind_enumer.go index 81465ef332..601113bd2f 100644 --- a/internal/schema/aliaskind_enumer.go +++ b/internal/schema/aliaskind_enumer.go @@ -25,14 +25,14 @@ func (i AliasKind) String() string { // Re-run the stringer command to generate them again. func _AliasKindNoOp() { var x [1]struct{} - _ = x[AliasKindJSON-(0)] + _ = x[AliasKindJson-(0)] } -var _AliasKindValues = []AliasKind{AliasKindJSON} +var _AliasKindValues = []AliasKind{AliasKindJson} var _AliasKindNameToValueMap = map[string]AliasKind{ - _AliasKindName[0:4]: AliasKindJSON, - _AliasKindLowerName[0:4]: AliasKindJSON, + _AliasKindName[0:4]: AliasKindJson, + _AliasKindLowerName[0:4]: AliasKindJson, } var _AliasKindNames = []string{ diff --git a/internal/schema/jsonvalidate.go b/internal/schema/jsonvalidate.go index f4461b9853..febe15024e 100644 --- a/internal/schema/jsonvalidate.go +++ b/internal/schema/jsonvalidate.go @@ -394,7 +394,7 @@ func TransformAliasedFields(sch *Schema, t Type, obj any, aliaser func(obj map[s func TransformFromAliasedFields(ref *Ref, sch *Schema, request map[string]any) (map[string]any, error) { return request, TransformAliasedFields(sch, ref, request, func(obj map[string]any, field *Field) string { - if jsonAlias, ok := field.Alias(AliasKindJSON).Get(); ok { + if jsonAlias, ok := field.Alias(AliasKindJson).Get(); ok { if _, ok := obj[field.Name]; !ok && obj[jsonAlias] != nil { obj[field.Name] = obj[jsonAlias] delete(obj, jsonAlias) @@ -406,7 +406,7 @@ func TransformFromAliasedFields(ref *Ref, sch *Schema, request map[string]any) ( func TransformToAliasedFields(ref *Ref, sch *Schema, request map[string]any) (map[string]any, error) { return request, TransformAliasedFields(sch, ref, request, func(obj map[string]any, field *Field) string { - if jsonAlias, ok := field.Alias(AliasKindJSON).Get(); ok && field.Name != jsonAlias { + if jsonAlias, ok := field.Alias(AliasKindJson).Get(); ok && field.Name != jsonAlias { obj[jsonAlias] = obj[field.Name] delete(obj, field.Name) return jsonAlias diff --git a/internal/schema/metadataalias.go b/internal/schema/metadataalias.go index ba4adcde25..f0937647de 100644 --- a/internal/schema/metadataalias.go +++ b/internal/schema/metadataalias.go @@ -14,7 +14,7 @@ import ( type AliasKind int const ( - AliasKindJSON AliasKind = iota + AliasKindJson AliasKind = iota //nolint ) type MetadataAlias struct { @@ -35,7 +35,7 @@ func (m *MetadataAlias) String() string { func (m *MetadataAlias) ToProto() protoreflect.ProtoMessage { return &schemapb.MetadataAlias{ Pos: posToProto(m.Pos), - Kind: int64(m.Kind), + Kind: schemapb.AliasKind(m.Kind), Alias: m.Alias, } } diff --git a/internal/schema/module.go b/internal/schema/module.go index ab0ed7bc2e..35a49e53c2 100644 --- a/internal/schema/module.go +++ b/internal/schema/module.go @@ -9,6 +9,7 @@ import ( "slices" "sort" "strings" + "time" "github.com/alecthomas/types/optional" "golang.org/x/exp/maps" @@ -17,6 +18,14 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +type ModuleRuntime struct { + CreateTime time.Time `protobuf:"1"` + Language string `protobuf:"2"` + MinReplicas int32 `protobuf:"3"` + OS string `protobuf:"4,optional"` + Arch string `protobuf:"5,optional"` +} + type Module struct { Pos Position `parser:"" protobuf:"1,optional"` @@ -24,6 +33,8 @@ type Module struct { Builtin bool `parser:"@'builtin'?" protobuf:"3"` Name string `parser:"'module' @Ident '{'" protobuf:"4"` Decls []Decl `parser:"@@* '}'" protobuf:"5"` + + Runtime *ModuleRuntime `protobuf:"31634,optional" parser:""` } var _ Node = (*Module)(nil) diff --git a/internal/schema/parser.go b/internal/schema/parser.go index 5cf98ddd73..03c26f9220 100644 --- a/internal/schema/parser.go +++ b/internal/schema/parser.go @@ -3,7 +3,6 @@ package schema import ( "fmt" "io" - "reflect" "strings" "github.com/alecthomas/participle/v2" @@ -28,15 +27,6 @@ var ( ingressUnion = []IngressPathComponent{&IngressPathLiteral{}, &IngressPathParameter{}} valueUnion = []Value{&StringValue{}, &IntValue{}, &TypeValue{}} - // Used by protobuf generation. - unions = map[reflect.Type][]reflect.Type{ - reflect.TypeOf((*Type)(nil)).Elem(): reflectUnion(typeUnion...), - reflect.TypeOf((*Metadata)(nil)).Elem(): reflectUnion(metadataUnion...), - reflect.TypeOf((*IngressPathComponent)(nil)).Elem(): reflectUnion(ingressUnion...), - reflect.TypeOf((*Decl)(nil)).Elem(): reflectUnion(declUnion...), - reflect.TypeOf((*Value)(nil)).Elem(): reflectUnion(valueUnion...), - } - Lexer = lexer.MustSimple([]lexer.SimpleRule{ {Name: "EOL", Pattern: `[\r\n]`}, {Name: "Whitespace", Pattern: `\s+`}, diff --git a/internal/schema/protobuf.go b/internal/schema/protobuf.go deleted file mode 100644 index 93004f598f..0000000000 --- a/internal/schema/protobuf.go +++ /dev/null @@ -1,197 +0,0 @@ -package schema - -import ( - "fmt" - "reflect" - "strconv" - "strings" - - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" - - "github.com/TBD54566975/ftl/internal/schema/strcase" -) - -var typesWithRuntime = map[string]bool{ - "Module": true, - "Verb": true, -} - -// ProtobufSchema returns a string containing the equivalent protobuf schema -// for the FTL schema. -func ProtobufSchema() string { - messages := map[string]string{} - generateMessage(reflect.TypeFor[Schema](), messages) - keys := maps.Keys(messages) - slices.Sort(keys) - w := &strings.Builder{} - fmt.Fprintf(w, `syntax = "proto3"; - -// This file is generated by github.com/TBD54566975/ftl/internal/schema/protobuf.go, DO NOT MODIFY -package xyz.block.ftl.v1.schema; - -import "xyz/block/ftl/v1/schema/runtime.proto"; - -option go_package = "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema;schemapb"; -option java_multiple_files = true; -`) - for i, key := range keys { - w.WriteString(messages[key]) - if i != len(keys)-1 { - w.WriteString("\n") - } - } - return w.String() -} - -func reflectUnion[T any](union ...T) []reflect.Type { - out := []reflect.Type{} - for _, t := range union { - out = append(out, reflect.TypeOf(t)) - } - return out -} - -func generateMessage(et reflect.Type, messages map[string]string) { - et = indirect(et) - if et.Kind() == reflect.Interface { - generateUnion(et, messages) - } else { - generateStruct(et, messages) - } -} - -func structName(t reflect.Type) string { - if t.Kind() == reflect.Ptr { - return structName(t.Elem()) - } - name := t.Name() - if strings.Contains(name, "[") { - name = strings.Split(strings.Split(name, "[")[1], "]")[0] - name = strings.Split(name, ".")[2] - } - return name -} - -func generateStruct(t reflect.Type, messages map[string]string) { - t = indirect(t) - if _, ok := messages[t.Name()]; ok { - return - } - messages[t.Name()] = "" - w := &strings.Builder{} - name := structName(t) - fmt.Fprintf(w, "\nmessage %s {", name) - if typesWithRuntime[t.Name()] { - fmt.Fprintf(w, "\n optional %sRuntime runtime = 31634;\n", name) - } - fields := reflect.VisibleFields(t) - // Sort by protobuf tag - slices.SortFunc(fields, func(a, b reflect.StructField) int { - aid := strings.Split(a.Tag.Get("protobuf"), ",")[0] - bid := strings.Split(b.Tag.Get("protobuf"), ",")[0] - if aid == "-" || bid == "-" { - return strings.Compare(aid, bid) - } - an, _ := strconv.Atoi(aid) //nolint:errcheck // 0 is fine - bn, _ := strconv.Atoi(bid) //nolint:errcheck // 0 is fine - return an - bn - }) - // Filter out fields with protobuf tag "-" - filtered := []reflect.StructField{} - for _, ft := range fields { - tag := strings.Split(ft.Tag.Get("protobuf"), ",") - if tag[0] == "-" { - continue - } - filtered = append(filtered, ft) - } - if len(filtered) == 0 { - fmt.Fprint(w, "}") - } else { - for _, ft := range filtered { - ftt := indirect(ft.Type) - tag := strings.Split(ft.Tag.Get("protobuf"), ",") - _, err := strconv.Atoi(tag[0]) - if err != nil { - panic(fmt.Sprintf("%s.%s: invalid protobuf tag %q", t.Name(), ft.Name, tag[0])) - } - opt := "" - if len(tag) > 1 && tag[1] == "optional" { - opt = "optional " - } - fmt.Fprintf(w, "\n %s%s %s = %s;", opt, generateProtoType(ft.Type), strcase.ToLowerCamel(ft.Name), tag[0]) - et := elemType(ftt) - if et.Kind() == reflect.Struct || et.Kind() == reflect.Interface { - generateMessage(et, messages) - } - } - fmt.Fprint(w, "\n}") - } - messages[t.Name()] = w.String() -} - -func generateUnion(t reflect.Type, messages map[string]string) { - t = indirect(t) - if _, ok := messages[t.Name()]; ok { - return - } - messages[t.Name()] = "" - if _, ok := unions[t]; !ok { - panic("no union defined for " + t.Name()) - } - w := &strings.Builder{} - fmt.Fprintf(w, "\nmessage %s {\n", t.Name()) - fmt.Fprintln(w, " oneof value {") - for i, ut := range unions[t] { - ut = indirect(ut) - name := structName(ut) - fmt.Fprintf(w, " %s %s = %d;\n", name, strcase.ToLowerCamel(strings.TrimPrefix(name, structName(t))), i+1) - generateMessage(ut, messages) - } - fmt.Fprintln(w, " }") - fmt.Fprint(w, "}") - messages[t.Name()] = w.String() -} - -func generateProtoType(t reflect.Type) string { - switch t.Kind() { - case reflect.Ptr: - return generateProtoType(t.Elem()) - case reflect.Interface: - return t.Name() - case reflect.Struct: - return structName(t) - case reflect.String: - return "string" - case reflect.Int: - return "int64" - case reflect.Bool: - return "bool" - case reflect.Float64: - return "double" - case reflect.Slice: - if t.Elem().Kind() == reflect.Uint8 { - return "bytes" - } - return fmt.Sprintf("repeated %s", generateProtoType(t.Elem())) - case reflect.Map: - return fmt.Sprintf("map", generateProtoType(t.Elem())) - default: - panic(fmt.Sprintf("unsupported type: %s", t)) - } -} - -func elemType(t reflect.Type) reflect.Type { - if t.Kind() == reflect.Ptr || t.Kind() == reflect.Slice || t.Kind() == reflect.Map { - return elemType(t.Elem()) - } - return t -} - -func indirect(t reflect.Type) reflect.Type { - if t.Kind() == reflect.Ptr { - return t.Elem() - } - return t -} diff --git a/internal/schema/schema_test.go b/internal/schema/schema_test.go index dc89a0b429..4a66125abc 100644 --- a/internal/schema/schema_test.go +++ b/internal/schema/schema_test.go @@ -437,7 +437,7 @@ func TestParsing(t *testing.T) { +retry 0 catch test.catch verb catch(builtin.CatchRequest) Unit - fsm FSM + fsm FSM + retry 10 1s 10s { start test.A @@ -650,7 +650,7 @@ func TestParsing(t *testing.T) { input: ` module test { export topic topicA test.eventA - + topic topicB test.eventB subscription subA1 test.topicA @@ -1054,14 +1054,14 @@ var testSchema = MustValidate(&Schema{ Name: "CreateRequest", Export: true, Fields: []*Field{ - {Name: "name", Type: &Optional{Type: &Map{Key: &String{}, Value: &String{}}}, Metadata: []Metadata{&MetadataAlias{Kind: AliasKindJSON, Alias: "rqn"}}}, + {Name: "name", Type: &Optional{Type: &Map{Key: &String{}, Value: &String{}}}, Metadata: []Metadata{&MetadataAlias{Kind: AliasKindJson, Alias: "rqn"}}}, }, }, &Data{ Name: "CreateResponse", Export: true, Fields: []*Field{ - {Name: "name", Type: &Array{Element: &String{}}, Metadata: []Metadata{&MetadataAlias{Kind: AliasKindJSON, Alias: "rsn"}}}, + {Name: "name", Type: &Array{Element: &String{}}, Metadata: []Metadata{&MetadataAlias{Kind: AliasKindJson, Alias: "rsn"}}}, }, }, &Data{ diff --git a/internal/schema/verb.go b/internal/schema/verb.go index 48e3f567b9..1a33e79630 100644 --- a/internal/schema/verb.go +++ b/internal/schema/verb.go @@ -3,6 +3,7 @@ package schema import ( "fmt" "strings" + "time" "github.com/alecthomas/types/optional" "google.golang.org/protobuf/proto" @@ -11,6 +12,23 @@ import ( "github.com/TBD54566975/ftl/internal/slices" ) +type VerbStatus int + +const ( + VerbStatusOffline VerbStatus = iota + VerbStatusStarting + VerbStatusOnline + VerbStatusStopping + VerbStatusStopped + VerbStatusError +) + +type VerbRuntime struct { + CreateTime time.Time `protobuf:"1"` + StartTime time.Time `protobuf:"2"` + Status VerbStatus `protobuf:"3"` +} + type Verb struct { Pos Position `parser:"" protobuf:"1,optional"` @@ -20,6 +38,8 @@ type Verb struct { Request Type `parser:"'(' @@ ')'" protobuf:"5"` Response Type `parser:"@@" protobuf:"6"` Metadata []Metadata `parser:"@@*" protobuf:"7"` + + Runtime *VerbRuntime `protobuf:"31634,optional" parser:""` } var _ Decl = (*Verb)(nil) diff --git a/scripts/ftl-schema b/scripts/go2proto similarity index 100% rename from scripts/ftl-schema rename to scripts/go2proto