From 0a7e36b108313ad50f9b466ad5e9ab88274c4ee7 Mon Sep 17 00:00:00 2001 From: Alec Thomas Date: Thu, 3 Oct 2024 23:21:13 +1000 Subject: [PATCH] chore: statically extract .proto from Go source (#2973) This adds a general purpose command `go2proto` that statically generates a `.proto` file from Go source code. This used to be done via reflection, but that resulted in a chicken and egg problem whereby the reflection code needed to be compilable in order to generate the protobuf files that the reflection code depended on. A couple of minor side-effects: 1. This will automatically extract sum types and enums. 2. The runtime types have been moved directly into the schema, as opposed to only existing in the proto. 3. Sum type elements will need to be tagged with a `//protobuf:` directive. These are the breaking changes: ``` backend/protos/xyz/block/ftl/v1/schema/schema.proto:43:26:Field "5" on message "Data" changed name from "typeParameters" to "type_parameters". backend/protos/xyz/block/ftl/v1/schema/schema.proto:162:3:Field "2" with name "kind" on message "MetadataAlias" changed type from "int64" to "enum". backend/protos/xyz/block/ftl/v1/schema/schema.proto:197:10:Field "3" on message "MetadataRetry" changed name from "minBackoff" to "min_backoff". backend/protos/xyz/block/ftl/v1/schema/schema.proto:198:10:Field "4" on message "MetadataRetry" changed name from "maxBackoff" to "max_backoff". backend/protos/xyz/block/ftl/v1/schema/schema.proto:210:10:Field "3" on message "MetadataTypeMap" changed name from "nativeName" to "native_name". backend/protos/xyz/block/ftl/v1/schema/schema.proto:245:17:Field "4" on message "Ref" changed name from "typeParameters" to "type_parameters". backend/protos/xyz/block/ftl/v1/schema/schema.proto:350:3:Field "3" with name "status" on message "VerbRuntime" changed type from "xyz.block.ftl.v1.schema.Status" to "xyz.block.ftl.v1.schema.VerbStatus". ``` None of these changes should effect wire compatibility. Fixes #2935 --- .go-arch-lint.yml | 2 +- .golangci.yml | 2 +- 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 | 2059 ++++++++++------- .../xyz/block/ftl/v1/schema/schema.proto | 90 +- cmd/ftl-schema/main.go | 11 - cmd/go2proto/main.go | 460 ++++ frontend/cli/cmd_schema.go | 1 - frontend/cli/cmd_schema_protobuf.go | 14 - .../xyz/block/ftl/v1/schema/schema_pb.ts | 449 ++-- go-runtime/schema/data/analyzer.go | 2 +- go.mod | 2 +- internal/schema/aliaskind_enumer.go | 8 +- internal/schema/any.go | 1 + internal/schema/array.go | 1 + internal/schema/bool.go | 1 + internal/schema/bytes.go | 1 + internal/schema/config.go | 1 + internal/schema/data.go | 2 + internal/schema/database.go | 1 + internal/schema/enum.go | 1 + internal/schema/float.go | 1 + internal/schema/fsm.go | 1 + internal/schema/int.go | 1 + internal/schema/intvalue.go | 1 + internal/schema/jsonvalidate.go | 4 +- internal/schema/map.go | 1 + internal/schema/metadataalias.go | 5 +- internal/schema/metadatacalls.go | 3 + internal/schema/metadatacronjob.go | 1 + internal/schema/metadatadatabases.go | 1 + internal/schema/metadataencoding.go | 1 + internal/schema/metadataingress.go | 3 + internal/schema/metadataretry.go | 1 + internal/schema/metadatasubscriber.go | 1 + internal/schema/metadatatypemap.go | 1 + internal/schema/module.go | 11 + internal/schema/optional.go | 2 + internal/schema/parser.go | 10 - internal/schema/protobuf.go | 197 -- internal/schema/ref.go | 2 + internal/schema/schema_test.go | 8 +- internal/schema/secret.go | 1 + internal/schema/string.go | 1 + internal/schema/stringvalue.go | 1 + internal/schema/subscription.go | 1 + internal/schema/time.go | 1 + internal/schema/topic.go | 1 + internal/schema/typealias.go | 1 + internal/schema/typevalue.go | 1 + internal/schema/unit.go | 1 + internal/schema/verb.go | 21 + .../block/ftl/deployment/ModuleBuilder.java | 4 +- scripts/{ftl-schema => go2proto} | 0 59 files changed, 2108 insertions(+), 1692 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..f6893c295c 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: @@ -143,3 +142,4 @@ issues: - "strings.Title has been deprecated" - "error returned from external package is unwrapped.*TranslatePGError" - "struct literal uses unkeyed fields" + - "exported: comment on exported type" 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..70740aab65 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 @@ -298,7 +398,7 @@ type Data struct { Comments []string `protobuf:"bytes,2,rep,name=comments,proto3" json:"comments,omitempty"` Export bool `protobuf:"varint,3,opt,name=export,proto3" json:"export,omitempty"` Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - TypeParameters []*TypeParameter `protobuf:"bytes,5,rep,name=typeParameters,proto3" json:"typeParameters,omitempty"` + TypeParameters []*TypeParameter `protobuf:"bytes,5,rep,name=type_parameters,json=typeParameters,proto3" json:"type_parameters,omitempty"` Fields []*Field `protobuf:"bytes,6,rep,name=fields,proto3" json:"fields,omitempty"` Metadata []*Metadata `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty"` } @@ -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,6,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,1,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,8,opt,name=fsm,proto3,oneof"` } type Decl_Secret struct { Secret *Secret `protobuf:"bytes,7,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,10,opt,name=subscription,proto3,oneof"` } type Decl_Topic struct { Topic *Topic `protobuf:"bytes,9,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,5,opt,name=typeAlias,proto3,oneof"` } -func (*Decl_Data) isDecl_Value() {} +type Decl_Verb struct { + Verb *Verb `protobuf:"bytes,2,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,5,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,1,opt,name=calls,proto3,oneof"` } type Metadata_CronJob struct { @@ -1587,8 +1687,12 @@ 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,9,opt,name=encoding,proto3,oneof"` +} + +type Metadata_Ingress struct { + Ingress *MetadataIngress `protobuf:"bytes,2,opt,name=ingress,proto3,oneof"` } type Metadata_Retry struct { @@ -1603,19 +1707,17 @@ type Metadata_TypeMap struct { TypeMap *MetadataTypeMap `protobuf:"bytes,8,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 { @@ -1994,8 +2094,8 @@ type MetadataRetry struct { Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` Count *int64 `protobuf:"varint,2,opt,name=count,proto3,oneof" json:"count,omitempty"` - MinBackoff string `protobuf:"bytes,3,opt,name=minBackoff,proto3" json:"minBackoff,omitempty"` - MaxBackoff string `protobuf:"bytes,4,opt,name=maxBackoff,proto3" json:"maxBackoff,omitempty"` + MinBackoff string `protobuf:"bytes,3,opt,name=min_backoff,json=minBackoff,proto3" json:"min_backoff,omitempty"` + MaxBackoff string `protobuf:"bytes,4,opt,name=max_backoff,json=maxBackoff,proto3" json:"max_backoff,omitempty"` Catch *Ref `protobuf:"bytes,5,opt,name=catch,proto3,oneof" json:"catch,omitempty"` } @@ -2128,7 +2228,7 @@ type MetadataTypeMap struct { Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` Runtime string `protobuf:"bytes,2,opt,name=runtime,proto3" json:"runtime,omitempty"` - NativeName string `protobuf:"bytes,3,opt,name=nativeName,proto3" json:"nativeName,omitempty"` + NativeName string `protobuf:"bytes,3,opt,name=native_name,json=nativeName,proto3" json:"native_name,omitempty"` } func (x *MetadataTypeMap) Reset() { @@ -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,8 +2364,94 @@ func (x *Module) GetDecls() []*Decl { return nil } -type Optional struct { - state protoimpl.MessageState +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 + + 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 *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 *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)) + 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_schema_proto_msgTypes[31] + 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_schema_proto_rawDescGZIP(), []int{31} +} + +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 Optional struct { + state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2283,7 +2462,7 @@ type Optional struct { func (x *Optional) Reset() { *x = Optional{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2296,7 +2475,7 @@ func (x *Optional) String() string { func (*Optional) ProtoMessage() {} func (x *Optional) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[31] + 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 { @@ -2309,7 +2488,7 @@ func (x *Optional) ProtoReflect() protoreflect.Message { // Deprecated: Use Optional.ProtoReflect.Descriptor instead. func (*Optional) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{31} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{32} } func (x *Optional) GetPos() *Position { @@ -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"` - TypeParameters []*Type `protobuf:"bytes,4,rep,name=typeParameters,proto3" json:"typeParameters,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + TypeParameters []*Type `protobuf:"bytes,4,rep,name=type_parameters,json=typeParameters,proto3" json:"type_parameters,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,9,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,7,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,5,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_Time struct { - Time *Time `protobuf:"bytes,6,opt,name=time,proto3,oneof"` +type Type_Float struct { + Float *Float `protobuf:"bytes,2,opt,name=float,proto3,oneof"` } -type Type_Array struct { - Array *Array `protobuf:"bytes,7,opt,name=array,proto3,oneof"` +type Type_Int struct { + Int *Int `protobuf:"bytes,1,opt,name=int,proto3,oneof"` } type Type_Map struct { Map *Map `protobuf:"bytes,8,opt,name=map,proto3,oneof"` } -type Type_Any struct { - Any *Any `protobuf:"bytes,9,opt,name=any,proto3,oneof"` -} - -type Type_Unit struct { - Unit *Unit `protobuf:"bytes,10,opt,name=unit,proto3,oneof"` +type Type_Optional struct { + Optional *Optional `protobuf:"bytes,12,opt,name=optional,proto3,oneof"` } type Type_Ref struct { Ref *Ref `protobuf:"bytes,11,opt,name=ref,proto3,oneof"` } -type Type_Optional struct { - Optional *Optional `protobuf:"bytes,12,opt,name=optional,proto3,oneof"` +type Type_String_ struct { + String_ *String `protobuf:"bytes,3,opt,name=string,proto3,oneof"` } -func (*Type_Int) isType_Value() {} +type Type_Time struct { + Time *Time `protobuf:"bytes,6,opt,name=time,proto3,oneof"` +} -func (*Type_Float) isType_Value() {} +type Type_Unit struct { + Unit *Unit `protobuf:"bytes,10,opt,name=unit,proto3,oneof"` +} -func (*Type_String_) isType_Value() {} +func (*Type_Any) isType_Value() {} -func (*Type_Bytes) isType_Value() {} +func (*Type_Array) isType_Value() {} func (*Type_Bool) isType_Value() {} -func (*Type_Time) isType_Value() {} +func (*Type_Bytes) isType_Value() {} -func (*Type_Array) isType_Value() {} +func (*Type_Float) isType_Value() {} -func (*Type_Map) isType_Value() {} +func (*Type_Int) isType_Value() {} -func (*Type_Any) isType_Value() {} +func (*Type_Map) 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,2,opt,name=intValue,proto3,oneof"` } +type Value_StringValue struct { + StringValue *StringValue `protobuf:"bytes,1,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=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 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,289 +3797,291 @@ 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, - 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, + 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, 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, + 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, 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, - 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, - 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, - 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x65, 0x6e, - 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, + 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, 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, + 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, 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, + 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0xd8, 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, 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, + 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, 0x4f, + 0x0a, 0x0f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 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, 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, 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, + 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, 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, 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, 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, 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, - 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, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x48, + 0x00, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x65, + 0x6e, 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, 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, + 0x65, 0x6d, 0x61, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, + 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, 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, + 0x2e, 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, 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, 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, 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, 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, + 0x65, 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, + 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, - 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, + 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, 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, 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, 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, - 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 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, 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, + 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, 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, 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, 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, + 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, 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, 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, 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, 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, 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, - 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, - 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, + 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, 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, 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, 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, + 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, 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, 0x61, 0x6c, + 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, 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, 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, 0x47, 0x0a, 0x08, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, + 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, 0x06, 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, 0x07, 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, 0x08, 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, @@ -3884,78 +4128,91 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 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, + 0x6f, 0x73, 0x22, 0xfb, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, 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, - 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, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, + 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6d, 0x69, 0x6e, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, + 0x78, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x6d, 0x61, 0x78, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x37, 0x0a, 0x05, 0x63, + 0x61, 0x74, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, 0x8e, 0x01, 0x0a, + 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, + 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 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, 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, + 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, 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, 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, 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, + 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, 0xbb, + 0x01, 0x0a, 0x03, 0x52, 0x65, 0x66, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 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, 0x46, 0x0a, 0x0f, + 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, @@ -4019,48 +4276,48 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 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, + 0x73, 0x22, 0x9a, 0x05, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x61, 0x6e, + 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, + 0x61, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x03, 0x61, 0x6e, 0x79, 0x12, 0x36, 0x0a, 0x05, + 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, - 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, - 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, + 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, 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, 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, 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, 0x30, 0x0a, 0x03, 0x6d, 0x61, 0x70, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 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, 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, 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, + 0x2e, 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x03, 0x6d, + 0x61, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, + 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, 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, 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, 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, + 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, 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, 0x33, 0x0a, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 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, 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, 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, @@ -4097,52 +4354,76 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 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, + 0x01, 0x0a, 0x05, 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, 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, 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, + 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, 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, 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, - 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, + 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, 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, 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, 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, 0xc2, 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, 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, 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.type_parameters: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.create_time: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.type_parameters: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.create_time:type_name -> google.protobuf.Timestamp + 52, // 117: xyz.block.ftl.v1.schema.VerbRuntime.start_time: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..5f663233cd 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; } @@ -37,7 +40,7 @@ message Data { repeated string comments = 2; bool export = 3; string name = 4; - repeated TypeParameter typeParameters = 5; + repeated TypeParameter type_parameters = 5; repeated Field fields = 6; repeated Metadata metadata = 7; } @@ -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 { + Config config = 6; Data data = 1; - Verb verb = 2; Database database = 3; Enum enum = 4; - TypeAlias typeAlias = 5; - Config config = 6; - Secret secret = 7; FSM fsm = 8; - Topic topic = 9; + Secret secret = 7; Subscription subscription = 10; + Topic topic = 9; + TypeAlias typeAlias = 5; + Verb verb = 2; } } @@ -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 { + MetadataAlias alias = 5; MetadataCalls calls = 1; - MetadataIngress ingress = 2; MetadataCronJob cronJob = 3; MetadataDatabases databases = 4; - MetadataAlias alias = 5; + MetadataEncoding encoding = 9; + MetadataIngress ingress = 2; MetadataRetry retry = 6; MetadataSubscriber subscriber = 7; MetadataTypeMap typeMap = 8; - MetadataEncoding encoding = 9; } } message MetadataAlias { optional Position pos = 1; - int64 kind = 2; + AliasKind kind = 2; string alias = 3; } @@ -191,8 +194,8 @@ message MetadataIngress { message MetadataRetry { optional Position pos = 1; optional int64 count = 2; - string minBackoff = 3; - string maxBackoff = 4; + string min_backoff = 3; + string max_backoff = 4; optional Ref catch = 5; } @@ -204,17 +207,24 @@ message MetadataSubscriber { message MetadataTypeMap { optional Position pos = 1; string runtime = 2; - string nativeName = 3; + string native_name = 3; } 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 create_time = 1; + string language = 2; + int32 min_replicas = 3; + optional string os = 4; + optional string arch = 5; } message Optional { @@ -230,9 +240,9 @@ message Position { message Ref { optional Position pos = 1; - string name = 2; string module = 3; - repeated Type typeParameters = 4; + string name = 2; + repeated Type type_parameters = 4; } message Schema { @@ -277,18 +287,18 @@ message Topic { message Type { oneof value { - Int int = 1; + Any any = 9; + Array array = 7; + Bool bool = 5; + Bytes bytes = 4; Float float = 2; + Int int = 1; + Map map = 8; + Optional optional = 12; + Ref ref = 11; String string = 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; } } @@ -317,15 +327,13 @@ message Unit { message Value { oneof value { - StringValue stringValue = 1; IntValue intValue = 2; + StringValue stringValue = 1; 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 create_time = 1; + google.protobuf.Timestamp start_time = 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..aa5dbf5d9c --- /dev/null +++ b/cmd/go2proto/main.go @@ -0,0 +1,460 @@ +package main + +import ( + "errors" + "fmt" + "go/ast" + "go/token" + "go/types" + "maps" + "os" + "reflect" + "slices" + "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) + defer out.Close() + } + + 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) + commentMap := ast.CommentMap{} + for _, pkg := range pkgs { + resolved.Pkg = pkg + if len(pkg.Errors) > 0 { + fmt.Fprintf(os.Stderr, "go2proto: warning: %s\n", pkg.Errors[0]) + break + } + for _, file := range pkg.Syntax { + fcmap := ast.NewCommentMap(fset, file, file.Comments) + maps.Copy(commentMap, fcmap) + } + } + resolved.Comments = commentMap + 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) + } + + if cli.Output != "" { + 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 { + Comments ast.CommentMap + Path string + Ref string + Refs []string + Pkg *packages.Package +} + +type State struct { + Config + Decls map[string]string + Renamed map[string]string + *PkgRefs +} + +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{}, + PkgRefs: 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.ToLowerSnake(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 := map[string]int{} + 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) { + var directive *pbTag + if comments := findCommentsForObject(sym, s.Pkg.Syntax); comments != nil { + for _, line := range comments.List { + if strings.HasPrefix(line.Text, "//protobuf:") { + tag, err := parsePBTag(strings.TrimPrefix(line.Text, "//protobuf:")) + if err != nil { + return genErrorf(sym.Pos(), "invalid //protobuf: directive %q: %w", line.Text, err) + } + directive = &tag + } + } + } + if directive == nil { + return genErrorf(sym.Pos(), "sum type element is missing //protobuf: directive") + } + if err := s.generateType(sym, sym.Type()); err != nil { + return genErrorf(sym.Pos(), "%s: %w", name, err) + } + sums[name] = directive.ID + } + } + // 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. + for _, sum := range slices.Sorted(maps.Keys(sums)) { + fieldName := strcase.ToLowerCamel(strings.TrimPrefix(sum, sumTypeName)) + fmt.Fprintf(w, " %s %s = %d;\n", sum, fieldName, sums[sum]) + } + 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())) + + } + } +} + +func findCommentsForObject(obj types.Object, syntax []*ast.File) *ast.CommentGroup { + for _, file := range syntax { + if file.Pos() <= obj.Pos() && obj.Pos() <= file.End() { + // Use ast.Inspect to traverse the AST and locate the node + var comments *ast.CommentGroup + ast.Inspect(file, func(n ast.Node) bool { + if n == nil { + return false + } + // If found, get the documentation comments + if node, ok := n.(*ast.GenDecl); ok { + for _, spec := range node.Specs { + if spec.Pos() == obj.Pos() { + comments = node.Doc + return false // Stop the traversal once the node is found + } + } + } + return true + }) + return comments + } + } + return nil +} 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..5efc7699c6 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 @@ -243,7 +298,7 @@ export class Data extends Message { name = ""; /** - * @generated from field: repeated xyz.block.ftl.v1.schema.TypeParameter typeParameters = 5; + * @generated from field: repeated xyz.block.ftl.v1.schema.TypeParameter type_parameters = 5; */ typeParameters: TypeParameter[] = []; @@ -269,7 +324,7 @@ export class Data extends Message { { no: 2, name: "comments", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true }, { no: 3, name: "export", kind: "scalar", T: 8 /* ScalarType.BOOL */ }, { no: 4, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 5, name: "typeParameters", kind: "message", T: TypeParameter, repeated: true }, + { no: 5, name: "type_parameters", kind: "message", T: TypeParameter, repeated: true }, { no: 6, name: "fields", kind: "message", T: Field, repeated: true }, { no: 7, name: "metadata", kind: "message", T: Metadata, repeated: true }, ]); @@ -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 = 6; */ - 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 = 1; */ - value: Verb; - case: "verb"; + value: Data; + case: "data"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Database database = 3; @@ -379,16 +434,10 @@ 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 = 8; */ - value: Config; - case: "config"; + value: FSM; + case: "fsm"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Secret secret = 7; @@ -397,10 +446,10 @@ export class Decl extends Message { case: "secret"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.FSM fsm = 8; + * @generated from field: xyz.block.ftl.v1.schema.Subscription subscription = 10; */ - value: FSM; - case: "fsm"; + value: Subscription; + case: "subscription"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Topic topic = 9; @@ -409,10 +458,16 @@ export class Decl extends Message { case: "topic"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Subscription subscription = 10; + * @generated from field: xyz.block.ftl.v1.schema.TypeAlias typeAlias = 5; */ - value: Subscription; - case: "subscription"; + value: TypeAlias; + case: "typeAlias"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.Verb verb = 2; + */ + 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: 6, name: "config", kind: "message", T: Config, oneof: "value" }, { no: 1, name: "data", kind: "message", T: Data, oneof: "value" }, - { no: 2, name: "verb", kind: "message", T: Verb, 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: 7, name: "secret", kind: "message", T: Secret, oneof: "value" }, { no: 10, name: "subscription", kind: "message", T: Subscription, oneof: "value" }, + { no: 9, name: "topic", kind: "message", T: Topic, oneof: "value" }, + { no: 5, name: "typeAlias", kind: "message", T: TypeAlias, oneof: "value" }, + { no: 2, 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 = 5; */ - 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 = 1; */ - value: MetadataIngress; - case: "ingress"; + value: MetadataCalls; + case: "calls"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.MetadataCronJob cronJob = 3; @@ -1092,10 +1147,16 @@ 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 = 9; */ - value: MetadataAlias; - case: "alias"; + value: MetadataEncoding; + case: "encoding"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.MetadataIngress ingress = 2; + */ + value: MetadataIngress; + case: "ingress"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.MetadataRetry retry = 6; @@ -1114,12 +1175,6 @@ export class Metadata extends Message { */ 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: 5, name: "alias", kind: "message", T: MetadataAlias, oneof: "value" }, { no: 1, name: "calls", kind: "message", T: MetadataCalls, oneof: "value" }, - { no: 2, name: "ingress", kind: "message", T: MetadataIngress, 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: 9, name: "encoding", kind: "message", T: MetadataEncoding, oneof: "value" }, + { no: 2, name: "ingress", kind: "message", T: MetadataIngress, 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" }, ]); 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 */ }, ]); @@ -1455,12 +1510,12 @@ export class MetadataRetry extends Message { count?: bigint; /** - * @generated from field: string minBackoff = 3; + * @generated from field: string min_backoff = 3; */ minBackoff = ""; /** - * @generated from field: string maxBackoff = 4; + * @generated from field: string max_backoff = 4; */ maxBackoff = ""; @@ -1479,8 +1534,8 @@ export class MetadataRetry extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "pos", kind: "message", T: Position, opt: true }, { no: 2, name: "count", kind: "scalar", T: 3 /* ScalarType.INT64 */, opt: true }, - { no: 3, name: "minBackoff", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 4, name: "maxBackoff", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "min_backoff", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "max_backoff", kind: "scalar", T: 9 /* ScalarType.STRING */ }, { no: 5, name: "catch", kind: "message", T: Ref, opt: true }, ]); @@ -1559,7 +1614,7 @@ export class MetadataTypeMap extends Message { runtime = ""; /** - * @generated from field: string nativeName = 3; + * @generated from field: string native_name = 3; */ nativeName = ""; @@ -1573,7 +1628,7 @@ export class MetadataTypeMap extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "pos", kind: "message", T: Position, opt: true }, { no: 2, name: "runtime", kind: "scalar", T: 9 /* ScalarType.STRING */ }, - { no: 3, name: "nativeName", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "native_name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): MetadataTypeMap { @@ -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 create_time = 1; + */ + createTime?: Timestamp; + + /** + * @generated from field: string language = 2; + */ + language = ""; + + /** + * @generated from field: int32 min_replicas = 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: "create_time", kind: "message", T: Timestamp }, + { no: 2, name: "language", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 3, name: "min_replicas", 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,17 +1878,17 @@ 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; + * @generated from field: repeated xyz.block.ftl.v1.schema.Type type_parameters = 4; */ typeParameters: Type[] = []; @@ -1785,9 +1901,9 @@ 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: 4, name: "typeParameters", kind: "message", T: Type, repeated: true }, + { no: 2, name: "name", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 4, name: "type_parameters", kind: "message", T: Type, repeated: true }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Ref { @@ -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 = 9; */ - 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 = 7; */ - 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 = 5; */ - value: String; - case: "string"; + value: Bool; + case: "bool"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Bytes bytes = 4; @@ -2171,22 +2287,16 @@ export class Type extends Message { case: "bytes"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Bool bool = 5; - */ - value: Bool; - case: "bool"; - } | { - /** - * @generated from field: xyz.block.ftl.v1.schema.Time time = 6; + * @generated from field: xyz.block.ftl.v1.schema.Float float = 2; */ - value: Time; - case: "time"; + value: Float; + case: "float"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Array array = 7; + * @generated from field: xyz.block.ftl.v1.schema.Int int = 1; */ - value: Array; - case: "array"; + value: Int; + case: "int"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Map map = 8; @@ -2195,16 +2305,10 @@ export class Type extends Message { case: "map"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Any any = 9; - */ - value: Any; - case: "any"; - } | { - /** - * @generated from field: xyz.block.ftl.v1.schema.Unit unit = 10; + * @generated from field: xyz.block.ftl.v1.schema.Optional optional = 12; */ - value: Unit; - case: "unit"; + value: Optional; + case: "optional"; } | { /** * @generated from field: xyz.block.ftl.v1.schema.Ref ref = 11; @@ -2213,10 +2317,22 @@ export class Type extends Message { case: "ref"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Optional optional = 12; + * @generated from field: xyz.block.ftl.v1.schema.String string = 3; */ - value: Optional; - case: "optional"; + value: String; + case: "string"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.Time time = 6; + */ + value: Time; + case: "time"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.Unit unit = 10; + */ + 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: 9, name: "any", kind: "message", T: Any, oneof: "value" }, + { no: 7, name: "array", kind: "message", T: Array, oneof: "value" }, + { no: 5, name: "bool", kind: "message", T: Bool, oneof: "value" }, + { no: 4, name: "bytes", kind: "message", T: Bytes, oneof: "value" }, { no: 2, name: "float", kind: "message", T: Float, oneof: "value" }, + { no: 1, name: "int", kind: "message", T: Int, oneof: "value" }, + { no: 8, name: "map", kind: "message", T: Map, oneof: "value" }, + { no: 12, name: "optional", kind: "message", T: Optional, oneof: "value" }, + { no: 11, name: "ref", kind: "message", T: Ref, oneof: "value" }, { no: 3, name: "string", kind: "message", T: String, 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" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Type { @@ -2456,17 +2572,17 @@ export class Value extends Message { * @generated from oneof xyz.block.ftl.v1.schema.Value.value */ value: { - /** - * @generated from field: xyz.block.ftl.v1.schema.StringValue stringValue = 1; - */ - value: StringValue; - case: "stringValue"; - } | { /** * @generated from field: xyz.block.ftl.v1.schema.IntValue intValue = 2; */ value: IntValue; case: "intValue"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.StringValue stringValue = 1; + */ + 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: "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 create_time = 1; + */ + createTime?: Timestamp; + + /** + * @generated from field: google.protobuf.Timestamp start_time = 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: "create_time", kind: "message", T: Timestamp }, + { no: 2, name: "start_time", 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/go.mod b/go.mod index d5326bf547..910471e5b5 100644 --- a/go.mod +++ b/go.mod @@ -72,6 +72,7 @@ require ( golang.org/x/net v0.29.0 golang.org/x/sync v0.8.0 golang.org/x/term v0.24.0 + golang.org/x/tools v0.25.0 google.golang.org/protobuf v1.34.2 gotest.tools/v3 v3.5.1 istio.io/api v1.23.2 @@ -144,7 +145,6 @@ require ( go.opentelemetry.io/proto/otlp v1.3.1 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/time v0.6.0 // indirect - golang.org/x/tools v0.25.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect 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/any.go b/internal/schema/any.go index 7b4b485b7f..776fb2c547 100644 --- a/internal/schema/any.go +++ b/internal/schema/any.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:9 type Any struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/array.go b/internal/schema/array.go index 29463e8cac..465eb15be1 100644 --- a/internal/schema/array.go +++ b/internal/schema/array.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:7 type Array struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/bool.go b/internal/schema/bool.go index 7a8c7e1c47..774aaf82dd 100644 --- a/internal/schema/bool.go +++ b/internal/schema/bool.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:5 type Bool struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/bytes.go b/internal/schema/bytes.go index dcbd238234..0d8a054ea8 100644 --- a/internal/schema/bytes.go +++ b/internal/schema/bytes.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:4 type Bytes struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/config.go b/internal/schema/config.go index 9f985812da..d051604038 100644 --- a/internal/schema/config.go +++ b/internal/schema/config.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:6 type Config struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/data.go b/internal/schema/data.go index 4b6c42437b..82d05e1755 100644 --- a/internal/schema/data.go +++ b/internal/schema/data.go @@ -11,6 +11,8 @@ import ( ) // A Data structure. +// +//protobuf:1 type Data struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/database.go b/internal/schema/database.go index 5080f42c9c..f4b701980d 100644 --- a/internal/schema/database.go +++ b/internal/schema/database.go @@ -11,6 +11,7 @@ import ( const PostgresDatabaseType = "postgres" +//protobuf:3 type Database struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/enum.go b/internal/schema/enum.go index 2a3f2cd8f5..6ddcb16eed 100644 --- a/internal/schema/enum.go +++ b/internal/schema/enum.go @@ -10,6 +10,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:4 type Enum struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/float.go b/internal/schema/float.go index 39a0ae06be..3d01478211 100644 --- a/internal/schema/float.go +++ b/internal/schema/float.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:2 type Float struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/fsm.go b/internal/schema/fsm.go index a72e68d26b..92eef18480 100644 --- a/internal/schema/fsm.go +++ b/internal/schema/fsm.go @@ -12,6 +12,7 @@ import ( "github.com/TBD54566975/ftl/internal/slices" ) +//protobuf:8 type FSM struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/int.go b/internal/schema/int.go index a9d5cb24f4..5cd21c5ea6 100644 --- a/internal/schema/int.go +++ b/internal/schema/int.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:1 type Int struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/intvalue.go b/internal/schema/intvalue.go index 51eb51a3d3..95a78d9bc3 100644 --- a/internal/schema/intvalue.go +++ b/internal/schema/intvalue.go @@ -10,6 +10,7 @@ import ( var _ Value = (*IntValue)(nil) +//protobuf:2 type IntValue struct { Pos Position `parser:"" protobuf:"1,optional"` 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/map.go b/internal/schema/map.go index c08d16bd32..5ac2dc6c7f 100644 --- a/internal/schema/map.go +++ b/internal/schema/map.go @@ -8,6 +8,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:8 type Map struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadataalias.go b/internal/schema/metadataalias.go index ba4adcde25..cc4f1c40c7 100644 --- a/internal/schema/metadataalias.go +++ b/internal/schema/metadataalias.go @@ -14,9 +14,10 @@ import ( type AliasKind int const ( - AliasKindJSON AliasKind = iota + AliasKindJson AliasKind = iota //nolint ) +//protobuf:5 type MetadataAlias struct { Pos Position `parser:"" protobuf:"1,optional"` @@ -35,7 +36,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/metadatacalls.go b/internal/schema/metadatacalls.go index 4fb2992f1d..8b27b6c87b 100644 --- a/internal/schema/metadatacalls.go +++ b/internal/schema/metadatacalls.go @@ -9,6 +9,9 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +// MetadataCalls represents a metadata block with a list of calls. +// +//protobuf:1,optional type MetadataCalls struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadatacronjob.go b/internal/schema/metadatacronjob.go index d8f397fcf3..b9282734e5 100644 --- a/internal/schema/metadatacronjob.go +++ b/internal/schema/metadatacronjob.go @@ -8,6 +8,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:3 type MetadataCronJob struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadatadatabases.go b/internal/schema/metadatadatabases.go index 194fbd03f9..0931e6bb01 100644 --- a/internal/schema/metadatadatabases.go +++ b/internal/schema/metadatadatabases.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:4 type MetadataDatabases struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadataencoding.go b/internal/schema/metadataencoding.go index 452577a216..21fe26ea61 100644 --- a/internal/schema/metadataencoding.go +++ b/internal/schema/metadataencoding.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:9 type MetadataEncoding struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadataingress.go b/internal/schema/metadataingress.go index 48aafb87e6..7032395cd8 100644 --- a/internal/schema/metadataingress.go +++ b/internal/schema/metadataingress.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:2 type MetadataIngress struct { Pos Position `parser:"" protobuf:"1,optional"` @@ -76,6 +77,7 @@ type IngressPathComponent interface { schemaIngressPathComponent() } +//protobuf:1 type IngressPathLiteral struct { Pos Position `parser:"" protobuf:"1,optional"` @@ -92,6 +94,7 @@ func (l *IngressPathLiteral) ToProto() proto.Message { return &schemapb.IngressPathLiteral{Text: l.Text} } +//protobuf:2 type IngressPathParameter struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadataretry.go b/internal/schema/metadataretry.go index 505be1f015..e217048e56 100644 --- a/internal/schema/metadataretry.go +++ b/internal/schema/metadataretry.go @@ -23,6 +23,7 @@ const ( MaxBackoffLimit = 24 * time.Hour ) +//protobuf:6 type MetadataRetry struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadatasubscriber.go b/internal/schema/metadatasubscriber.go index 6bc252d482..462880bbe9 100644 --- a/internal/schema/metadatasubscriber.go +++ b/internal/schema/metadatasubscriber.go @@ -8,6 +8,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:7 type MetadataSubscriber struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/metadatatypemap.go b/internal/schema/metadatatypemap.go index 997e16c952..6ae0dad56a 100644 --- a/internal/schema/metadatatypemap.go +++ b/internal/schema/metadatatypemap.go @@ -8,6 +8,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:8 type MetadataTypeMap struct { Pos Position `parser:"" protobuf:"1,optional"` 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/optional.go b/internal/schema/optional.go index 69bf46ae32..1f646e4bb7 100644 --- a/internal/schema/optional.go +++ b/internal/schema/optional.go @@ -7,6 +7,8 @@ import ( ) // Optional represents a Type whose value may be optional. +// +//protobuf:12 type Optional struct { Pos Position `parser:"" protobuf:"1,optional"` 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/ref.go b/internal/schema/ref.go index f54f09a689..3f5039cb42 100644 --- a/internal/schema/ref.go +++ b/internal/schema/ref.go @@ -31,6 +31,8 @@ func (r *RefKey) Scan(src any) error { } // Ref is an untyped reference to a symbol. +// +//protobuf:11 type Ref struct { Pos Position `parser:"" protobuf:"1,optional"` 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/secret.go b/internal/schema/secret.go index 077ba332bf..38d1a4808a 100644 --- a/internal/schema/secret.go +++ b/internal/schema/secret.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:7 type Secret struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/string.go b/internal/schema/string.go index 3bdd5a379b..5c2d4a6dce 100644 --- a/internal/schema/string.go +++ b/internal/schema/string.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:3 type String struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/stringvalue.go b/internal/schema/stringvalue.go index ecbfb1f8b3..3fddeb8fb1 100644 --- a/internal/schema/stringvalue.go +++ b/internal/schema/stringvalue.go @@ -8,6 +8,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:1 type StringValue struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/subscription.go b/internal/schema/subscription.go index 1aa8cf3010..672fde24ea 100644 --- a/internal/schema/subscription.go +++ b/internal/schema/subscription.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:10 type Subscription struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/time.go b/internal/schema/time.go index 631c23991d..fdf47b8461 100644 --- a/internal/schema/time.go +++ b/internal/schema/time.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:6 type Time struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/topic.go b/internal/schema/topic.go index c05745d2da..d49c9b1e07 100644 --- a/internal/schema/topic.go +++ b/internal/schema/topic.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:9 type Topic struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/typealias.go b/internal/schema/typealias.go index d9abea174f..73093ebd89 100644 --- a/internal/schema/typealias.go +++ b/internal/schema/typealias.go @@ -9,6 +9,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:5 type TypeAlias struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/typevalue.go b/internal/schema/typevalue.go index 27090fe62d..edab706e83 100644 --- a/internal/schema/typevalue.go +++ b/internal/schema/typevalue.go @@ -8,6 +8,7 @@ import ( var _ Value = (*TypeValue)(nil) +//protobuf:3 type TypeValue struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/unit.go b/internal/schema/unit.go index 6e748eeab7..e500c9f3ad 100644 --- a/internal/schema/unit.go +++ b/internal/schema/unit.go @@ -6,6 +6,7 @@ import ( schemapb "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1/schema" ) +//protobuf:10 type Unit struct { Pos Position `parser:"" protobuf:"1,optional"` diff --git a/internal/schema/verb.go b/internal/schema/verb.go index 48e3f567b9..dfc7d30479 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,24 @@ 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"` +} + +//protobuf:2 type Verb struct { Pos Position `parser:"" protobuf:"1,optional"` @@ -20,6 +39,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/jvm-runtime/ftl-runtime/common/deployment/src/main/java/xyz/block/ftl/deployment/ModuleBuilder.java b/jvm-runtime/ftl-runtime/common/deployment/src/main/java/xyz/block/ftl/deployment/ModuleBuilder.java index 3606c8bb9c..07a561e1b5 100644 --- a/jvm-runtime/ftl-runtime/common/deployment/src/main/java/xyz/block/ftl/deployment/ModuleBuilder.java +++ b/jvm-runtime/ftl-runtime/common/deployment/src/main/java/xyz/block/ftl/deployment/ModuleBuilder.java @@ -45,6 +45,7 @@ import xyz.block.ftl.runtime.builtin.HttpRequest; import xyz.block.ftl.runtime.builtin.HttpResponse; import xyz.block.ftl.v1.CallRequest; +import xyz.block.ftl.v1.schema.AliasKind; import xyz.block.ftl.v1.schema.Any; import xyz.block.ftl.v1.schema.Array; import xyz.block.ftl.v1.schema.Bool; @@ -474,7 +475,8 @@ private void buildDataElement(Data.Builder data, DotName className) { if (aliases.value() != null) { for (var alias : aliases.value().asStringArray()) { builder.addMetadata( - Metadata.newBuilder().setAlias(MetadataAlias.newBuilder().setKind(0).setAlias(alias))); + Metadata.newBuilder().setAlias( + MetadataAlias.newBuilder().setKind(AliasKind.ALIAS_KIND_JSON).setAlias(alias))); } } } diff --git a/scripts/ftl-schema b/scripts/go2proto similarity index 100% rename from scripts/ftl-schema rename to scripts/go2proto