diff --git a/backend/controller/console.go b/backend/controller/console.go index b90d6556fb..065f8e4c9f 100644 --- a/backend/controller/console.go +++ b/backend/controller/console.go @@ -62,10 +62,14 @@ func (c *ConsoleService) GetModules(ctx context.Context, req *connect.Request[pb case *schema.Verb: //nolint:forcetypeassert v := decl.ToProto().(*schemapb.Verb) - verbSchema := schema.VerbToSchema(v) + verbSchema := schema.VerbToSchema(v) // TODO: include all of the types that the verb references + requestData, ok := verbSchema.Request.(*schema.DataRef) + if !ok { + return nil, fmt.Errorf("expected request to be a data ref, got %T", verbSchema.Request) + } dataRef := schema.DataRef{ - Module: verbSchema.Request.Module, - Name: verbSchema.Request.Name, + Module: requestData.Module, + Name: requestData.Name, } jsonRequestSchema, err := schema.DataToJSONSchema(sch, dataRef) if err != nil { @@ -80,6 +84,7 @@ func (c *ConsoleService) GetModules(ctx context.Context, req *connect.Request[pb Schema: verbSchema.String(), JsonRequestSchema: string(jsonData), }) + case *schema.Data: //nolint:forcetypeassert d := decl.ToProto().(*schemapb.Data) diff --git a/backend/controller/ingress/ingress.go b/backend/controller/ingress/ingress.go index d4b6d8cd9a..589b6a0314 100644 --- a/backend/controller/ingress/ingress.go +++ b/backend/controller/ingress/ingress.go @@ -12,6 +12,7 @@ import ( "reflect" "strconv" "strings" + "time" "github.com/TBD54566975/ftl/backend/common/slices" "github.com/TBD54566975/ftl/backend/controller/dal" @@ -73,7 +74,7 @@ func ValidateCallBody(body []byte, verbRef *schema.VerbRef, sch *schema.Schema) return fmt.Errorf("HTTP request body is not valid JSON: %w", err) } - return validateRequestMap(verb.Request, []string{verb.Request.String()}, requestMap, sch) + return validateValue(verb.Request, []string{verb.Request.String()}, requestMap, sch) } type HTTPRequest struct { @@ -117,12 +118,16 @@ func ValidateAndExtractRequestBody(route *dal.IngressRoute, r *http.Request, sch return nil, err } } else { - requestMap, err := buildRequestMap(route, r, verb.Request, sch) + request, ok := verb.Request.(*schema.DataRef) + if !ok { + return nil, fmt.Errorf("verb %s input must be a data structure", verb.Name) + } + requestMap, err := buildRequest(route, r, request, sch) if err != nil { return nil, err } - err = validateRequestMap(verb.Request, []string{verb.Request.String()}, requestMap, sch) + err = validateRequestMap(request, []string{verb.Request.String()}, requestMap, sch) if err != nil { return nil, err } @@ -136,7 +141,7 @@ func ValidateAndExtractRequestBody(route *dal.IngressRoute, r *http.Request, sch return body, nil } -func buildRequestMap(route *dal.IngressRoute, r *http.Request, dataRef *schema.DataRef, sch *schema.Schema) (map[string]any, error) { +func buildRequest(route *dal.IngressRoute, r *http.Request, dataRef *schema.DataRef, sch *schema.Schema) (map[string]any, error) { requestMap := map[string]any{} matchSegments(route.Path, r.URL.Path, func(segment, value string) { requestMap[segment] = value @@ -205,6 +210,24 @@ func validateRequestMap(dataRef *schema.DataRef, path path, request map[string]a func validateValue(fieldType schema.Type, path path, value any, sch *schema.Schema) error { var typeMatches bool switch fieldType := fieldType.(type) { + case *schema.Unit: + rv := reflect.ValueOf(value) + if rv.Kind() != reflect.Map || rv.Len() != 0 { + return fmt.Errorf("%s must be an empty map", path) + } + return nil + + case *schema.Time: + str, ok := value.(string) + if !ok { + return fmt.Errorf("time %s must be an RFC3339 formatted string", path) + } + _, err := time.Parse(time.RFC3339Nano, str) + if err != nil { + return fmt.Errorf("time %s must be an RFC3339 formatted string: %w", path, err) + } + return nil + case *schema.Int: switch value := value.(type) { case float64: @@ -214,6 +237,7 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche typeMatches = true } } + case *schema.Float: switch value := value.(type) { case float64: @@ -223,8 +247,10 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche typeMatches = true } } + case *schema.String: _, typeMatches = value.(string) + case *schema.Bool: switch value := value.(type) { case bool: @@ -234,6 +260,7 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche typeMatches = true } } + case *schema.Array: rv := reflect.ValueOf(value) if rv.Kind() != reflect.Slice { @@ -248,6 +275,7 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche } } typeMatches = true + case *schema.Map: rv := reflect.ValueOf(value) if rv.Kind() != reflect.Map { @@ -266,6 +294,7 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche } } typeMatches = true + case *schema.DataRef: if valueMap, ok := value.(map[string]any); ok { if err := validateRequestMap(fieldType, path, valueMap, sch); err != nil { @@ -273,6 +302,7 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche } typeMatches = true } + case *schema.Bytes: _, typeMatches = value.([]byte) if bodyStr, ok := value.(string); ok { @@ -282,15 +312,13 @@ func validateValue(fieldType schema.Type, path path, value any, sch *schema.Sche } typeMatches = true } + case *schema.Optional: if value == nil { typeMatches = true } else { return validateValue(fieldType.Type, path, value, sch) } - - default: - return fmt.Errorf("%s has unsupported type %T", path, fieldType) } if !typeMatches { diff --git a/backend/schema/bool.go b/backend/schema/bool.go index d0fe3a6b7c..35c987fccc 100644 --- a/backend/schema/bool.go +++ b/backend/schema/bool.go @@ -14,10 +14,7 @@ type Bool struct { var _ Type = (*Bool)(nil) -func (*Bool) schemaChildren() []Node { return nil } -func (*Bool) schemaType() {} -func (*Bool) String() string { return "Bool" } - -func (b *Bool) ToProto() proto.Message { - return &schemapb.Bool{Pos: posToProto(b.Pos)} -} +func (*Bool) schemaChildren() []Node { return nil } +func (*Bool) schemaType() {} +func (*Bool) String() string { return "Bool" } +func (b *Bool) ToProto() proto.Message { return &schemapb.Bool{Pos: posToProto(b.Pos)} } diff --git a/backend/schema/builtin.go b/backend/schema/builtin.go new file mode 100644 index 0000000000..c97671ff1f --- /dev/null +++ b/backend/schema/builtin.go @@ -0,0 +1,33 @@ +package schema + +// BuiltinsSource is the schema source code for built-in types. +var BuiltinsSource = ` +// Built-in types for FTL. +builtin module builtin { + // HTTP request structure used for HTTP ingress verbs. + data HttpRequest { + method String + path String + pathParameters {String: String} + query {String: [String]} + headers {String: [String]} + body Bytes + } + + // HTTP response structure used for HTTP ingress verbs. + data HttpResponse { + status Int + headers {String: [String]} + body Bytes + } +} +` + +// Builtins returns a [Module] containing built-in types. +func Builtins() *Module { + module, err := ParseModuleString("builtins.ftl", BuiltinsSource) + if err != nil { + panic("failed to parse builtins: " + err.Error()) + } + return module +} diff --git a/backend/schema/jsonschema.go b/backend/schema/jsonschema.go index 19263e29c4..2ff8f0987b 100644 --- a/backend/schema/jsonschema.go +++ b/backend/schema/jsonschema.go @@ -40,6 +40,10 @@ func DataToJSONSchema(schema *Schema, dataRef DataRef) (*jsonschema.Schema, erro func nodeToJSSchema(node Node, dataRefs map[DataRef]bool) *jsonschema.Schema { switch node := node.(type) { + case *Unit: + st := jsonschema.Object + return &jsonschema.Schema{Type: &jsonschema.Type{SimpleTypes: &st}} + case *Data: st := jsonschema.Object schema := &jsonschema.Schema{ diff --git a/backend/schema/normalise.go b/backend/schema/normalise.go index 0218eb1dab..e55f7fef5c 100644 --- a/backend/schema/normalise.go +++ b/backend/schema/normalise.go @@ -8,6 +8,9 @@ func Normalise[T Node](n T) T { var zero Position var ni Node = n switch c := ni.(type) { + case *Unit: + c.Pos = zero + case *Schema: c.Pos = zero c.Modules = normaliseSlice(c.Modules) diff --git a/backend/schema/parser.go b/backend/schema/parser.go index b748b5f110..cf6a7ed401 100644 --- a/backend/schema/parser.go +++ b/backend/schema/parser.go @@ -13,10 +13,13 @@ import ( var ( declUnion = []Decl{&Data{}, &Verb{}} - nonOptionalTypeUnion = []Type{&Int{}, &Float{}, &String{}, &Bytes{}, &Bool{}, &Time{}, &Array{}, &Map{} /*&VerbRef{},*/, &DataRef{}} - typeUnion = append(nonOptionalTypeUnion, &Optional{}) - metadataUnion = []Metadata{&MetadataCalls{}, &MetadataIngress{}} - ingressUnion = []IngressPathComponent{&IngressPathLiteral{}, &IngressPathParameter{}} + nonOptionalTypeUnion = []Type{ + &Int{}, &Float{}, &String{}, &Bytes{}, &Bool{}, &Time{}, &Array{}, + &Map{}, &DataRef{}, &Unit{}, + } + typeUnion = append(nonOptionalTypeUnion, &Optional{}) + metadataUnion = []Metadata{&MetadataCalls{}, &MetadataIngress{}} + ingressUnion = []IngressPathComponent{&IngressPathLiteral{}, &IngressPathParameter{}} // Used by protobuf generation. unions = map[reflect.Type][]reflect.Type{ diff --git a/backend/schema/protobuf_enc.go b/backend/schema/protobuf_enc.go index 89520e4306..1e58a89f25 100644 --- a/backend/schema/protobuf_enc.go +++ b/backend/schema/protobuf_enc.go @@ -73,6 +73,9 @@ func ingressListToProto(nodes []IngressPathComponent) []*schemapb.IngressPathCom func typeToProto(t Type) *schemapb.Type { switch t := t.(type) { + case *Unit: + return &schemapb.Type{Value: &schemapb.Type_Unit{Unit: t.ToProto().(*schemapb.Unit)}} + case *VerbRef, *SourceRef, *SinkRef: panic("unreachable") diff --git a/backend/schema/unit.go b/backend/schema/unit.go new file mode 100644 index 0000000000..054cde65cb --- /dev/null +++ b/backend/schema/unit.go @@ -0,0 +1,20 @@ +package schema + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + + schemapb "github.com/TBD54566975/ftl/protos/xyz/block/ftl/v1/schema" +) + +type Unit struct { + Pos Position `parser:"" protobuf:"1,optional"` + + Unit bool `parser:"@'Unit'" protobuf:"-"` +} + +var _ Type = (*Unit)(nil) + +func (u *Unit) schemaType() {} +func (u *Unit) String() string { return "Unit" } +func (u *Unit) ToProto() protoreflect.ProtoMessage { return &schemapb.Unit{Pos: posToProto(u.Pos)} } +func (u *Unit) schemaChildren() []Node { return nil } diff --git a/backend/schema/validate.go b/backend/schema/validate.go index 67c9c3bd2a..53f58c3b88 100644 --- a/backend/schema/validate.go +++ b/backend/schema/validate.go @@ -17,42 +17,10 @@ var ( // keywords associated with these types. reservedIdentNames = map[string]bool{ "Int": true, "Float": true, "String": true, "Bytes": true, "Bool": true, - "Time": true, "Map": true, "Array": true, + "Time": true, "Unit": true, } - - // BuiltinsSource is the schema source code for built-in types. - BuiltinsSource = ` -// Built-in types for FTL. -builtin module builtin { - // HTTP request structure used for HTTP ingress verbs. - data HttpRequest { - method String - path String - pathParameters {String: String} - query {String: [String]} - headers {String: [String]} - body Bytes - } - - // HTTP response structure used for HTTP ingress verbs. - data HttpResponse { - status Int - headers {String: [String]} - body Bytes - } -} -` ) -// Builtins returns a [Module] containing built-in types. -func Builtins() *Module { - module, err := ParseModuleString("builtins.ftl", BuiltinsSource) - if err != nil { - panic("failed to parse builtins: " + err.Error()) - } - return module -} - // MustValidate panics if a schema is invalid. // // This is useful for testing. @@ -215,7 +183,7 @@ func ValidateModule(module *Module) error { *Time, *Map, *Module, *Schema, *String, *Bytes, *VerbRef, *MetadataCalls, *MetadataIngress, IngressPathComponent, *IngressPathLiteral, *IngressPathParameter, *Optional, - *SourceRef, *SinkRef: + *SourceRef, *SinkRef, *Unit: case Type, Metadata, Decl: // Union sql. } return next() diff --git a/backend/schema/verb.go b/backend/schema/verb.go index 22e1bee4c0..e03db6c80f 100644 --- a/backend/schema/verb.go +++ b/backend/schema/verb.go @@ -15,11 +15,21 @@ type Verb struct { Comments []string `parser:"@Comment*" protobuf:"3"` Name string `parser:"'verb' @Ident" protobuf:"2"` - Request *DataRef `parser:"'(' @@ ')'" protobuf:"4"` - Response *DataRef `parser:"@@" protobuf:"5"` + Request Type `parser:"'(' @@ ')'" protobuf:"4"` + Response Type `parser:"@@" protobuf:"5"` Metadata []Metadata `parser:"@@*" protobuf:"6"` } +// verb mySink(Req) Unit +// verb mySource(Unit) Req +// +// func MySource(context.Context) (Req, error) {} +// +// func Checkout(ctx context.Context, req CheckoutRequest) (CheckoutResponse, error) { +// addresses, err := ftl.Call(ctx, GetAddress, req.User) +// addresses, err := ftl.Call(ctx, GetAddress, GetAddressRequest{User: req.User}) +// return CheckoutResponse{}, nil + var _ Decl = (*Verb)(nil) func (v *Verb) schemaDecl() {} @@ -65,8 +75,8 @@ func (v *Verb) ToProto() proto.Message { Pos: posToProto(v.Pos), Name: v.Name, Comments: v.Comments, - Request: v.Request.ToProto().(*schemapb.DataRef), //nolint:forcetypeassert - Response: v.Response.ToProto().(*schemapb.DataRef), //nolint:forcetypeassert + Request: typeToProto(v.Request), + Response: typeToProto(v.Response), Metadata: metadataListToProto(v.Metadata), } } @@ -76,8 +86,8 @@ func VerbToSchema(s *schemapb.Verb) *Verb { Pos: posFromProto(s.Pos), Name: s.Name, Comments: s.Comments, - Request: dataRefToSchema(s.Request), - Response: dataRefToSchema(s.Response), + Request: typeToSchema(s.Request), + Response: typeToSchema(s.Response), Metadata: metadataListToSchema(s.Metadata), } } diff --git a/examples/kotlin/bin/.ftl@latest.pkg b/examples/kotlin/bin/.ftl@latest.pkg deleted file mode 120000 index 383f4511d4..0000000000 --- a/examples/kotlin/bin/.ftl@latest.pkg +++ /dev/null @@ -1 +0,0 @@ -hermit \ No newline at end of file diff --git a/examples/kotlin/bin/.maven-3.9.6.pkg b/examples/kotlin/bin/.maven-3.9.6.pkg deleted file mode 120000 index 383f4511d4..0000000000 --- a/examples/kotlin/bin/.maven-3.9.6.pkg +++ /dev/null @@ -1 +0,0 @@ -hermit \ No newline at end of file diff --git a/examples/kotlin/bin/.openjdk-17.0.8_7.pkg b/examples/kotlin/bin/.openjdk-17.0.8_7.pkg deleted file mode 120000 index 383f4511d4..0000000000 --- a/examples/kotlin/bin/.openjdk-17.0.8_7.pkg +++ /dev/null @@ -1 +0,0 @@ -hermit \ No newline at end of file diff --git a/examples/kotlin/bin/README.hermit.md b/examples/kotlin/bin/README.hermit.md deleted file mode 100644 index e889550ba4..0000000000 --- a/examples/kotlin/bin/README.hermit.md +++ /dev/null @@ -1,7 +0,0 @@ -# Hermit environment - -This is a [Hermit](https://github.com/cashapp/hermit) bin directory. - -The symlinks in this directory are managed by Hermit and will automatically -download and install Hermit itself as well as packages. These packages are -local to this environment. diff --git a/examples/kotlin/bin/activate-hermit b/examples/kotlin/bin/activate-hermit deleted file mode 100755 index fe28214d33..0000000000 --- a/examples/kotlin/bin/activate-hermit +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -# This file must be used with "source bin/activate-hermit" from bash or zsh. -# You cannot run it directly -# -# THIS FILE IS GENERATED; DO NOT MODIFY - -if [ "${BASH_SOURCE-}" = "$0" ]; then - echo "You must source this script: \$ source $0" >&2 - exit 33 -fi - -BIN_DIR="$(dirname "${BASH_SOURCE[0]:-${(%):-%x}}")" -if "${BIN_DIR}/hermit" noop > /dev/null; then - eval "$("${BIN_DIR}/hermit" activate "${BIN_DIR}/..")" - - if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ]; then - hash -r 2>/dev/null - fi - - echo "Hermit environment $("${HERMIT_ENV}"/bin/hermit env HERMIT_ENV) activated" -fi diff --git a/examples/kotlin/bin/ftl b/examples/kotlin/bin/ftl deleted file mode 120000 index 47611de9b6..0000000000 --- a/examples/kotlin/bin/ftl +++ /dev/null @@ -1 +0,0 @@ -.ftl@latest.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/ftl-controller b/examples/kotlin/bin/ftl-controller deleted file mode 120000 index 47611de9b6..0000000000 --- a/examples/kotlin/bin/ftl-controller +++ /dev/null @@ -1 +0,0 @@ -.ftl@latest.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/ftl-initdb b/examples/kotlin/bin/ftl-initdb deleted file mode 120000 index 47611de9b6..0000000000 --- a/examples/kotlin/bin/ftl-initdb +++ /dev/null @@ -1 +0,0 @@ -.ftl@latest.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/ftl-runner b/examples/kotlin/bin/ftl-runner deleted file mode 120000 index 47611de9b6..0000000000 --- a/examples/kotlin/bin/ftl-runner +++ /dev/null @@ -1 +0,0 @@ -.ftl@latest.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/hermit b/examples/kotlin/bin/hermit deleted file mode 100755 index 7fef769248..0000000000 --- a/examples/kotlin/bin/hermit +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# -# THIS FILE IS GENERATED; DO NOT MODIFY - -set -eo pipefail - -export HERMIT_USER_HOME=~ - -if [ -z "${HERMIT_STATE_DIR}" ]; then - case "$(uname -s)" in - Darwin) - export HERMIT_STATE_DIR="${HERMIT_USER_HOME}/Library/Caches/hermit" - ;; - Linux) - export HERMIT_STATE_DIR="${XDG_CACHE_HOME:-${HERMIT_USER_HOME}/.cache}/hermit" - ;; - esac -fi - -export HERMIT_DIST_URL="${HERMIT_DIST_URL:-https://github.com/cashapp/hermit/releases/download/stable}" -HERMIT_CHANNEL="$(basename "${HERMIT_DIST_URL}")" -export HERMIT_CHANNEL -export HERMIT_EXE=${HERMIT_EXE:-${HERMIT_STATE_DIR}/pkg/hermit@${HERMIT_CHANNEL}/hermit} - -if [ ! -x "${HERMIT_EXE}" ]; then - echo "Bootstrapping ${HERMIT_EXE} from ${HERMIT_DIST_URL}" 1>&2 - INSTALL_SCRIPT="$(mktemp)" - # This value must match that of the install script - INSTALL_SCRIPT_SHA256="180e997dd837f839a3072a5e2f558619b6d12555cd5452d3ab19d87720704e38" - if [ "${INSTALL_SCRIPT_SHA256}" = "BYPASS" ]; then - curl -fsSL "${HERMIT_DIST_URL}/install.sh" -o "${INSTALL_SCRIPT}" - else - # Install script is versioned by its sha256sum value - curl -fsSL "${HERMIT_DIST_URL}/install-${INSTALL_SCRIPT_SHA256}.sh" -o "${INSTALL_SCRIPT}" - # Verify install script's sha256sum - openssl dgst -sha256 "${INSTALL_SCRIPT}" | \ - awk -v EXPECTED="$INSTALL_SCRIPT_SHA256" \ - '$2!=EXPECTED {print "Install script sha256 " $2 " does not match " EXPECTED; exit 1}' - fi - /bin/bash "${INSTALL_SCRIPT}" 1>&2 -fi - -exec "${HERMIT_EXE}" --level=fatal exec "$0" -- "$@" diff --git a/examples/kotlin/bin/hermit.hcl b/examples/kotlin/bin/hermit.hcl deleted file mode 100644 index d68191fd18..0000000000 --- a/examples/kotlin/bin/hermit.hcl +++ /dev/null @@ -1 +0,0 @@ -sources = ["https://github.com/TBD54566975/hermit-ftl.git", "https://github.com/cashapp/hermit-packages.git"] \ No newline at end of file diff --git a/examples/kotlin/bin/jar b/examples/kotlin/bin/jar deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jar +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jarsigner b/examples/kotlin/bin/jarsigner deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jarsigner +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/java b/examples/kotlin/bin/java deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/java +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/javac b/examples/kotlin/bin/javac deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/javac +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/javadoc b/examples/kotlin/bin/javadoc deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/javadoc +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/javap b/examples/kotlin/bin/javap deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/javap +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jcmd b/examples/kotlin/bin/jcmd deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jcmd +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jconsole b/examples/kotlin/bin/jconsole deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jconsole +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jdb b/examples/kotlin/bin/jdb deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jdb +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jdeprscan b/examples/kotlin/bin/jdeprscan deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jdeprscan +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jdeps b/examples/kotlin/bin/jdeps deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jdeps +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jfr b/examples/kotlin/bin/jfr deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jfr +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jhsdb b/examples/kotlin/bin/jhsdb deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jhsdb +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jimage b/examples/kotlin/bin/jimage deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jimage +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jinfo b/examples/kotlin/bin/jinfo deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jinfo +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jlink b/examples/kotlin/bin/jlink deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jlink +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jmap b/examples/kotlin/bin/jmap deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jmap +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jmod b/examples/kotlin/bin/jmod deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jmod +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jpackage b/examples/kotlin/bin/jpackage deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jpackage +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jps b/examples/kotlin/bin/jps deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jps +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jrunscript b/examples/kotlin/bin/jrunscript deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jrunscript +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jshell b/examples/kotlin/bin/jshell deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jshell +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jstack b/examples/kotlin/bin/jstack deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jstack +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jstat b/examples/kotlin/bin/jstat deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jstat +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/jstatd b/examples/kotlin/bin/jstatd deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/jstatd +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/keytool b/examples/kotlin/bin/keytool deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/keytool +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/mvn b/examples/kotlin/bin/mvn deleted file mode 120000 index 50c2105e4e..0000000000 --- a/examples/kotlin/bin/mvn +++ /dev/null @@ -1 +0,0 @@ -.maven-3.9.6.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/mvnDebug b/examples/kotlin/bin/mvnDebug deleted file mode 120000 index 50c2105e4e..0000000000 --- a/examples/kotlin/bin/mvnDebug +++ /dev/null @@ -1 +0,0 @@ -.maven-3.9.6.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/rmiregistry b/examples/kotlin/bin/rmiregistry deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/rmiregistry +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/bin/serialver b/examples/kotlin/bin/serialver deleted file mode 120000 index 7d19c5ad1d..0000000000 --- a/examples/kotlin/bin/serialver +++ /dev/null @@ -1 +0,0 @@ -.openjdk-17.0.8_7.pkg \ No newline at end of file diff --git a/examples/kotlin/pom.xml b/examples/kotlin/pom.xml index 160a69efbd..f519f4c2f0 100644 --- a/examples/kotlin/pom.xml +++ b/examples/kotlin/pom.xml @@ -206,4 +206,4 @@ - \ No newline at end of file + diff --git a/frontend/src/features/verbs/VerbPage.tsx b/frontend/src/features/verbs/VerbPage.tsx index ca1205ae1c..87feaff710 100644 --- a/frontend/src/features/verbs/VerbPage.tsx +++ b/frontend/src/features/verbs/VerbPage.tsx @@ -9,7 +9,6 @@ import { SidePanelProvider } from '../../providers/side-panel-provider' import { callFilter, eventTypesFilter, streamEvents } from '../../services/console.service' import { CallList } from '../calls/CallList' import { VerbForm } from './VerbForm' -import { buildVerbSchema } from './verb.utils' export const VerbPage = () => { const { deploymentName, verbName } = useParams() @@ -18,10 +17,6 @@ export const VerbPage = () => { const [verb, setVerb] = useState() const [calls, setCalls] = useState([]) - const callData = - module?.data.filter((data) => [verb?.verb?.request?.name, verb?.verb?.response?.name].includes(data.data?.name)) ?? - [] - useEffect(() => { if (modules) { const module = modules.modules.find((module) => module.deploymentName === deploymentName?.toLocaleLowerCase()) @@ -68,15 +63,7 @@ export const VerbPage = () => {
- {verb?.verb?.request?.toJsonString() && ( - d.schema), - )} - language='json' - /> - )} + {verb?.verb?.request?.toJsonString() && }
diff --git a/frontend/src/features/verbs/VerbTab.tsx b/frontend/src/features/verbs/VerbTab.tsx deleted file mode 100644 index 9f1e65ca5d..0000000000 --- a/frontend/src/features/verbs/VerbTab.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { useContext } from 'react' -import { CodeBlock } from '../../components/CodeBlock' -import { modulesContext } from '../../providers/modules-provider' -import { VerbCalls } from './VerbCalls' -import { VerbForm } from './VerbForm' -import { buildVerbSchema } from './verb.utils' - -export const VerbTab = ({ id }: { id: string }) => { - const [moduleId, verbName] = id.split('.') - const modules = useContext(modulesContext) - const module = modules.modules.find((module) => module?.name === moduleId) - const verb = module?.verbs.find((v) => v.verb?.name === verbName) - - const callData = - module?.data.filter((data) => [verb?.verb?.request?.name, verb?.verb?.response?.name].includes(data.data?.name)) ?? - [] - - if (!module || !verb?.verb) { - return <> - } - - return ( -
- - -
- d.schema), - )} - language='graphql' - /> -
- - -
- ) -} diff --git a/frontend/src/features/verbs/verb.utils.ts b/frontend/src/features/verbs/verb.utils.ts index 86a0c1e386..6fb001b0cf 100644 --- a/frontend/src/features/verbs/verb.utils.ts +++ b/frontend/src/features/verbs/verb.utils.ts @@ -1,9 +1,5 @@ import { VerbRef } from '../../protos/xyz/block/ftl/v1/schema/schema_pb' -export const buildVerbSchema = (verbSchema: string, dataScemas: string[]): string => { - return dataScemas.join('\n\n') + '\n\n' + verbSchema -} - export const verbRefString = (verb: VerbRef): string => { return `${verb.module}.${verb.name}` } diff --git a/frontend/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts b/frontend/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts index 1fc4e910f4..4deaf37521 100644 --- a/frontend/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts +++ b/frontend/src/protos/xyz/block/ftl/v1/schema/schema_pb.ts @@ -9,6 +9,202 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialM import { Message, proto3, protoInt64 } from "@bufbuild/protobuf"; import { ModuleRuntime, VerbRuntime } from "./runtime_pb.js"; +/** + * @generated from message xyz.block.ftl.v1.schema.DataRef + */ +export class DataRef extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; + */ + pos?: Position; + + /** + * @generated from field: string name = 2; + */ + name = ""; + + /** + * @generated from field: string module = 3; + */ + module = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.DataRef"; + 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 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): DataRef { + return new DataRef().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): DataRef { + return new DataRef().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): DataRef { + return new DataRef().fromJsonString(jsonString, options); + } + + static equals(a: DataRef | PlainMessage | undefined, b: DataRef | PlainMessage | undefined): boolean { + return proto3.util.equals(DataRef, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.schema.SinkRef + */ +export class SinkRef extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; + */ + pos?: Position; + + /** + * @generated from field: string name = 2; + */ + name = ""; + + /** + * @generated from field: string module = 3; + */ + module = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.SinkRef"; + 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 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SinkRef { + return new SinkRef().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SinkRef { + return new SinkRef().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SinkRef { + return new SinkRef().fromJsonString(jsonString, options); + } + + static equals(a: SinkRef | PlainMessage | undefined, b: SinkRef | PlainMessage | undefined): boolean { + return proto3.util.equals(SinkRef, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.schema.SourceRef + */ +export class SourceRef extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; + */ + pos?: Position; + + /** + * @generated from field: string name = 2; + */ + name = ""; + + /** + * @generated from field: string module = 3; + */ + module = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.SourceRef"; + 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 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SourceRef { + return new SourceRef().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SourceRef { + return new SourceRef().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SourceRef { + return new SourceRef().fromJsonString(jsonString, options); + } + + static equals(a: SourceRef | PlainMessage | undefined, b: SourceRef | PlainMessage | undefined): boolean { + return proto3.util.equals(SourceRef, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.schema.VerbRef + */ +export class VerbRef extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; + */ + pos?: Position; + + /** + * @generated from field: string name = 2; + */ + name = ""; + + /** + * @generated from field: string module = 3; + */ + module = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.VerbRef"; + 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 */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): VerbRef { + return new VerbRef().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): VerbRef { + return new VerbRef().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): VerbRef { + return new VerbRef().fromJsonString(jsonString, options); + } + + static equals(a: VerbRef | PlainMessage | undefined, b: VerbRef | PlainMessage | undefined): boolean { + return proto3.util.equals(VerbRef, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.schema.Array */ @@ -858,202 +1054,6 @@ export class Position extends Message { } } -/** - * @generated from message xyz.block.ftl.v1.schema.DataRef - */ -export class DataRef extends Message { - /** - * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; - */ - pos?: Position; - - /** - * @generated from field: string name = 2; - */ - name = ""; - - /** - * @generated from field: string module = 3; - */ - module = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.schema.DataRef"; - 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 */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): DataRef { - return new DataRef().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): DataRef { - return new DataRef().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): DataRef { - return new DataRef().fromJsonString(jsonString, options); - } - - static equals(a: DataRef | PlainMessage | undefined, b: DataRef | PlainMessage | undefined): boolean { - return proto3.util.equals(DataRef, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.v1.schema.SinkRef - */ -export class SinkRef extends Message { - /** - * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; - */ - pos?: Position; - - /** - * @generated from field: string name = 2; - */ - name = ""; - - /** - * @generated from field: string module = 3; - */ - module = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.schema.SinkRef"; - 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 */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SinkRef { - return new SinkRef().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SinkRef { - return new SinkRef().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SinkRef { - return new SinkRef().fromJsonString(jsonString, options); - } - - static equals(a: SinkRef | PlainMessage | undefined, b: SinkRef | PlainMessage | undefined): boolean { - return proto3.util.equals(SinkRef, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.v1.schema.SourceRef - */ -export class SourceRef extends Message { - /** - * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; - */ - pos?: Position; - - /** - * @generated from field: string name = 2; - */ - name = ""; - - /** - * @generated from field: string module = 3; - */ - module = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.schema.SourceRef"; - 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 */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): SourceRef { - return new SourceRef().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): SourceRef { - return new SourceRef().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): SourceRef { - return new SourceRef().fromJsonString(jsonString, options); - } - - static equals(a: SourceRef | PlainMessage | undefined, b: SourceRef | PlainMessage | undefined): boolean { - return proto3.util.equals(SourceRef, a, b); - } -} - -/** - * @generated from message xyz.block.ftl.v1.schema.VerbRef - */ -export class VerbRef extends Message { - /** - * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; - */ - pos?: Position; - - /** - * @generated from field: string name = 2; - */ - name = ""; - - /** - * @generated from field: string module = 3; - */ - module = ""; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "xyz.block.ftl.v1.schema.VerbRef"; - 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 */ }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): VerbRef { - return new VerbRef().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): VerbRef { - return new VerbRef().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): VerbRef { - return new VerbRef().fromJsonString(jsonString, options); - } - - static equals(a: VerbRef | PlainMessage | undefined, b: VerbRef | PlainMessage | undefined): boolean { - return proto3.util.equals(VerbRef, a, b); - } -} - /** * @generated from message xyz.block.ftl.v1.schema.Schema */ @@ -1234,7 +1234,13 @@ export class Type extends Message { case: "dataRef"; } | { /** - * @generated from field: xyz.block.ftl.v1.schema.Optional optional = 10; + * @generated from field: xyz.block.ftl.v1.schema.Unit unit = 10; + */ + value: Unit; + case: "unit"; + } | { + /** + * @generated from field: xyz.block.ftl.v1.schema.Optional optional = 11; */ value: Optional; case: "optional"; @@ -1257,7 +1263,8 @@ export class Type extends Message { { no: 7, name: "array", kind: "message", T: Array, oneof: "value" }, { no: 8, name: "map", kind: "message", T: Map, oneof: "value" }, { no: 9, name: "dataRef", kind: "message", T: DataRef, oneof: "value" }, - { no: 10, name: "optional", kind: "message", T: Optional, oneof: "value" }, + { no: 10, name: "unit", kind: "message", T: Unit, oneof: "value" }, + { no: 11, name: "optional", kind: "message", T: Optional, oneof: "value" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Type { @@ -1277,6 +1284,43 @@ export class Type extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.schema.Unit + */ +export class Unit extends Message { + /** + * @generated from field: optional xyz.block.ftl.v1.schema.Position pos = 1; + */ + pos?: Position; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.schema.Unit"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "pos", kind: "message", T: Position, opt: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Unit { + return new Unit().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Unit { + return new Unit().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Unit { + return new Unit().fromJsonString(jsonString, options); + } + + static equals(a: Unit | PlainMessage | undefined, b: Unit | PlainMessage | undefined): boolean { + return proto3.util.equals(Unit, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.schema.Verb */ @@ -1302,14 +1346,14 @@ export class Verb extends Message { comments: string[] = []; /** - * @generated from field: xyz.block.ftl.v1.schema.DataRef request = 4; + * @generated from field: xyz.block.ftl.v1.schema.Type request = 4; */ - request?: DataRef; + request?: Type; /** - * @generated from field: xyz.block.ftl.v1.schema.DataRef response = 5; + * @generated from field: xyz.block.ftl.v1.schema.Type response = 5; */ - response?: DataRef; + response?: Type; /** * @generated from field: repeated xyz.block.ftl.v1.schema.Metadata metadata = 6; @@ -1328,8 +1372,8 @@ export class Verb extends Message { { 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: 4, name: "request", kind: "message", T: DataRef }, - { no: 5, name: "response", kind: "message", T: DataRef }, + { no: 4, name: "request", kind: "message", T: Type }, + { no: 5, name: "response", kind: "message", T: Type }, { no: 6, name: "metadata", kind: "message", T: Metadata, repeated: true }, ]); diff --git a/go-runtime/compile/generate/external_module.go b/go-runtime/compile/generate/external_module.go index 4f958f4684..b06ab8cec2 100644 --- a/go-runtime/compile/generate/external_module.go +++ b/go-runtime/compile/generate/external_module.go @@ -73,6 +73,9 @@ func ExternalModule(w io.Writer, module *schema.Module, importRoot string) error func genType(module *schema.Module, t schema.Type) string { switch t := t.(type) { + case *schema.Unit: + return "sdk.Unit" + case *schema.DataRef: if t.Module == module.Name { return t.Name diff --git a/go-runtime/compile/schema.go b/go-runtime/compile/schema.go index 7a8d2499a0..09fe91f149 100644 --- a/go-runtime/compile/schema.go +++ b/go-runtime/compile/schema.go @@ -155,28 +155,45 @@ func isType[T types.Type](t types.Type) bool { return ok } -func checkSignature(sig *types.Signature) error { +func checkSignature(sig *types.Signature) (req, resp *types.Var, err error) { params := sig.Params() results := sig.Results() - if params.Len() != 2 { - return fmt.Errorf("must have exactly two parameters in the form (context.Context, struct) but has %d", params.Len()) + + if params.Len() > 2 { + return nil, nil, fmt.Errorf("must have at most two parameters (context.Context, struct)") } - if results.Len() != 2 { - return fmt.Errorf("must have exactly two result values in the form (error, struct) but has %d", results.Len()) + if params.Len() == 0 { + return nil, nil, fmt.Errorf("first parameter must be context.Context") } if !types.AssertableTo(contextIfaceType(), params.At(0).Type()) { - return fmt.Errorf("first parameter must be of type context.Context but is %s", params.At(0).Type()) + return nil, nil, fmt.Errorf("first parameter must be of type context.Context but is %s", params.At(0).Type()) } - if !isType[*types.Struct](params.At(1).Type()) { - return fmt.Errorf("second parameter must be a struct but is %s", params.At(1).Type()) + if params.Len() == 2 { + if !isType[*types.Struct](params.At(1).Type()) { + return nil, nil, fmt.Errorf("second parameter must be a struct but is %s", params.At(1).Type()) + } + req = params.At(1) } - if !types.AssertableTo(errorIFaceType(), results.At(1).Type()) { - return fmt.Errorf("first result must be an error but is %s", results.At(0).Type()) + + if results.Len() > 2 { + return nil, nil, fmt.Errorf("must have at most two results (struct, error)") } - if !isType[*types.Struct](results.At(0).Type()) { - return fmt.Errorf("first result must be a struct but is %s", results.At(0).Type()) + if results.Len() == 0 { + return nil, nil, fmt.Errorf("must at least return an error") } - return nil + if !types.AssertableTo(errorIFaceType(), results.At(results.Len()-1).Type()) { + return nil, nil, fmt.Errorf("must return an error but is %s", results.At(0).Type()) + } + if results.Len() == 2 { + if !isType[*types.Struct](results.At(0).Type()) { + return nil, nil, fmt.Errorf("first result must be a struct but is %s", results.At(0).Type()) + } + resp = results.At(0) + } + if params.Len() == 1 && results.Len() == 1 { + return nil, nil, fmt.Errorf("must either accept an input or return a result, but does neither") + } + return req, resp, nil } func goPosToSchemaPos(pos token.Pos) schema.Position { @@ -233,16 +250,27 @@ func visitFuncDecl(pctx *parseContext, node *ast.FuncDecl) (verb *schema.Verb, e } params := sig.Params() results := sig.Results() - if err := checkSignature(sig); err != nil { - return nil, err - } - req, err := parseStruct(pctx, node, params.At(1).Type()) + reqt, respt, err := checkSignature(sig) if err != nil { return nil, err } - resp, err := parseStruct(pctx, node, results.At(0).Type()) - if err != nil { - return nil, err + var req schema.Type + if reqt != nil { + req, err = parseStruct(pctx, node, params.At(1).Type()) + if err != nil { + return nil, err + } + } else { + req = &schema.Unit{} + } + var resp schema.Type + if respt != nil { + resp, err = parseStruct(pctx, node, results.At(0).Type()) + if err != nil { + return nil, err + } + } else { + resp = &schema.Unit{} } verb = &schema.Verb{ Pos: goPosToSchemaPos(node.Pos()), diff --git a/go-runtime/sdk/types.go b/go-runtime/sdk/types.go index 1b9d39bbb2..26d460b8ec 100644 --- a/go-runtime/sdk/types.go +++ b/go-runtime/sdk/types.go @@ -9,6 +9,12 @@ import ( schemapb "github.com/TBD54566975/ftl/protos/xyz/block/ftl/v1/schema" ) +// Unit is a type that has no value. +// +// It can be used as a parameter or return value to indicate that a function +// does not accept or return any value. +var Unit = DataRef{Module: "builtin", Name: "Unit"} + // Ref is an untyped reference to a symbol. type Ref struct { Module string `json:"module"` diff --git a/kotlin-runtime/ftl-generator/src/main/kotlin/xyz/block/ftl/generator/ModuleGenerator.kt b/kotlin-runtime/ftl-generator/src/main/kotlin/xyz/block/ftl/generator/ModuleGenerator.kt index 607d67d2a1..eccacc00b9 100644 --- a/kotlin-runtime/ftl-generator/src/main/kotlin/xyz/block/ftl/generator/ModuleGenerator.kt +++ b/kotlin-runtime/ftl-generator/src/main/kotlin/xyz/block/ftl/generator/ModuleGenerator.kt @@ -49,7 +49,7 @@ class ModuleGenerator() { types.forEach { file.addType(buildDataClass(it, namespace)) } val verbs = module.decls.mapNotNull { it.verb } - verbs.forEach { moduleClass.addFunction(buildVerbFunction(className, it)) } + verbs.forEach { moduleClass.addFunction(buildVerbFunction(className, namespace, it)) } file.addType(moduleClass.build()) return file.build() @@ -91,7 +91,7 @@ class ModuleGenerator() { return dataClassBuilder.build() } - private fun buildVerbFunction(className: String, verb: Verb): FunSpec { + private fun buildVerbFunction(className: String, namespace: String, verb: Verb): FunSpec { val verbFunBuilder = FunSpec.builder(verb.name).addKdoc(verb.comments.joinToString("\n")).addAnnotation( AnnotationSpec.builder(xyz.block.ftl.Verb::class).build() @@ -112,12 +112,12 @@ class ModuleGenerator() { verb.request?.let { verbFunBuilder.addParameter( - "req", TypeVariableName(it.name) + "req", getTypeClass(it, namespace) ) } verb.response?.let { - verbFunBuilder.returns(TypeVariableName(it.name)) + verbFunBuilder.returns(getTypeClass(it, namespace)) } val message = diff --git a/kotlin-runtime/ftl-generator/src/test/kotlin/xyz/block/ftl/generator/ModuleGeneratorTest.kt b/kotlin-runtime/ftl-generator/src/test/kotlin/xyz/block/ftl/generator/ModuleGeneratorTest.kt index e55e9a3286..7ca9fff614 100644 --- a/kotlin-runtime/ftl-generator/src/test/kotlin/xyz/block/ftl/generator/ModuleGeneratorTest.kt +++ b/kotlin-runtime/ftl-generator/src/test/kotlin/xyz/block/ftl/generator/ModuleGeneratorTest.kt @@ -136,16 +136,16 @@ public class TestModule() verb = Verb( name = "TestVerb", comments = listOf("TestVerb comments"), - request = DataRef(name = "TestRequest"), - response = DataRef(name = "TestResponse") + request = Type(dataRef = DataRef(name = "TestRequest")), + response = Type(dataRef = DataRef(name = "TestResponse")) ) ), Decl( verb = Verb( name = "TestIngressVerb", comments = listOf("TestIngressVerb comments"), - request = DataRef(name = "TestRequest"), - response = DataRef(name = "TestResponse"), + request = Type(dataRef = DataRef(name = "TestRequest")), + response = Type(dataRef = DataRef(name = "TestResponse")), metadata = listOf( Metadata( ingress = MetadataIngress( diff --git a/kotlin-runtime/ftl-runtime/src/main/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRule.kt b/kotlin-runtime/ftl-runtime/src/main/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRule.kt index f082151d73..9429992eb4 100644 --- a/kotlin-runtime/ftl-runtime/src/main/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRule.kt +++ b/kotlin-runtime/ftl-runtime/src/main/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRule.kt @@ -164,12 +164,12 @@ class SchemaExtractor( val verbSourcePos = verb.getLineAndColumn() val requestRef = verb.valueParameters.last()?.let { val position = it.getLineAndColumn().toPosition(filename) - return@let it.typeReference?.resolveType()?.toSchemaType(position)?.dataRef + return@let it.typeReference?.resolveType()?.toSchemaType(position) } requireNotNull(requestRef) { "$verbSourcePos Could not resolve request type for ${verb.name}" } val returnRef = verb.createTypeBindingForReturnType(bindingContext)?.let { val position = it.psiElement.getLineAndColumn().toPosition(filename) - return@let it.type.toSchemaType(position).dataRef + return@let it.type.toSchemaType(position) } requireNotNull(returnRef) { "$verbSourcePos Could not resolve response type for ${verb.name}" } @@ -204,7 +204,7 @@ class SchemaExtractor( .toSet() } - private fun extractIngress(requestRef: DataRef, returnRef: DataRef): MetadataIngress? { + private fun extractIngress(requestType: Type, responseType: Type): MetadataIngress? { return verb.annotationEntries.firstOrNull { listOf( Ingress::class.qualifiedName, @@ -215,18 +215,21 @@ class SchemaExtractor( val type = if (annotationName == Ingress::class.qualifiedName) "ftl" else "http" val sourcePos = annotationEntry.getLineAndColumn() - println("annotationName: $annotationName") - println("Ingress: ${Ingress::class.qualifiedName}") - println("type: $type") - println("requestRef: $requestRef") - println("returnRef: $returnRef") + require(requestType.dataRef != null) { + "$sourcePos ingress ${verb.name} request must be a data class" + } + require(responseType.dataRef != null) { + "$sourcePos ingress ${verb.name} response must be a data class" + } - // If it's an HTTP ingress, validate the signature. - require( - type != "http" || (requestRef.compare("builtin", "HttpRequest") && returnRef.compare("builtin", "HttpResponse")) - ) { - "$sourcePos ${type} ${verb.name}(${requestRef.text()}) ${returnRef.text()} annotated with @HttpIngress must have signature " + - "${verb.name}(builtin.HttpRequest) builtin.HttpResponse" + // If it's HTTP ingress, validate the signature. + if (type == "http") { + require(requestType.dataRef != null && requestType.dataRef.compare("builtin", "HttpRequest")) { + "$sourcePos @HttpIngress-annotated ${verb.name} request must be ftl.builtin.HttpRequest" + } + require(responseType.dataRef != null && responseType.dataRef.compare("builtin", "HttpRequest")) { + "$sourcePos @HttpIngress-annotated ${verb.name} response must be ftl.builtin.HttpResponse" + } } require(annotationEntry.valueArguments.size >= 2) { diff --git a/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/ContextTest.kt b/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/ContextTest.kt index 1b99965e04..e5af8809bf 100644 --- a/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/ContextTest.kt +++ b/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/ContextTest.kt @@ -13,12 +13,13 @@ data class EchoResponse(val text: String) class Echo { @Verb fun echo(context: Context, req: EchoRequest): EchoResponse { - val time = context.call(Time::time, TimeRequest()) + val time = context.call(Time::time, TimeRequest) return EchoResponse("Hello ${req.user}, the time is ${time.time}!") } } -data class TimeRequest(val _unused: Unit = Unit) +typealias TimeRequest = Unit + data class TimeResponse(val time: OffsetDateTime) val staticTime = OffsetDateTime.now() @@ -42,7 +43,7 @@ class ContextTest { expected = EchoResponse("Hello Alice, the time is $staticTime!"), ), TestCase( - invoke = { ctx -> ctx.call(Time::time, TimeRequest()) }, + invoke = { ctx -> ctx.call(Time::time, TimeRequest) }, expected = TimeResponse(staticTime), ), ) diff --git a/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRuleTest.kt b/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRuleTest.kt index 5b6707fc14..1325beb941 100644 --- a/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRuleTest.kt +++ b/kotlin-runtime/ftl-runtime/src/test/kotlin/xyz/block/ftl/schemaextractor/ExtractSchemaRuleTest.kt @@ -152,13 +152,17 @@ internal class ExtractSchemaRuleTest(private val env: KotlinCoreEnvironment) { * Echoes the given message. */""" ), - request = DataRef( - name = "EchoRequest", - module = "echo" + request = Type( + dataRef = DataRef( + name = "EchoRequest", + module = "echo" + ) ), - response = DataRef( - name = "EchoResponse", - module = "echo" + response = Type( + dataRef = DataRef( + name = "EchoResponse", + module = "echo" + ) ), metadata = listOf( Metadata( diff --git a/protos/xyz/block/ftl/v1/schema/schema.pb.go b/protos/xyz/block/ftl/v1/schema/schema.pb.go index e33e461162..003d510680 100644 --- a/protos/xyz/block/ftl/v1/schema/schema.pb.go +++ b/protos/xyz/block/ftl/v1/schema/schema.pb.go @@ -22,17 +22,18 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type Array struct { +type DataRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Element *Type `protobuf:"bytes,2,opt,name=element,proto3" json:"element,omitempty"` + 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"` } -func (x *Array) Reset() { - *x = Array{} +func (x *DataRef) Reset() { + *x = DataRef{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -40,13 +41,13 @@ func (x *Array) Reset() { } } -func (x *Array) String() string { +func (x *DataRef) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Array) ProtoMessage() {} +func (*DataRef) ProtoMessage() {} -func (x *Array) ProtoReflect() protoreflect.Message { +func (x *DataRef) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -58,35 +59,44 @@ func (x *Array) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Array.ProtoReflect.Descriptor instead. -func (*Array) Descriptor() ([]byte, []int) { +// Deprecated: Use DataRef.ProtoReflect.Descriptor instead. +func (*DataRef) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{0} } -func (x *Array) GetPos() *Position { +func (x *DataRef) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *Array) GetElement() *Type { +func (x *DataRef) GetName() string { if x != nil { - return x.Element + return x.Name } - return nil + return "" } -type Bool struct { +func (x *DataRef) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +type SinkRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + 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"` } -func (x *Bool) Reset() { - *x = Bool{} +func (x *SinkRef) Reset() { + *x = SinkRef{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -94,13 +104,13 @@ func (x *Bool) Reset() { } } -func (x *Bool) String() string { +func (x *SinkRef) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Bool) ProtoMessage() {} +func (*SinkRef) ProtoMessage() {} -func (x *Bool) ProtoReflect() protoreflect.Message { +func (x *SinkRef) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -112,28 +122,44 @@ func (x *Bool) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Bool.ProtoReflect.Descriptor instead. -func (*Bool) Descriptor() ([]byte, []int) { +// Deprecated: Use SinkRef.ProtoReflect.Descriptor instead. +func (*SinkRef) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{1} } -func (x *Bool) GetPos() *Position { +func (x *SinkRef) GetPos() *Position { if x != nil { return x.Pos } return nil } -type Bytes struct { +func (x *SinkRef) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SinkRef) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +type SourceRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + 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"` } -func (x *Bytes) Reset() { - *x = Bytes{} +func (x *SourceRef) Reset() { + *x = SourceRef{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -141,13 +167,13 @@ func (x *Bytes) Reset() { } } -func (x *Bytes) String() string { +func (x *SourceRef) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Bytes) ProtoMessage() {} +func (*SourceRef) ProtoMessage() {} -func (x *Bytes) ProtoReflect() protoreflect.Message { +func (x *SourceRef) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -159,32 +185,44 @@ func (x *Bytes) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Bytes.ProtoReflect.Descriptor instead. -func (*Bytes) Descriptor() ([]byte, []int) { +// Deprecated: Use SourceRef.ProtoReflect.Descriptor instead. +func (*SourceRef) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{2} } -func (x *Bytes) GetPos() *Position { +func (x *SourceRef) GetPos() *Position { if x != nil { return x.Pos } return nil } -type Data struct { +func (x *SourceRef) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SourceRef) GetModule() string { + if x != nil { + return x.Module + } + return "" +} + +type VerbRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` - Fields []*Field `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty"` - Metadata []*Metadata `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty"` - Comments []string `protobuf:"bytes,5,rep,name=comments,proto3" json:"comments,omitempty"` + 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"` } -func (x *Data) Reset() { - *x = Data{} +func (x *VerbRef) Reset() { + *x = VerbRef{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -192,13 +230,13 @@ func (x *Data) Reset() { } } -func (x *Data) String() string { +func (x *VerbRef) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Data) ProtoMessage() {} +func (*VerbRef) ProtoMessage() {} -func (x *Data) ProtoReflect() protoreflect.Message { +func (x *VerbRef) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -210,60 +248,43 @@ func (x *Data) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Data.ProtoReflect.Descriptor instead. -func (*Data) Descriptor() ([]byte, []int) { +// Deprecated: Use VerbRef.ProtoReflect.Descriptor instead. +func (*VerbRef) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{3} } -func (x *Data) GetPos() *Position { +func (x *VerbRef) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *Data) GetName() string { +func (x *VerbRef) GetName() string { if x != nil { return x.Name } return "" } -func (x *Data) GetFields() []*Field { - if x != nil { - return x.Fields - } - return nil -} - -func (x *Data) GetMetadata() []*Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Data) GetComments() []string { +func (x *VerbRef) GetModule() string { if x != nil { - return x.Comments + return x.Module } - return nil + return "" } -type Decl struct { +type Array struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Value: - // - // *Decl_Data - // *Decl_Verb - Value isDecl_Value `protobuf_oneof:"value"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Element *Type `protobuf:"bytes,2,opt,name=element,proto3" json:"element,omitempty"` } -func (x *Decl) Reset() { - *x = Decl{} +func (x *Array) Reset() { + *x = Array{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -271,13 +292,13 @@ func (x *Decl) Reset() { } } -func (x *Decl) String() string { +func (x *Array) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Decl) ProtoMessage() {} +func (*Array) ProtoMessage() {} -func (x *Decl) ProtoReflect() protoreflect.Message { +func (x *Array) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -289,61 +310,35 @@ func (x *Decl) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Decl.ProtoReflect.Descriptor instead. -func (*Decl) Descriptor() ([]byte, []int) { +// Deprecated: Use Array.ProtoReflect.Descriptor instead. +func (*Array) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{4} } -func (m *Decl) GetValue() isDecl_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *Decl) GetData() *Data { - if x, ok := x.GetValue().(*Decl_Data); ok { - return x.Data +func (x *Array) GetPos() *Position { + if x != nil { + return x.Pos } return nil } -func (x *Decl) GetVerb() *Verb { - if x, ok := x.GetValue().(*Decl_Verb); ok { - return x.Verb +func (x *Array) GetElement() *Type { + if x != nil { + return x.Element } return nil } -type isDecl_Value interface { - isDecl_Value() -} - -type Decl_Data struct { - Data *Data `protobuf:"bytes,1,opt,name=data,proto3,oneof"` -} - -type Decl_Verb struct { - Verb *Verb `protobuf:"bytes,2,opt,name=verb,proto3,oneof"` -} - -func (*Decl_Data) isDecl_Value() {} - -func (*Decl_Verb) isDecl_Value() {} - -type Field struct { +type Bool struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` - Type *Type `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` } -func (x *Field) Reset() { - *x = Field{} +func (x *Bool) Reset() { + *x = Bool{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -351,13 +346,13 @@ func (x *Field) Reset() { } } -func (x *Field) String() string { +func (x *Bool) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Field) ProtoMessage() {} +func (*Bool) ProtoMessage() {} -func (x *Field) ProtoReflect() protoreflect.Message { +func (x *Bool) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -369,49 +364,28 @@ func (x *Field) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Field.ProtoReflect.Descriptor instead. -func (*Field) Descriptor() ([]byte, []int) { +// Deprecated: Use Bool.ProtoReflect.Descriptor instead. +func (*Bool) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{5} } -func (x *Field) GetPos() *Position { +func (x *Bool) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *Field) GetName() string { - if x != nil { - return x.Name - } - return "" -} +type Bytes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -func (x *Field) GetComments() []string { - if x != nil { - return x.Comments - } - return nil + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` } -func (x *Field) GetType() *Type { - if x != nil { - return x.Type - } - return nil -} - -type Float struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` -} - -func (x *Float) Reset() { - *x = Float{} +func (x *Bytes) Reset() { + *x = Bytes{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -419,13 +393,13 @@ func (x *Float) Reset() { } } -func (x *Float) String() string { +func (x *Bytes) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Float) ProtoMessage() {} +func (*Bytes) ProtoMessage() {} -func (x *Float) ProtoReflect() protoreflect.Message { +func (x *Bytes) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -437,32 +411,32 @@ func (x *Float) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Float.ProtoReflect.Descriptor instead. -func (*Float) Descriptor() ([]byte, []int) { +// Deprecated: Use Bytes.ProtoReflect.Descriptor instead. +func (*Bytes) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{6} } -func (x *Float) GetPos() *Position { +func (x *Bytes) GetPos() *Position { if x != nil { return x.Pos } return nil } -type IngressPathComponent struct { +type Data struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Value: - // - // *IngressPathComponent_IngressPathLiteral - // *IngressPathComponent_IngressPathParameter - Value isIngressPathComponent_Value `protobuf_oneof:"value"` + 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"` + Fields []*Field `protobuf:"bytes,3,rep,name=fields,proto3" json:"fields,omitempty"` + Metadata []*Metadata `protobuf:"bytes,4,rep,name=metadata,proto3" json:"metadata,omitempty"` + Comments []string `protobuf:"bytes,5,rep,name=comments,proto3" json:"comments,omitempty"` } -func (x *IngressPathComponent) Reset() { - *x = IngressPathComponent{} +func (x *Data) Reset() { + *x = Data{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -470,13 +444,13 @@ func (x *IngressPathComponent) Reset() { } } -func (x *IngressPathComponent) String() string { +func (x *Data) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IngressPathComponent) ProtoMessage() {} +func (*Data) ProtoMessage() {} -func (x *IngressPathComponent) ProtoReflect() protoreflect.Message { +func (x *Data) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -488,59 +462,60 @@ func (x *IngressPathComponent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IngressPathComponent.ProtoReflect.Descriptor instead. -func (*IngressPathComponent) Descriptor() ([]byte, []int) { +// Deprecated: Use Data.ProtoReflect.Descriptor instead. +func (*Data) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{7} } -func (m *IngressPathComponent) GetValue() isIngressPathComponent_Value { - if m != nil { - return m.Value +func (x *Data) GetPos() *Position { + if x != nil { + return x.Pos } return nil } -func (x *IngressPathComponent) GetIngressPathLiteral() *IngressPathLiteral { - if x, ok := x.GetValue().(*IngressPathComponent_IngressPathLiteral); ok { - return x.IngressPathLiteral +func (x *Data) GetName() string { + if x != nil { + return x.Name } - return nil + return "" } -func (x *IngressPathComponent) GetIngressPathParameter() *IngressPathParameter { - if x, ok := x.GetValue().(*IngressPathComponent_IngressPathParameter); ok { - return x.IngressPathParameter +func (x *Data) GetFields() []*Field { + if x != nil { + return x.Fields } return nil } -type isIngressPathComponent_Value interface { - isIngressPathComponent_Value() -} - -type IngressPathComponent_IngressPathLiteral struct { - IngressPathLiteral *IngressPathLiteral `protobuf:"bytes,1,opt,name=ingressPathLiteral,proto3,oneof"` +func (x *Data) GetMetadata() []*Metadata { + if x != nil { + return x.Metadata + } + return nil } -type IngressPathComponent_IngressPathParameter struct { - IngressPathParameter *IngressPathParameter `protobuf:"bytes,2,opt,name=ingressPathParameter,proto3,oneof"` +func (x *Data) GetComments() []string { + if x != nil { + return x.Comments + } + return nil } -func (*IngressPathComponent_IngressPathLiteral) isIngressPathComponent_Value() {} - -func (*IngressPathComponent_IngressPathParameter) isIngressPathComponent_Value() {} - -type IngressPathLiteral struct { +type Decl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + // Types that are assignable to Value: + // + // *Decl_Data + // *Decl_Verb + Value isDecl_Value `protobuf_oneof:"value"` } -func (x *IngressPathLiteral) Reset() { - *x = IngressPathLiteral{} +func (x *Decl) Reset() { + *x = Decl{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -548,13 +523,13 @@ func (x *IngressPathLiteral) Reset() { } } -func (x *IngressPathLiteral) String() string { +func (x *Decl) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IngressPathLiteral) ProtoMessage() {} +func (*Decl) ProtoMessage() {} -func (x *IngressPathLiteral) ProtoReflect() protoreflect.Message { +func (x *Decl) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -566,36 +541,61 @@ func (x *IngressPathLiteral) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IngressPathLiteral.ProtoReflect.Descriptor instead. -func (*IngressPathLiteral) Descriptor() ([]byte, []int) { +// Deprecated: Use Decl.ProtoReflect.Descriptor instead. +func (*Decl) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{8} } -func (x *IngressPathLiteral) GetPos() *Position { - if x != nil { - return x.Pos +func (m *Decl) GetValue() isDecl_Value { + if m != nil { + return m.Value } return nil } -func (x *IngressPathLiteral) GetText() string { - if x != nil { - return x.Text +func (x *Decl) GetData() *Data { + if x, ok := x.GetValue().(*Decl_Data); ok { + return x.Data } - return "" + return nil } -type IngressPathParameter struct { +func (x *Decl) GetVerb() *Verb { + if x, ok := x.GetValue().(*Decl_Verb); ok { + return x.Verb + } + return nil +} + +type isDecl_Value interface { + isDecl_Value() +} + +type Decl_Data struct { + Data *Data `protobuf:"bytes,1,opt,name=data,proto3,oneof"` +} + +type Decl_Verb struct { + Verb *Verb `protobuf:"bytes,2,opt,name=verb,proto3,oneof"` +} + +func (*Decl_Data) isDecl_Value() {} + +func (*Decl_Verb) isDecl_Value() {} + +type Field struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` + 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"` + Type *Type `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` } -func (x *IngressPathParameter) Reset() { - *x = IngressPathParameter{} +func (x *Field) Reset() { + *x = Field{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -603,13 +603,13 @@ func (x *IngressPathParameter) Reset() { } } -func (x *IngressPathParameter) String() string { +func (x *Field) String() string { return protoimpl.X.MessageStringOf(x) } -func (*IngressPathParameter) ProtoMessage() {} +func (*Field) ProtoMessage() {} -func (x *IngressPathParameter) ProtoReflect() protoreflect.Message { +func (x *Field) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -621,26 +621,40 @@ func (x *IngressPathParameter) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use IngressPathParameter.ProtoReflect.Descriptor instead. -func (*IngressPathParameter) Descriptor() ([]byte, []int) { +// Deprecated: Use Field.ProtoReflect.Descriptor instead. +func (*Field) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{9} } -func (x *IngressPathParameter) GetPos() *Position { +func (x *Field) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *IngressPathParameter) GetName() string { +func (x *Field) GetName() string { if x != nil { return x.Name } return "" } -type Int struct { +func (x *Field) GetComments() []string { + if x != nil { + return x.Comments + } + return nil +} + +func (x *Field) GetType() *Type { + if x != nil { + return x.Type + } + return nil +} + +type Float struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -648,8 +662,8 @@ type Int struct { Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` } -func (x *Int) Reset() { - *x = Int{} +func (x *Float) Reset() { + *x = Float{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -657,13 +671,13 @@ func (x *Int) Reset() { } } -func (x *Int) String() string { +func (x *Float) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Int) ProtoMessage() {} +func (*Float) ProtoMessage() {} -func (x *Int) ProtoReflect() protoreflect.Message { +func (x *Float) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -675,30 +689,32 @@ func (x *Int) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Int.ProtoReflect.Descriptor instead. -func (*Int) Descriptor() ([]byte, []int) { +// Deprecated: Use Float.ProtoReflect.Descriptor instead. +func (*Float) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{10} } -func (x *Int) GetPos() *Position { +func (x *Float) GetPos() *Position { if x != nil { return x.Pos } return nil } -type Map struct { +type IngressPathComponent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Key *Type `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Value *Type `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + // Types that are assignable to Value: + // + // *IngressPathComponent_IngressPathLiteral + // *IngressPathComponent_IngressPathParameter + Value isIngressPathComponent_Value `protobuf_oneof:"value"` } -func (x *Map) Reset() { - *x = Map{} +func (x *IngressPathComponent) Reset() { + *x = IngressPathComponent{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -706,13 +722,13 @@ func (x *Map) Reset() { } } -func (x *Map) String() string { +func (x *IngressPathComponent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Map) ProtoMessage() {} +func (*IngressPathComponent) ProtoMessage() {} -func (x *Map) ProtoReflect() protoreflect.Message { +func (x *IngressPathComponent) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -724,46 +740,59 @@ func (x *Map) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Map.ProtoReflect.Descriptor instead. -func (*Map) Descriptor() ([]byte, []int) { +// Deprecated: Use IngressPathComponent.ProtoReflect.Descriptor instead. +func (*IngressPathComponent) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{11} } -func (x *Map) GetPos() *Position { - if x != nil { - return x.Pos +func (m *IngressPathComponent) GetValue() isIngressPathComponent_Value { + if m != nil { + return m.Value } return nil } -func (x *Map) GetKey() *Type { - if x != nil { - return x.Key +func (x *IngressPathComponent) GetIngressPathLiteral() *IngressPathLiteral { + if x, ok := x.GetValue().(*IngressPathComponent_IngressPathLiteral); ok { + return x.IngressPathLiteral } return nil } -func (x *Map) GetValue() *Type { - if x != nil { - return x.Value +func (x *IngressPathComponent) GetIngressPathParameter() *IngressPathParameter { + if x, ok := x.GetValue().(*IngressPathComponent_IngressPathParameter); ok { + return x.IngressPathParameter } return nil } -type Metadata struct { +type isIngressPathComponent_Value interface { + isIngressPathComponent_Value() +} + +type IngressPathComponent_IngressPathLiteral struct { + IngressPathLiteral *IngressPathLiteral `protobuf:"bytes,1,opt,name=ingressPathLiteral,proto3,oneof"` +} + +type IngressPathComponent_IngressPathParameter struct { + IngressPathParameter *IngressPathParameter `protobuf:"bytes,2,opt,name=ingressPathParameter,proto3,oneof"` +} + +func (*IngressPathComponent_IngressPathLiteral) isIngressPathComponent_Value() {} + +func (*IngressPathComponent_IngressPathParameter) isIngressPathComponent_Value() {} + +type IngressPathLiteral struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Value: - // - // *Metadata_Calls - // *Metadata_Ingress - Value isMetadata_Value `protobuf_oneof:"value"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` } -func (x *Metadata) Reset() { - *x = Metadata{} +func (x *IngressPathLiteral) Reset() { + *x = IngressPathLiteral{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -771,13 +800,13 @@ func (x *Metadata) Reset() { } } -func (x *Metadata) String() string { +func (x *IngressPathLiteral) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Metadata) ProtoMessage() {} +func (*IngressPathLiteral) ProtoMessage() {} -func (x *Metadata) ProtoReflect() protoreflect.Message { +func (x *IngressPathLiteral) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -789,59 +818,36 @@ func (x *Metadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. -func (*Metadata) Descriptor() ([]byte, []int) { +// Deprecated: Use IngressPathLiteral.ProtoReflect.Descriptor instead. +func (*IngressPathLiteral) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{12} } -func (m *Metadata) GetValue() isMetadata_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *Metadata) GetCalls() *MetadataCalls { - if x, ok := x.GetValue().(*Metadata_Calls); ok { - return x.Calls +func (x *IngressPathLiteral) GetPos() *Position { + if x != nil { + return x.Pos } return nil } -func (x *Metadata) GetIngress() *MetadataIngress { - if x, ok := x.GetValue().(*Metadata_Ingress); ok { - return x.Ingress +func (x *IngressPathLiteral) GetText() string { + if x != nil { + return x.Text } - return nil -} - -type isMetadata_Value interface { - isMetadata_Value() -} - -type Metadata_Calls struct { - Calls *MetadataCalls `protobuf:"bytes,1,opt,name=calls,proto3,oneof"` -} - -type Metadata_Ingress struct { - Ingress *MetadataIngress `protobuf:"bytes,2,opt,name=ingress,proto3,oneof"` + return "" } -func (*Metadata_Calls) isMetadata_Value() {} - -func (*Metadata_Ingress) isMetadata_Value() {} - -type MetadataCalls struct { +type IngressPathParameter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Calls []*VerbRef `protobuf:"bytes,2,rep,name=calls,proto3" json:"calls,omitempty"` + 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"` } -func (x *MetadataCalls) Reset() { - *x = MetadataCalls{} +func (x *IngressPathParameter) Reset() { + *x = IngressPathParameter{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -849,13 +855,13 @@ func (x *MetadataCalls) Reset() { } } -func (x *MetadataCalls) String() string { +func (x *IngressPathParameter) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MetadataCalls) ProtoMessage() {} +func (*IngressPathParameter) ProtoMessage() {} -func (x *MetadataCalls) ProtoReflect() protoreflect.Message { +func (x *IngressPathParameter) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -867,38 +873,35 @@ func (x *MetadataCalls) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MetadataCalls.ProtoReflect.Descriptor instead. -func (*MetadataCalls) Descriptor() ([]byte, []int) { +// Deprecated: Use IngressPathParameter.ProtoReflect.Descriptor instead. +func (*IngressPathParameter) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{13} } -func (x *MetadataCalls) GetPos() *Position { +func (x *IngressPathParameter) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *MetadataCalls) GetCalls() []*VerbRef { +func (x *IngressPathParameter) GetName() string { if x != nil { - return x.Calls + return x.Name } - return nil + return "" } -type MetadataIngress struct { +type Int struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` - Method string `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` - Path []*IngressPathComponent `protobuf:"bytes,4,rep,name=path,proto3" json:"path,omitempty"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` } -func (x *MetadataIngress) Reset() { - *x = MetadataIngress{} +func (x *Int) Reset() { + *x = Int{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -906,13 +909,13 @@ func (x *MetadataIngress) Reset() { } } -func (x *MetadataIngress) String() string { +func (x *Int) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MetadataIngress) ProtoMessage() {} +func (*Int) ProtoMessage() {} -func (x *MetadataIngress) ProtoReflect() protoreflect.Message { +func (x *Int) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -924,54 +927,30 @@ func (x *MetadataIngress) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MetadataIngress.ProtoReflect.Descriptor instead. -func (*MetadataIngress) Descriptor() ([]byte, []int) { +// Deprecated: Use Int.ProtoReflect.Descriptor instead. +func (*Int) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{14} } -func (x *MetadataIngress) GetPos() *Position { +func (x *Int) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *MetadataIngress) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *MetadataIngress) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -func (x *MetadataIngress) GetPath() []*IngressPathComponent { - if x != nil { - return x.Path - } - return nil -} - -type Module struct { +type Map struct { state protoimpl.MessageState 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"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Key *Type `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + Value *Type `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } -func (x *Module) Reset() { - *x = Module{} +func (x *Map) Reset() { + *x = Map{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -979,13 +958,13 @@ func (x *Module) Reset() { } } -func (x *Module) String() string { +func (x *Map) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Module) ProtoMessage() {} +func (*Map) ProtoMessage() {} -func (x *Module) ProtoReflect() protoreflect.Message { +func (x *Map) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -997,64 +976,46 @@ func (x *Module) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Module.ProtoReflect.Descriptor instead. -func (*Module) Descriptor() ([]byte, []int) { +// Deprecated: Use Map.ProtoReflect.Descriptor instead. +func (*Map) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{15} } -func (x *Module) GetRuntime() *ModuleRuntime { - if x != nil { - return x.Runtime - } - return nil -} - -func (x *Module) GetPos() *Position { +func (x *Map) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *Module) GetComments() []string { +func (x *Map) GetKey() *Type { if x != nil { - return x.Comments + return x.Key } return nil } -func (x *Module) GetBuiltin() bool { - if x != nil { - return x.Builtin - } - return false -} - -func (x *Module) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Module) GetDecls() []*Decl { +func (x *Map) GetValue() *Type { if x != nil { - return x.Decls + return x.Value } return nil } -type Optional struct { +type Metadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Type *Type `protobuf:"bytes,2,opt,name=type,proto3,oneof" json:"type,omitempty"` + // Types that are assignable to Value: + // + // *Metadata_Calls + // *Metadata_Ingress + Value isMetadata_Value `protobuf_oneof:"value"` } -func (x *Optional) Reset() { - *x = Optional{} +func (x *Metadata) Reset() { + *x = Metadata{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1062,13 +1023,13 @@ func (x *Optional) Reset() { } } -func (x *Optional) String() string { +func (x *Metadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Optional) ProtoMessage() {} +func (*Metadata) ProtoMessage() {} -func (x *Optional) ProtoReflect() protoreflect.Message { +func (x *Metadata) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1080,37 +1041,59 @@ func (x *Optional) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Optional.ProtoReflect.Descriptor instead. -func (*Optional) Descriptor() ([]byte, []int) { +// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. +func (*Metadata) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{16} } -func (x *Optional) GetPos() *Position { - if x != nil { - return x.Pos +func (m *Metadata) GetValue() isMetadata_Value { + if m != nil { + return m.Value } return nil } -func (x *Optional) GetType() *Type { - if x != nil { - return x.Type +func (x *Metadata) GetCalls() *MetadataCalls { + if x, ok := x.GetValue().(*Metadata_Calls); ok { + return x.Calls } return nil } -type Position struct { +func (x *Metadata) GetIngress() *MetadataIngress { + if x, ok := x.GetValue().(*Metadata_Ingress); ok { + return x.Ingress + } + return nil +} + +type isMetadata_Value interface { + isMetadata_Value() +} + +type Metadata_Calls struct { + Calls *MetadataCalls `protobuf:"bytes,1,opt,name=calls,proto3,oneof"` +} + +type Metadata_Ingress struct { + Ingress *MetadataIngress `protobuf:"bytes,2,opt,name=ingress,proto3,oneof"` +} + +func (*Metadata_Calls) isMetadata_Value() {} + +func (*Metadata_Ingress) isMetadata_Value() {} + +type MetadataCalls struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` - Line int64 `protobuf:"varint,2,opt,name=line,proto3" json:"line,omitempty"` - Column int64 `protobuf:"varint,3,opt,name=column,proto3" json:"column,omitempty"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Calls []*VerbRef `protobuf:"bytes,2,rep,name=calls,proto3" json:"calls,omitempty"` } -func (x *Position) Reset() { - *x = Position{} +func (x *MetadataCalls) Reset() { + *x = MetadataCalls{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1118,13 +1101,13 @@ func (x *Position) Reset() { } } -func (x *Position) String() string { +func (x *MetadataCalls) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Position) ProtoMessage() {} +func (*MetadataCalls) ProtoMessage() {} -func (x *Position) ProtoReflect() protoreflect.Message { +func (x *MetadataCalls) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1136,44 +1119,38 @@ func (x *Position) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Position.ProtoReflect.Descriptor instead. -func (*Position) Descriptor() ([]byte, []int) { +// Deprecated: Use MetadataCalls.ProtoReflect.Descriptor instead. +func (*MetadataCalls) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{17} } -func (x *Position) GetFilename() string { - if x != nil { - return x.Filename - } - return "" -} - -func (x *Position) GetLine() int64 { +func (x *MetadataCalls) GetPos() *Position { if x != nil { - return x.Line + return x.Pos } - return 0 + return nil } -func (x *Position) GetColumn() int64 { +func (x *MetadataCalls) GetCalls() []*VerbRef { if x != nil { - return x.Column + return x.Calls } - return 0 + return nil } -type DataRef struct { +type MetadataIngress struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + Method string `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` + Path []*IngressPathComponent `protobuf:"bytes,4,rep,name=path,proto3" json:"path,omitempty"` } -func (x *DataRef) Reset() { - *x = DataRef{} +func (x *MetadataIngress) Reset() { + *x = MetadataIngress{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1181,13 +1158,13 @@ func (x *DataRef) Reset() { } } -func (x *DataRef) String() string { +func (x *MetadataIngress) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DataRef) ProtoMessage() {} +func (*MetadataIngress) ProtoMessage() {} -func (x *DataRef) ProtoReflect() protoreflect.Message { +func (x *MetadataIngress) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1199,44 +1176,54 @@ func (x *DataRef) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DataRef.ProtoReflect.Descriptor instead. -func (*DataRef) Descriptor() ([]byte, []int) { +// Deprecated: Use MetadataIngress.ProtoReflect.Descriptor instead. +func (*MetadataIngress) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{18} } -func (x *DataRef) GetPos() *Position { +func (x *MetadataIngress) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *DataRef) GetName() string { +func (x *MetadataIngress) GetType() string { if x != nil { - return x.Name + return x.Type } return "" } -func (x *DataRef) GetModule() string { +func (x *MetadataIngress) GetMethod() string { if x != nil { - return x.Module + return x.Method } return "" } -type SinkRef struct { +func (x *MetadataIngress) GetPath() []*IngressPathComponent { + if x != nil { + return x.Path + } + return nil +} + +type Module struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` + 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"` } -func (x *SinkRef) Reset() { - *x = SinkRef{} +func (x *Module) Reset() { + *x = Module{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1244,13 +1231,13 @@ func (x *SinkRef) Reset() { } } -func (x *SinkRef) String() string { +func (x *Module) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SinkRef) ProtoMessage() {} +func (*Module) ProtoMessage() {} -func (x *SinkRef) ProtoReflect() protoreflect.Message { +func (x *Module) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1262,44 +1249,64 @@ func (x *SinkRef) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SinkRef.ProtoReflect.Descriptor instead. -func (*SinkRef) Descriptor() ([]byte, []int) { +// Deprecated: Use Module.ProtoReflect.Descriptor instead. +func (*Module) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{19} } -func (x *SinkRef) GetPos() *Position { +func (x *Module) GetRuntime() *ModuleRuntime { + if x != nil { + return x.Runtime + } + return nil +} + +func (x *Module) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *SinkRef) GetName() string { +func (x *Module) GetComments() []string { + if x != nil { + return x.Comments + } + return nil +} + +func (x *Module) GetBuiltin() bool { + if x != nil { + return x.Builtin + } + return false +} + +func (x *Module) GetName() string { if x != nil { return x.Name } return "" } -func (x *SinkRef) GetModule() string { +func (x *Module) GetDecls() []*Decl { if x != nil { - return x.Module + return x.Decls } - return "" + return nil } -type SourceRef struct { +type Optional struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - Module string `protobuf:"bytes,3,opt,name=module,proto3" json:"module,omitempty"` + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` + Type *Type `protobuf:"bytes,2,opt,name=type,proto3,oneof" json:"type,omitempty"` } -func (x *SourceRef) Reset() { - *x = SourceRef{} +func (x *Optional) Reset() { + *x = Optional{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1307,13 +1314,13 @@ func (x *SourceRef) Reset() { } } -func (x *SourceRef) String() string { +func (x *Optional) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SourceRef) ProtoMessage() {} +func (*Optional) ProtoMessage() {} -func (x *SourceRef) ProtoReflect() protoreflect.Message { +func (x *Optional) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1325,44 +1332,37 @@ func (x *SourceRef) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SourceRef.ProtoReflect.Descriptor instead. -func (*SourceRef) Descriptor() ([]byte, []int) { +// Deprecated: Use Optional.ProtoReflect.Descriptor instead. +func (*Optional) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{20} } -func (x *SourceRef) GetPos() *Position { +func (x *Optional) GetPos() *Position { if x != nil { return x.Pos } return nil } -func (x *SourceRef) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SourceRef) GetModule() string { +func (x *Optional) GetType() *Type { if x != nil { - return x.Module + return x.Type } - return "" + return nil } -type VerbRef struct { +type Position struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache 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"` + Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` + Line int64 `protobuf:"varint,2,opt,name=line,proto3" json:"line,omitempty"` + Column int64 `protobuf:"varint,3,opt,name=column,proto3" json:"column,omitempty"` } -func (x *VerbRef) Reset() { - *x = VerbRef{} +func (x *Position) Reset() { + *x = Position{} if protoimpl.UnsafeEnabled { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1370,13 +1370,13 @@ func (x *VerbRef) Reset() { } } -func (x *VerbRef) String() string { +func (x *Position) String() string { return protoimpl.X.MessageStringOf(x) } -func (*VerbRef) ProtoMessage() {} +func (*Position) ProtoMessage() {} -func (x *VerbRef) ProtoReflect() protoreflect.Message { +func (x *Position) ProtoReflect() protoreflect.Message { mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1388,30 +1388,30 @@ func (x *VerbRef) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use VerbRef.ProtoReflect.Descriptor instead. -func (*VerbRef) Descriptor() ([]byte, []int) { +// Deprecated: Use Position.ProtoReflect.Descriptor instead. +func (*Position) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{21} } -func (x *VerbRef) GetPos() *Position { +func (x *Position) GetFilename() string { if x != nil { - return x.Pos + return x.Filename } - return nil + return "" } -func (x *VerbRef) GetName() string { +func (x *Position) GetLine() int64 { if x != nil { - return x.Name + return x.Line } - return "" + return 0 } -func (x *VerbRef) GetModule() string { +func (x *Position) GetColumn() int64 { if x != nil { - return x.Module + return x.Column } - return "" + return 0 } type Schema struct { @@ -1579,6 +1579,7 @@ type Type struct { // *Type_Array // *Type_Map // *Type_DataRef + // *Type_Unit // *Type_Optional Value isType_Value `protobuf_oneof:"value"` } @@ -1685,6 +1686,13 @@ func (x *Type) GetDataRef() *DataRef { return nil } +func (x *Type) GetUnit() *Unit { + if x, ok := x.GetValue().(*Type_Unit); ok { + return x.Unit + } + return nil +} + func (x *Type) GetOptional() *Optional { if x, ok := x.GetValue().(*Type_Optional); ok { return x.Optional @@ -1732,8 +1740,12 @@ type Type_DataRef struct { DataRef *DataRef `protobuf:"bytes,9,opt,name=dataRef,proto3,oneof"` } +type Type_Unit struct { + Unit *Unit `protobuf:"bytes,10,opt,name=unit,proto3,oneof"` +} + type Type_Optional struct { - Optional *Optional `protobuf:"bytes,10,opt,name=optional,proto3,oneof"` + Optional *Optional `protobuf:"bytes,11,opt,name=optional,proto3,oneof"` } func (*Type_Int) isType_Value() {} @@ -1754,8 +1766,57 @@ func (*Type_Map) isType_Value() {} func (*Type_DataRef) isType_Value() {} +func (*Type_Unit) isType_Value() {} + func (*Type_Optional) isType_Value() {} +type Unit struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pos *Position `protobuf:"bytes,1,opt,name=pos,proto3,oneof" json:"pos,omitempty"` +} + +func (x *Unit) Reset() { + *x = Unit{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Unit) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Unit) ProtoMessage() {} + +func (x *Unit) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[26] + 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 Unit.ProtoReflect.Descriptor instead. +func (*Unit) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{26} +} + +func (x *Unit) GetPos() *Position { + if x != nil { + return x.Pos + } + return nil +} + type Verb struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1765,15 +1826,15 @@ type Verb struct { 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"` - Request *DataRef `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"` - Response *DataRef `protobuf:"bytes,5,opt,name=response,proto3" json:"response,omitempty"` + Request *Type `protobuf:"bytes,4,opt,name=request,proto3" json:"request,omitempty"` + Response *Type `protobuf:"bytes,5,opt,name=response,proto3" json:"response,omitempty"` Metadata []*Metadata `protobuf:"bytes,6,rep,name=metadata,proto3" json:"metadata,omitempty"` } func (x *Verb) Reset() { *x = Verb{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1786,7 +1847,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[26] + mi := &file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1799,7 +1860,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{26} + return file_xyz_block_ftl_v1_schema_schema_proto_rawDescGZIP(), []int{27} } func (x *Verb) GetRuntime() *VerbRuntime { @@ -1830,14 +1891,14 @@ func (x *Verb) GetComments() []string { return nil } -func (x *Verb) GetRequest() *DataRef { +func (x *Verb) GetRequest() *Type { if x != nil { return x.Request } return nil } -func (x *Verb) GetResponse() *DataRef { +func (x *Verb) GetResponse() *Type { if x != nil { return x.Response } @@ -1860,200 +1921,200 @@ 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, 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, 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, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x77, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 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, 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0x77, 0x0a, 0x07, 0x53, 0x69, 0x6e, 0x6b, 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, 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, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x79, 0x0a, 0x09, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 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, + 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 0x77, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x62, 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, - 0x22, 0xef, 0x01, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, + 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, 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, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x18, 0x03, 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, 0x04, 0x20, 0x03, 0x28, + 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, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, - 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, - 0x6f, 0x73, 0x22, 0x79, 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, + 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, 0xef, 0x01, 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, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, + 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 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, 0x56, 0x65, 0x72, 0x62, 0x48, 0x00, 0x52, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xac, 0x01, - 0x0a, 0x05, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, + 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, 0x04, 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, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x79, 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, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0xac, 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, + 0x6f, 0x73, 0x22, 0x49, 0x0a, 0x05, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, + 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, + 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe3, 0x01, + 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, + 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x5d, 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, + 0x00, 0x52, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, + 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x63, 0x0a, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, + 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, 0x12, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, + 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, + 0x6c, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x49, 0x0a, 0x05, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x14, 0x49, 0x6e, 0x67, 0x72, - 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x12, 0x5d, 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, - 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, - 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x12, 0x69, 0x6e, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, - 0x63, 0x0a, 0x14, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, - 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x14, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6a, 0x0a, - 0x12, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x4c, 0x69, 0x74, 0x65, - 0x72, 0x61, 0x6c, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, - 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x6c, 0x0a, 0x14, 0x49, 0x6e, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, - 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x47, 0x0a, 0x03, 0x49, 0x6e, 0x74, 0x12, 0x38, + 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, 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, 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, + 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, - 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, 0x99, 0x01, 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, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x89, 0x01, 0x0a, - 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x38, - 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 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, 0x65, 0x66, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xc2, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x38, 0x0a, 0x03, - 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, - 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x12, 0x41, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 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, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 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, 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, 0x77, 0x0a, 0x07, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x12, 0x38, 0x0a, - 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, + 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x99, 0x01, 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, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x89, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x36, + 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 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, 0x65, 0x66, 0x52, + 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xc2, + 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x49, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x41, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x06, 0x0a, 0x04, 0x5f, + 0x70, 0x6f, 0x73, 0x22, 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, 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x77, 0x0a, 0x07, 0x53, - 0x69, 0x6e, 0x6b, 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, 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, 0x42, 0x06, 0x0a, 0x04, - 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x79, 0x0a, 0x09, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x66, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 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, 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, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, - 0x77, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x62, 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, 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, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x68, + 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, 0x85, 0x01, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, @@ -2071,7 +2132,7 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 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, 0xbf, 0x04, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xf4, 0x04, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x03, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x03, 0x69, 0x6e, @@ -2102,41 +2163,49 @@ var file_xyz_block_ftl_v1_schema_schema_proto_rawDesc = []byte{ 0x12, 0x3c, 0x0a, 0x07, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 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, - 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x12, 0x3f, - 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x0a, 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, 0x84, 0x03, 0x0a, 0x04, 0x56, 0x65, 0x72, - 0x62, 0x12, 0x45, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, - 0x65, 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x75, - 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x66, 0x12, 0x33, + 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, + 0x6e, 0x69, 0x74, 0x12, 0x3f, 0x0a, 0x08, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, + 0x0b, 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, 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, 0x3a, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 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, 0x52, 0x65, 0x66, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 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, 0x52, - 0x65, 0x66, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, - 0x46, 0x50, 0x01, 0x5a, 0x42, 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, - 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, + 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, 0x48, 0x0a, + 0x04, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, 0x01, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x22, 0xfe, 0x02, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, + 0x12, 0x45, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x92, 0xf7, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x38, 0x0a, 0x03, 0x70, 0x6f, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x01, 0x52, 0x03, 0x70, 0x6f, 0x73, 0x88, 0x01, + 0x01, 0x12, 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, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, + 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x70, 0x6f, 0x73, 0x42, 0x46, 0x50, 0x01, 0x5a, 0x42, 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, 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 ( @@ -2151,98 +2220,101 @@ 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, 27) +var file_xyz_block_ftl_v1_schema_schema_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_xyz_block_ftl_v1_schema_schema_proto_goTypes = []interface{}{ - (*Array)(nil), // 0: xyz.block.ftl.v1.schema.Array - (*Bool)(nil), // 1: xyz.block.ftl.v1.schema.Bool - (*Bytes)(nil), // 2: xyz.block.ftl.v1.schema.Bytes - (*Data)(nil), // 3: xyz.block.ftl.v1.schema.Data - (*Decl)(nil), // 4: xyz.block.ftl.v1.schema.Decl - (*Field)(nil), // 5: xyz.block.ftl.v1.schema.Field - (*Float)(nil), // 6: xyz.block.ftl.v1.schema.Float - (*IngressPathComponent)(nil), // 7: xyz.block.ftl.v1.schema.IngressPathComponent - (*IngressPathLiteral)(nil), // 8: xyz.block.ftl.v1.schema.IngressPathLiteral - (*IngressPathParameter)(nil), // 9: xyz.block.ftl.v1.schema.IngressPathParameter - (*Int)(nil), // 10: xyz.block.ftl.v1.schema.Int - (*Map)(nil), // 11: xyz.block.ftl.v1.schema.Map - (*Metadata)(nil), // 12: xyz.block.ftl.v1.schema.Metadata - (*MetadataCalls)(nil), // 13: xyz.block.ftl.v1.schema.MetadataCalls - (*MetadataIngress)(nil), // 14: xyz.block.ftl.v1.schema.MetadataIngress - (*Module)(nil), // 15: xyz.block.ftl.v1.schema.Module - (*Optional)(nil), // 16: xyz.block.ftl.v1.schema.Optional - (*Position)(nil), // 17: xyz.block.ftl.v1.schema.Position - (*DataRef)(nil), // 18: xyz.block.ftl.v1.schema.DataRef - (*SinkRef)(nil), // 19: xyz.block.ftl.v1.schema.SinkRef - (*SourceRef)(nil), // 20: xyz.block.ftl.v1.schema.SourceRef - (*VerbRef)(nil), // 21: xyz.block.ftl.v1.schema.VerbRef + (*DataRef)(nil), // 0: xyz.block.ftl.v1.schema.DataRef + (*SinkRef)(nil), // 1: xyz.block.ftl.v1.schema.SinkRef + (*SourceRef)(nil), // 2: xyz.block.ftl.v1.schema.SourceRef + (*VerbRef)(nil), // 3: xyz.block.ftl.v1.schema.VerbRef + (*Array)(nil), // 4: xyz.block.ftl.v1.schema.Array + (*Bool)(nil), // 5: xyz.block.ftl.v1.schema.Bool + (*Bytes)(nil), // 6: xyz.block.ftl.v1.schema.Bytes + (*Data)(nil), // 7: xyz.block.ftl.v1.schema.Data + (*Decl)(nil), // 8: xyz.block.ftl.v1.schema.Decl + (*Field)(nil), // 9: xyz.block.ftl.v1.schema.Field + (*Float)(nil), // 10: xyz.block.ftl.v1.schema.Float + (*IngressPathComponent)(nil), // 11: xyz.block.ftl.v1.schema.IngressPathComponent + (*IngressPathLiteral)(nil), // 12: xyz.block.ftl.v1.schema.IngressPathLiteral + (*IngressPathParameter)(nil), // 13: xyz.block.ftl.v1.schema.IngressPathParameter + (*Int)(nil), // 14: xyz.block.ftl.v1.schema.Int + (*Map)(nil), // 15: xyz.block.ftl.v1.schema.Map + (*Metadata)(nil), // 16: xyz.block.ftl.v1.schema.Metadata + (*MetadataCalls)(nil), // 17: xyz.block.ftl.v1.schema.MetadataCalls + (*MetadataIngress)(nil), // 18: xyz.block.ftl.v1.schema.MetadataIngress + (*Module)(nil), // 19: xyz.block.ftl.v1.schema.Module + (*Optional)(nil), // 20: xyz.block.ftl.v1.schema.Optional + (*Position)(nil), // 21: xyz.block.ftl.v1.schema.Position (*Schema)(nil), // 22: xyz.block.ftl.v1.schema.Schema (*String)(nil), // 23: xyz.block.ftl.v1.schema.String (*Time)(nil), // 24: xyz.block.ftl.v1.schema.Time (*Type)(nil), // 25: xyz.block.ftl.v1.schema.Type - (*Verb)(nil), // 26: xyz.block.ftl.v1.schema.Verb - (*ModuleRuntime)(nil), // 27: xyz.block.ftl.v1.schema.ModuleRuntime - (*VerbRuntime)(nil), // 28: xyz.block.ftl.v1.schema.VerbRuntime + (*Unit)(nil), // 26: xyz.block.ftl.v1.schema.Unit + (*Verb)(nil), // 27: xyz.block.ftl.v1.schema.Verb + (*ModuleRuntime)(nil), // 28: xyz.block.ftl.v1.schema.ModuleRuntime + (*VerbRuntime)(nil), // 29: xyz.block.ftl.v1.schema.VerbRuntime } var file_xyz_block_ftl_v1_schema_schema_proto_depIdxs = []int32{ - 17, // 0: xyz.block.ftl.v1.schema.Array.pos:type_name -> xyz.block.ftl.v1.schema.Position - 25, // 1: xyz.block.ftl.v1.schema.Array.element:type_name -> xyz.block.ftl.v1.schema.Type - 17, // 2: xyz.block.ftl.v1.schema.Bool.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 3: xyz.block.ftl.v1.schema.Bytes.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 4: xyz.block.ftl.v1.schema.Data.pos:type_name -> xyz.block.ftl.v1.schema.Position - 5, // 5: xyz.block.ftl.v1.schema.Data.fields:type_name -> xyz.block.ftl.v1.schema.Field - 12, // 6: xyz.block.ftl.v1.schema.Data.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 3, // 7: xyz.block.ftl.v1.schema.Decl.data:type_name -> xyz.block.ftl.v1.schema.Data - 26, // 8: xyz.block.ftl.v1.schema.Decl.verb:type_name -> xyz.block.ftl.v1.schema.Verb - 17, // 9: xyz.block.ftl.v1.schema.Field.pos:type_name -> xyz.block.ftl.v1.schema.Position - 25, // 10: xyz.block.ftl.v1.schema.Field.type:type_name -> xyz.block.ftl.v1.schema.Type - 17, // 11: xyz.block.ftl.v1.schema.Float.pos:type_name -> xyz.block.ftl.v1.schema.Position - 8, // 12: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathLiteral:type_name -> xyz.block.ftl.v1.schema.IngressPathLiteral - 9, // 13: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathParameter:type_name -> xyz.block.ftl.v1.schema.IngressPathParameter - 17, // 14: xyz.block.ftl.v1.schema.IngressPathLiteral.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 15: xyz.block.ftl.v1.schema.IngressPathParameter.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 16: xyz.block.ftl.v1.schema.Int.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 17: xyz.block.ftl.v1.schema.Map.pos:type_name -> xyz.block.ftl.v1.schema.Position - 25, // 18: xyz.block.ftl.v1.schema.Map.key:type_name -> xyz.block.ftl.v1.schema.Type - 25, // 19: xyz.block.ftl.v1.schema.Map.value:type_name -> xyz.block.ftl.v1.schema.Type - 13, // 20: xyz.block.ftl.v1.schema.Metadata.calls:type_name -> xyz.block.ftl.v1.schema.MetadataCalls - 14, // 21: xyz.block.ftl.v1.schema.Metadata.ingress:type_name -> xyz.block.ftl.v1.schema.MetadataIngress - 17, // 22: xyz.block.ftl.v1.schema.MetadataCalls.pos:type_name -> xyz.block.ftl.v1.schema.Position - 21, // 23: xyz.block.ftl.v1.schema.MetadataCalls.calls:type_name -> xyz.block.ftl.v1.schema.VerbRef - 17, // 24: xyz.block.ftl.v1.schema.MetadataIngress.pos:type_name -> xyz.block.ftl.v1.schema.Position - 7, // 25: xyz.block.ftl.v1.schema.MetadataIngress.path:type_name -> xyz.block.ftl.v1.schema.IngressPathComponent - 27, // 26: xyz.block.ftl.v1.schema.Module.runtime:type_name -> xyz.block.ftl.v1.schema.ModuleRuntime - 17, // 27: xyz.block.ftl.v1.schema.Module.pos:type_name -> xyz.block.ftl.v1.schema.Position - 4, // 28: xyz.block.ftl.v1.schema.Module.decls:type_name -> xyz.block.ftl.v1.schema.Decl - 17, // 29: xyz.block.ftl.v1.schema.Optional.pos:type_name -> xyz.block.ftl.v1.schema.Position - 25, // 30: xyz.block.ftl.v1.schema.Optional.type:type_name -> xyz.block.ftl.v1.schema.Type - 17, // 31: xyz.block.ftl.v1.schema.DataRef.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 32: xyz.block.ftl.v1.schema.SinkRef.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 33: xyz.block.ftl.v1.schema.SourceRef.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 34: xyz.block.ftl.v1.schema.VerbRef.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 35: xyz.block.ftl.v1.schema.Schema.pos:type_name -> xyz.block.ftl.v1.schema.Position - 15, // 36: xyz.block.ftl.v1.schema.Schema.modules:type_name -> xyz.block.ftl.v1.schema.Module - 17, // 37: xyz.block.ftl.v1.schema.String.pos:type_name -> xyz.block.ftl.v1.schema.Position - 17, // 38: xyz.block.ftl.v1.schema.Time.pos:type_name -> xyz.block.ftl.v1.schema.Position - 10, // 39: xyz.block.ftl.v1.schema.Type.int:type_name -> xyz.block.ftl.v1.schema.Int - 6, // 40: xyz.block.ftl.v1.schema.Type.float:type_name -> xyz.block.ftl.v1.schema.Float + 21, // 0: xyz.block.ftl.v1.schema.DataRef.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 1: xyz.block.ftl.v1.schema.SinkRef.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 2: xyz.block.ftl.v1.schema.SourceRef.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 3: xyz.block.ftl.v1.schema.VerbRef.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 4: xyz.block.ftl.v1.schema.Array.pos:type_name -> xyz.block.ftl.v1.schema.Position + 25, // 5: xyz.block.ftl.v1.schema.Array.element:type_name -> xyz.block.ftl.v1.schema.Type + 21, // 6: xyz.block.ftl.v1.schema.Bool.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 7: xyz.block.ftl.v1.schema.Bytes.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 8: xyz.block.ftl.v1.schema.Data.pos:type_name -> xyz.block.ftl.v1.schema.Position + 9, // 9: xyz.block.ftl.v1.schema.Data.fields:type_name -> xyz.block.ftl.v1.schema.Field + 16, // 10: xyz.block.ftl.v1.schema.Data.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 7, // 11: xyz.block.ftl.v1.schema.Decl.data:type_name -> xyz.block.ftl.v1.schema.Data + 27, // 12: xyz.block.ftl.v1.schema.Decl.verb:type_name -> xyz.block.ftl.v1.schema.Verb + 21, // 13: xyz.block.ftl.v1.schema.Field.pos:type_name -> xyz.block.ftl.v1.schema.Position + 25, // 14: xyz.block.ftl.v1.schema.Field.type:type_name -> xyz.block.ftl.v1.schema.Type + 21, // 15: xyz.block.ftl.v1.schema.Float.pos:type_name -> xyz.block.ftl.v1.schema.Position + 12, // 16: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathLiteral:type_name -> xyz.block.ftl.v1.schema.IngressPathLiteral + 13, // 17: xyz.block.ftl.v1.schema.IngressPathComponent.ingressPathParameter:type_name -> xyz.block.ftl.v1.schema.IngressPathParameter + 21, // 18: xyz.block.ftl.v1.schema.IngressPathLiteral.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 19: xyz.block.ftl.v1.schema.IngressPathParameter.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 20: xyz.block.ftl.v1.schema.Int.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 21: xyz.block.ftl.v1.schema.Map.pos:type_name -> xyz.block.ftl.v1.schema.Position + 25, // 22: xyz.block.ftl.v1.schema.Map.key:type_name -> xyz.block.ftl.v1.schema.Type + 25, // 23: xyz.block.ftl.v1.schema.Map.value:type_name -> xyz.block.ftl.v1.schema.Type + 17, // 24: xyz.block.ftl.v1.schema.Metadata.calls:type_name -> xyz.block.ftl.v1.schema.MetadataCalls + 18, // 25: xyz.block.ftl.v1.schema.Metadata.ingress:type_name -> xyz.block.ftl.v1.schema.MetadataIngress + 21, // 26: xyz.block.ftl.v1.schema.MetadataCalls.pos:type_name -> xyz.block.ftl.v1.schema.Position + 3, // 27: xyz.block.ftl.v1.schema.MetadataCalls.calls:type_name -> xyz.block.ftl.v1.schema.VerbRef + 21, // 28: xyz.block.ftl.v1.schema.MetadataIngress.pos:type_name -> xyz.block.ftl.v1.schema.Position + 11, // 29: xyz.block.ftl.v1.schema.MetadataIngress.path:type_name -> xyz.block.ftl.v1.schema.IngressPathComponent + 28, // 30: xyz.block.ftl.v1.schema.Module.runtime:type_name -> xyz.block.ftl.v1.schema.ModuleRuntime + 21, // 31: xyz.block.ftl.v1.schema.Module.pos:type_name -> xyz.block.ftl.v1.schema.Position + 8, // 32: xyz.block.ftl.v1.schema.Module.decls:type_name -> xyz.block.ftl.v1.schema.Decl + 21, // 33: xyz.block.ftl.v1.schema.Optional.pos:type_name -> xyz.block.ftl.v1.schema.Position + 25, // 34: xyz.block.ftl.v1.schema.Optional.type:type_name -> xyz.block.ftl.v1.schema.Type + 21, // 35: xyz.block.ftl.v1.schema.Schema.pos:type_name -> xyz.block.ftl.v1.schema.Position + 19, // 36: xyz.block.ftl.v1.schema.Schema.modules:type_name -> xyz.block.ftl.v1.schema.Module + 21, // 37: xyz.block.ftl.v1.schema.String.pos:type_name -> xyz.block.ftl.v1.schema.Position + 21, // 38: xyz.block.ftl.v1.schema.Time.pos:type_name -> xyz.block.ftl.v1.schema.Position + 14, // 39: xyz.block.ftl.v1.schema.Type.int:type_name -> xyz.block.ftl.v1.schema.Int + 10, // 40: xyz.block.ftl.v1.schema.Type.float:type_name -> xyz.block.ftl.v1.schema.Float 23, // 41: xyz.block.ftl.v1.schema.Type.string:type_name -> xyz.block.ftl.v1.schema.String - 2, // 42: xyz.block.ftl.v1.schema.Type.bytes:type_name -> xyz.block.ftl.v1.schema.Bytes - 1, // 43: xyz.block.ftl.v1.schema.Type.bool:type_name -> xyz.block.ftl.v1.schema.Bool + 6, // 42: xyz.block.ftl.v1.schema.Type.bytes:type_name -> xyz.block.ftl.v1.schema.Bytes + 5, // 43: xyz.block.ftl.v1.schema.Type.bool:type_name -> xyz.block.ftl.v1.schema.Bool 24, // 44: xyz.block.ftl.v1.schema.Type.time:type_name -> xyz.block.ftl.v1.schema.Time - 0, // 45: xyz.block.ftl.v1.schema.Type.array:type_name -> xyz.block.ftl.v1.schema.Array - 11, // 46: xyz.block.ftl.v1.schema.Type.map:type_name -> xyz.block.ftl.v1.schema.Map - 18, // 47: xyz.block.ftl.v1.schema.Type.dataRef:type_name -> xyz.block.ftl.v1.schema.DataRef - 16, // 48: xyz.block.ftl.v1.schema.Type.optional:type_name -> xyz.block.ftl.v1.schema.Optional - 28, // 49: xyz.block.ftl.v1.schema.Verb.runtime:type_name -> xyz.block.ftl.v1.schema.VerbRuntime - 17, // 50: xyz.block.ftl.v1.schema.Verb.pos:type_name -> xyz.block.ftl.v1.schema.Position - 18, // 51: xyz.block.ftl.v1.schema.Verb.request:type_name -> xyz.block.ftl.v1.schema.DataRef - 18, // 52: xyz.block.ftl.v1.schema.Verb.response:type_name -> xyz.block.ftl.v1.schema.DataRef - 12, // 53: xyz.block.ftl.v1.schema.Verb.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata - 54, // [54:54] is the sub-list for method output_type - 54, // [54:54] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name + 4, // 45: xyz.block.ftl.v1.schema.Type.array:type_name -> xyz.block.ftl.v1.schema.Array + 15, // 46: xyz.block.ftl.v1.schema.Type.map:type_name -> xyz.block.ftl.v1.schema.Map + 0, // 47: xyz.block.ftl.v1.schema.Type.dataRef:type_name -> xyz.block.ftl.v1.schema.DataRef + 26, // 48: xyz.block.ftl.v1.schema.Type.unit:type_name -> xyz.block.ftl.v1.schema.Unit + 20, // 49: xyz.block.ftl.v1.schema.Type.optional:type_name -> xyz.block.ftl.v1.schema.Optional + 21, // 50: xyz.block.ftl.v1.schema.Unit.pos:type_name -> xyz.block.ftl.v1.schema.Position + 29, // 51: xyz.block.ftl.v1.schema.Verb.runtime:type_name -> xyz.block.ftl.v1.schema.VerbRuntime + 21, // 52: xyz.block.ftl.v1.schema.Verb.pos:type_name -> xyz.block.ftl.v1.schema.Position + 25, // 53: xyz.block.ftl.v1.schema.Verb.request:type_name -> xyz.block.ftl.v1.schema.Type + 25, // 54: xyz.block.ftl.v1.schema.Verb.response:type_name -> xyz.block.ftl.v1.schema.Type + 16, // 55: xyz.block.ftl.v1.schema.Verb.metadata:type_name -> xyz.block.ftl.v1.schema.Metadata + 56, // [56:56] is the sub-list for method output_type + 56, // [56:56] is the sub-list for method input_type + 56, // [56:56] is the sub-list for extension type_name + 56, // [56:56] is the sub-list for extension extendee + 0, // [0:56] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_schema_schema_proto_init() } @@ -2253,7 +2325,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { 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 interface{}, i int) interface{} { - switch v := v.(*Array); i { + switch v := v.(*DataRef); i { case 0: return &v.state case 1: @@ -2265,7 +2337,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bool); i { + switch v := v.(*SinkRef); i { case 0: return &v.state case 1: @@ -2277,7 +2349,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bytes); i { + switch v := v.(*SourceRef); i { case 0: return &v.state case 1: @@ -2289,7 +2361,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Data); i { + switch v := v.(*VerbRef); i { case 0: return &v.state case 1: @@ -2301,7 +2373,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Decl); i { + switch v := v.(*Array); i { case 0: return &v.state case 1: @@ -2313,7 +2385,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Field); i { + switch v := v.(*Bool); i { case 0: return &v.state case 1: @@ -2325,7 +2397,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Float); i { + switch v := v.(*Bytes); i { case 0: return &v.state case 1: @@ -2337,7 +2409,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IngressPathComponent); i { + switch v := v.(*Data); i { case 0: return &v.state case 1: @@ -2349,7 +2421,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IngressPathLiteral); i { + switch v := v.(*Decl); i { case 0: return &v.state case 1: @@ -2361,7 +2433,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IngressPathParameter); i { + switch v := v.(*Field); i { case 0: return &v.state case 1: @@ -2373,7 +2445,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Int); i { + switch v := v.(*Float); i { case 0: return &v.state case 1: @@ -2385,7 +2457,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Map); i { + switch v := v.(*IngressPathComponent); i { case 0: return &v.state case 1: @@ -2397,7 +2469,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { + switch v := v.(*IngressPathLiteral); i { case 0: return &v.state case 1: @@ -2409,7 +2481,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetadataCalls); i { + switch v := v.(*IngressPathParameter); i { case 0: return &v.state case 1: @@ -2421,7 +2493,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetadataIngress); i { + switch v := v.(*Int); i { case 0: return &v.state case 1: @@ -2433,7 +2505,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Module); i { + switch v := v.(*Map); i { case 0: return &v.state case 1: @@ -2445,7 +2517,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Optional); i { + switch v := v.(*Metadata); i { case 0: return &v.state case 1: @@ -2457,7 +2529,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Position); i { + switch v := v.(*MetadataCalls); i { case 0: return &v.state case 1: @@ -2469,7 +2541,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataRef); i { + switch v := v.(*MetadataIngress); i { case 0: return &v.state case 1: @@ -2481,7 +2553,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SinkRef); i { + switch v := v.(*Module); i { case 0: return &v.state case 1: @@ -2493,7 +2565,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SourceRef); i { + switch v := v.(*Optional); i { case 0: return &v.state case 1: @@ -2505,7 +2577,7 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VerbRef); i { + switch v := v.(*Position); i { case 0: return &v.state case 1: @@ -2565,6 +2637,18 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { } } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Unit); 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[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Verb); i { case 0: return &v.state @@ -2581,32 +2665,32 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[1].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[2].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[3].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[4].OneofWrappers = []interface{}{ - (*Decl_Data)(nil), - (*Decl_Verb)(nil), - } + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[4].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[5].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*IngressPathComponent_IngressPathLiteral)(nil), - (*IngressPathComponent_IngressPathParameter)(nil), + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[8].OneofWrappers = []interface{}{ + (*Decl_Data)(nil), + (*Decl_Verb)(nil), } - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[8].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[9].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[11].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[12].OneofWrappers = []interface{}{ - (*Metadata_Calls)(nil), - (*Metadata_Ingress)(nil), + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[11].OneofWrappers = []interface{}{ + (*IngressPathComponent_IngressPathLiteral)(nil), + (*IngressPathComponent_IngressPathParameter)(nil), } + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[12].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[13].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[14].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[15].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[16].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[16].OneofWrappers = []interface{}{ + (*Metadata_Calls)(nil), + (*Metadata_Ingress)(nil), + } + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[17].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[18].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[19].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[20].OneofWrappers = []interface{}{} - file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[21].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[22].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[23].OneofWrappers = []interface{}{} file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[24].OneofWrappers = []interface{}{} @@ -2620,16 +2704,18 @@ func file_xyz_block_ftl_v1_schema_schema_proto_init() { (*Type_Array)(nil), (*Type_Map)(nil), (*Type_DataRef)(nil), + (*Type_Unit)(nil), (*Type_Optional)(nil), } file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[26].OneofWrappers = []interface{}{} + file_xyz_block_ftl_v1_schema_schema_proto_msgTypes[27].OneofWrappers = []interface{}{} 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: 27, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, diff --git a/protos/xyz/block/ftl/v1/schema/schema.proto b/protos/xyz/block/ftl/v1/schema/schema.proto index c3a290dc49..b3ecc143e1 100644 --- a/protos/xyz/block/ftl/v1/schema/schema.proto +++ b/protos/xyz/block/ftl/v1/schema/schema.proto @@ -8,6 +8,30 @@ import "xyz/block/ftl/v1/schema/runtime.proto"; option go_package = "github.com/TBD54566975/ftl/protos/xyz/block/ftl/v1/schema;schemapb"; option java_multiple_files = true; +message DataRef { + optional Position pos = 1; + string name = 2; + string module = 3; +} + +message SinkRef { + optional Position pos = 1; + string name = 2; + string module = 3; +} + +message SourceRef { + optional Position pos = 1; + string name = 2; + string module = 3; +} + +message VerbRef { + optional Position pos = 1; + string name = 2; + string module = 3; +} + message Array { optional Position pos = 1; Type element = 2; @@ -114,30 +138,6 @@ message Position { int64 column = 3; } -message DataRef { - optional Position pos = 1; - string name = 2; - string module = 3; -} - -message SinkRef { - optional Position pos = 1; - string name = 2; - string module = 3; -} - -message SourceRef { - optional Position pos = 1; - string name = 2; - string module = 3; -} - -message VerbRef { - optional Position pos = 1; - string name = 2; - string module = 3; -} - message Schema { optional Position pos = 1; repeated Module modules = 2; @@ -162,17 +162,22 @@ message Type { Array array = 7; Map map = 8; DataRef dataRef = 9; - Optional optional = 10; + Unit unit = 10; + Optional optional = 11; } } +message Unit { + optional Position pos = 1; +} + message Verb { optional VerbRuntime runtime = 31634; optional Position pos = 1; string name = 2; repeated string comments = 3; - DataRef request = 4; - DataRef response = 5; + Type request = 4; + Type response = 5; repeated Metadata metadata = 6; }