schema

package
v0.317.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 1, 2024 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultRetryCount  = 100
	MinBackoffLimitStr = "1s"
	MinBackoffLimit    = 1 * time.Second
	MaxBackoffLimitStr = "1d"
	MaxBackoffLimit    = 24 * time.Hour
)
View Source
const BuiltinsSource = `` /* 560-byte string literal not displayed */

BuiltinsSource is the schema source code for built-in types.

View Source
const PostgresDatabaseType = "postgres"

Variables

View Source
var ErrNotFound = errors.New("not found")
View Source
var (
	Lexer = lexer.MustSimple([]lexer.SimpleRule{
		{Name: "EOL", Pattern: `[\r\n]`},
		{Name: "Whitespace", Pattern: `\s+`},
		{Name: "Ident", Pattern: `\b[a-zA-Z_][a-zA-Z0-9_]*\b`},
		{Name: "Comment", Pattern: `//.*`},
		{Name: "String", Pattern: `"(?:\\.|[^"])*"`},
		{Name: "Number", Pattern: `[0-9]+(?:\.[0-9]+)?`},
		{Name: "Punct", Pattern: `[%/\-\_:[\]{}<>()*+?.,\\^$|#~!\'@=]`},
	})
)

Functions

func AliasKindStrings added in v0.139.2

func AliasKindStrings() []string

AliasKindStrings returns a slice of all String values of the enum

func ContainsTerminalError added in v0.247.3

func ContainsTerminalError(errs []*Error) bool

func EncodeComments added in v0.215.2

func EncodeComments(comments []string) string

func ModuleToBytes added in v0.111.2

func ModuleToBytes(m *Module) ([]byte, error)

func Normalise

func Normalise[T Node](n T) T

Normalise clones and normalises (zeroes) positional information in schema Nodes.

func ProtobufSchema

func ProtobufSchema() string

ProtobufSchema returns a string containing the equivalent protobuf schema for the FTL schema.

func RequestResponseToJSONSchema added in v0.309.1

func RequestResponseToJSONSchema(sch *Schema, ref Ref) (*jsonschema.Schema, error)

RequestResponseToJSONSchema converts the schema for a Verb request or response object to a JSON Schema.

It takes in the full schema in order to resolve and define references.

func SortErrorsByPosition added in v0.171.0

func SortErrorsByPosition(merr []*Error)

func SortModuleDecls added in v0.300.0

func SortModuleDecls(module *Module)

SortModuleDecls sorts the declarations in a module.

func TransformAliasedFields added in v0.296.3

func TransformAliasedFields(sch *Schema, t Type, obj any, aliaser func(obj map[string]any, field *Field) string) error

func TransformFromAliasedFields added in v0.296.3

func TransformFromAliasedFields(ref *Ref, sch *Schema, request map[string]any) (map[string]any, error)

func TransformToAliasedFields added in v0.296.3

func TransformToAliasedFields(ref *Ref, sch *Schema, request map[string]any) (map[string]any, error)

func TypeName added in v0.98.11

func TypeName(v any) string

TypeName returns the name of a type as a string, stripping any package prefix and correctly handling Ref aliases.

func TypeToProto added in v0.226.0

func TypeToProto(t Type) *schemapb.Type

TypeToProto creates a schemapb.Type "sum type" from a concreate Type.

func ValidateJSONValue added in v0.276.3

func ValidateJSONValue(fieldType Type, path path, value any, sch *Schema) error

ValidateJSONValue validates a given JSON value against the provided schema.

func ValidateModule

func ValidateModule(module *Module) error

ValidateModule performs the subset of semantic validation possible on a single module.

It ignores references to other modules.

func ValidateName added in v0.99.0

func ValidateName(name string) bool

ValidateName validates an FTL name.

func ValidateRequestMap added in v0.276.3

func ValidateRequestMap(ref *Ref, path path, request map[string]any, sch *Schema) error

ValidateRequestMap validates a given JSON map against the provided schema.

func Visit

func Visit(n Node, visit func(n Node, next func() error) error) error

Visit all nodes in the schema.

func VisitExcludingMetadataChildren added in v0.153.2

func VisitExcludingMetadataChildren(n Node, visit func(n Node, next func() error) error) error

VisitExcludingMetadataChildren visits all nodes in the schema except the children of metadata nodes. This is used when generating external modules to avoid adding imports only referenced in the bodies of stubbed verbs.

func VisitWithParent added in v0.261.0

func VisitWithParent(n Node, parent Node, visit func(n Node, parent Node, next func() error) error) error

VisitWithParent all nodes in the schema providing the parent node when visiting its schema children.

Types

type AliasKind added in v0.139.2

type AliasKind int

AliasKind is the kind of alias.

const (
	AliasKindJSON AliasKind = iota
)

func AliasKindString added in v0.139.2

func AliasKindString(s string) (AliasKind, error)

AliasKindString retrieves an enum value from the enum constants string name. Throws an error if the param is not part of the enum.

func AliasKindValues added in v0.139.2

func AliasKindValues() []AliasKind

AliasKindValues returns all values of the enum

func (AliasKind) IsAAliasKind added in v0.139.2

func (i AliasKind) IsAAliasKind() bool

IsAAliasKind returns "true" if the value is listed in the enum definition. "false" otherwise

func (AliasKind) MarshalJSON added in v0.139.2

func (i AliasKind) MarshalJSON() ([]byte, error)

MarshalJSON implements the json.Marshaler interface for AliasKind

func (AliasKind) MarshalText added in v0.139.2

func (i AliasKind) MarshalText() ([]byte, error)

MarshalText implements the encoding.TextMarshaler interface for AliasKind

func (AliasKind) String added in v0.139.2

func (i AliasKind) String() string

func (*AliasKind) UnmarshalJSON added in v0.139.2

func (i *AliasKind) UnmarshalJSON(data []byte) error

UnmarshalJSON implements the json.Unmarshaler interface for AliasKind

func (*AliasKind) UnmarshalText added in v0.139.2

func (i *AliasKind) UnmarshalText(text []byte) error

UnmarshalText implements the encoding.TextUnmarshaler interface for AliasKind

type Any added in v0.100.0

type Any struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Any bool `parser:"@'Any'" protobuf:"-"`
}

func (*Any) Equal added in v0.226.0

func (*Any) Equal(other Type) bool

func (*Any) GetName added in v0.140.0

func (*Any) GetName() string

func (*Any) Position added in v0.100.0

func (a *Any) Position() Position

func (*Any) String added in v0.100.0

func (*Any) String() string

func (*Any) ToProto added in v0.100.0

func (a *Any) ToProto() proto.Message

type Array

type Array struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Element Type `parser:"'[' @@ ']'" protobuf:"2"`
}

func (*Array) Equal added in v0.226.0

func (a *Array) Equal(other Type) bool

func (*Array) Position added in v0.100.0

func (a *Array) Position() Position

func (*Array) String

func (a *Array) String() string

func (*Array) ToProto

func (a *Array) ToProto() proto.Message

type Bool

type Bool struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Bool bool `parser:"@'Bool'" protobuf:"-"`
}

func (*Bool) Equal added in v0.226.0

func (b *Bool) Equal(other Type) bool

func (*Bool) GetName added in v0.140.0

func (*Bool) GetName() string

func (*Bool) Position added in v0.100.0

func (b *Bool) Position() Position

func (*Bool) String

func (*Bool) String() string

func (*Bool) ToProto

func (b *Bool) ToProto() proto.Message

type Bytes added in v0.88.0

type Bytes struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Bytes bool `parser:"@'Bytes'" protobuf:"-"`
}

func (*Bytes) Equal added in v0.226.0

func (b *Bytes) Equal(other Type) bool

func (*Bytes) GetName added in v0.140.0

func (*Bytes) GetName() string

func (*Bytes) Position added in v0.100.0

func (b *Bytes) Position() Position

func (*Bytes) String added in v0.88.0

func (*Bytes) String() string

func (*Bytes) ToProto added in v0.88.0

func (b *Bytes) ToProto() proto.Message

type Config added in v0.146.0

type Config struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Name     string   `parser:"'config' @Ident" protobuf:"3"`
	Type     Type     `parser:"@@" protobuf:"4"`
}

func ConfigFromProto added in v0.146.3

func ConfigFromProto(p *schemapb.Config) *Config

func (*Config) GetName added in v0.146.0

func (s *Config) GetName() string

func (*Config) IsExported added in v0.193.0

func (s *Config) IsExported() bool

func (*Config) Position added in v0.146.0

func (s *Config) Position() Position

func (*Config) String added in v0.146.0

func (s *Config) String() string

func (*Config) ToProto added in v0.146.0

func (s *Config) ToProto() protoreflect.ProtoMessage

type Data

type Data struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments       []string         `parser:"@Comment*" protobuf:"2"`
	Export         bool             `parser:"@'export'?" protobuf:"3"`
	Name           string           `parser:"'data' @Ident" protobuf:"4"`
	TypeParameters []*TypeParameter `parser:"( '<' @@ (',' @@)* '>' )?" protobuf:"5"`
	Fields         []*Field         `parser:"'{' @@* '}'" protobuf:"6"`
	Metadata       []Metadata       `parser:"@@*" protobuf:"7"`
}

A Data structure.

func DataFromProto added in v0.136.0

func DataFromProto(s *schemapb.Data) *Data

func (*Data) FieldByName added in v0.122.0

func (d *Data) FieldByName(name string) *Field

func (*Data) GetName added in v0.140.0

func (d *Data) GetName() string

func (*Data) IsExported added in v0.193.0

func (d *Data) IsExported() bool

func (*Data) Monomorphise added in v0.104.0

func (d *Data) Monomorphise(ref *Ref) (*Data, error)

Monomorphise this data type with the given type arguments.

If this data type has no type parameters, it will be returned as-is.

This will return a new Data structure with all type parameters replaced with the given types.

func (*Data) Position added in v0.100.0

func (d *Data) Position() Position

func (*Data) Scope added in v0.101.0

func (d *Data) Scope() Scope

func (*Data) String

func (d *Data) String() string

func (*Data) ToProto

func (d *Data) ToProto() proto.Message

type Database added in v0.95.0

type Database struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Type     string   `parser:"'database' @'postgres'" protobuf:"4"`
	Name     string   `parser:"@Ident" protobuf:"3"`
}

func DatabaseFromProto added in v0.136.0

func DatabaseFromProto(s *schemapb.Database) *Database

func (*Database) GetName added in v0.140.0

func (d *Database) GetName() string

func (*Database) IsExported added in v0.193.0

func (d *Database) IsExported() bool

func (*Database) Position added in v0.100.0

func (d *Database) Position() Position

func (*Database) String added in v0.95.0

func (d *Database) String() string

func (*Database) ToProto added in v0.95.0

func (d *Database) ToProto() proto.Message

type Decl

type Decl interface {
	Symbol
	GetName() string
	IsExported() bool
	// contains filtered or unexported methods
}

Decl represents user-defined data types in the schema grammar.

type Enum added in v0.136.0

type Enum struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string       `parser:"@Comment*" protobuf:"2"`
	Export   bool           `parser:"@'export'?" protobuf:"3"`
	Name     string         `parser:"'enum' @Ident" protobuf:"4"`
	Type     Type           `parser:"(':' @@)?" protobuf:"5,optional"`
	Variants []*EnumVariant `parser:"'{' @@* '}'" protobuf:"6"`
}

func EnumFromProto added in v0.136.0

func EnumFromProto(s *schemapb.Enum) *Enum

func (*Enum) GetName added in v0.140.0

func (e *Enum) GetName() string

func (*Enum) IsExported added in v0.193.0

func (e *Enum) IsExported() bool

func (*Enum) IsValueEnum added in v0.195.0

func (e *Enum) IsValueEnum() bool

IsValueEnum determines whether this is a type or value enum using `e.Type` alone because value enums must always have a unified type across all variants, whereas type enums by definition cannot have a unified type.

func (*Enum) Position added in v0.136.0

func (e *Enum) Position() Position

func (*Enum) String added in v0.136.0

func (e *Enum) String() string

func (*Enum) ToProto added in v0.136.0

func (e *Enum) ToProto() proto.Message

func (*Enum) VariantForName added in v0.216.0

func (e *Enum) VariantForName(name string) optional.Option[*EnumVariant]

type EnumVariant added in v0.136.0

type EnumVariant struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Name     string   `parser:"@Ident" protobuf:"3"`
	Value    Value    `parser:"(('=' @@) | @@)!" protobuf:"4"`
}

func (*EnumVariant) Position added in v0.136.0

func (e *EnumVariant) Position() Position

func (*EnumVariant) String added in v0.136.0

func (e *EnumVariant) String() string

func (*EnumVariant) ToProto added in v0.136.0

func (e *EnumVariant) ToProto() proto.Message

type Error added in v0.160.0

type Error struct {
	Msg       string     `json:"msg" protobuf:"1"`
	Pos       Position   `json:"pos" protobuf:"2"`
	EndColumn int        `json:"endCol" protobuf:"3"`
	Level     ErrorLevel `json:"level" protobuf:"4"`
}

func Errorf added in v0.160.0

func Errorf(pos Position, endColumn int, format string, args ...any) *Error

func Infof added in v0.220.2

func Infof(pos Position, endColumn int, format string, args ...any) *Error

func Warnf added in v0.220.2

func Warnf(pos Position, endColumn int, format string, args ...any) *Error

func Wrapf added in v0.160.0

func Wrapf(pos Position, endColumn int, err error, format string, args ...any) *Error

func (Error) Error added in v0.160.0

func (e Error) Error() string

func (Error) ToProto added in v0.166.0

func (e Error) ToProto() *schemapb.Error

type ErrorLevel added in v0.220.2

type ErrorLevel int
const (
	INFO ErrorLevel = iota
	WARN
	ERROR
)

type ErrorList added in v0.162.0

type ErrorList struct {
	Errors []*Error `json:"errors" protobuf:"1"`
}

func ErrorListFromProto added in v0.163.0

func ErrorListFromProto(e *schemapb.ErrorList) *ErrorList

ErrorListFromProto converts a protobuf ErrorList to an ErrorList.

func (*ErrorList) ToProto added in v0.166.0

func (e *ErrorList) ToProto() *schemapb.ErrorList

type FSM added in v0.200.0

type FSM struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments    []string         `parser:"@Comment*" protobuf:"2"`
	Name        string           `parser:"'fsm' @Ident '{'" protobuf:"3"`
	Start       []*Ref           `parser:"('start' @@)*" protobuf:"4"` // Start states.
	Transitions []*FSMTransition `parser:"('transition' @@)* '}'" protobuf:"5"`
	Metadata    []Metadata       `parser:"@@*" protobuf:"6"`
}

func FSMFromProto added in v0.200.0

func FSMFromProto(pb *schemapb.FSM) *FSM

func (*FSM) GetName added in v0.200.0

func (f *FSM) GetName() string

func (*FSM) IsExported added in v0.200.0

func (f *FSM) IsExported() bool

func (*FSM) Position added in v0.200.0

func (f *FSM) Position() Position

func (*FSM) String added in v0.200.0

func (f *FSM) String() string

func (*FSM) TerminalStates added in v0.226.0

func (f *FSM) TerminalStates() []*Ref

TerminalStates returns the terminal states of the FSM.

func (*FSM) ToProto added in v0.200.0

func (f *FSM) ToProto() protoreflect.ProtoMessage

type FSMTransition added in v0.200.0

type FSMTransition struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	From     *Ref     `parser:"@@" protobuf:"3,optional"`
	To       *Ref     `parser:"'to' @@" protobuf:"4"`
}

func FSMTransitionFromProto added in v0.200.0

func FSMTransitionFromProto(pb *schemapb.FSMTransition) *FSMTransition

func (*FSMTransition) Position added in v0.200.0

func (f *FSMTransition) Position() Position

func (*FSMTransition) String added in v0.200.0

func (f *FSMTransition) String() string

func (*FSMTransition) ToProto added in v0.200.0

type Field

type Field struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string   `parser:"@Comment*" protobuf:"3"`
	Name     string     `parser:"@Ident" protobuf:"2"`
	Type     Type       `parser:"@@" protobuf:"4"`
	Metadata []Metadata `parser:"@@*" protobuf:"5"`
}

func (*Field) Alias added in v0.108.0

func (f *Field) Alias(kind AliasKind) optional.Option[string]

Alias returns the alias for the given kind.

func (*Field) Position added in v0.100.0

func (f *Field) Position() Position

func (*Field) String

func (f *Field) String() string

func (*Field) ToProto

func (f *Field) ToProto() proto.Message

type Float

type Float struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Float bool `parser:"@'Float'" protobuf:"-"`
}

func (*Float) Equal added in v0.226.0

func (f *Float) Equal(other Type) bool

func (*Float) GetName added in v0.140.0

func (*Float) GetName() string

func (*Float) Position added in v0.100.0

func (f *Float) Position() Position

func (*Float) String

func (*Float) String() string

func (*Float) ToProto

func (f *Float) ToProto() proto.Message

type IngressPathComponent added in v0.85.5

type IngressPathComponent interface {
	Node
	// contains filtered or unexported methods
}

type IngressPathLiteral added in v0.85.5

type IngressPathLiteral struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Text string `parser:"@~(Whitespace | '/' | '{' | '}')+" protobuf:"2"`
}

func (*IngressPathLiteral) Position added in v0.100.0

func (l *IngressPathLiteral) Position() Position

func (*IngressPathLiteral) String added in v0.85.5

func (l *IngressPathLiteral) String() string

func (*IngressPathLiteral) ToProto added in v0.85.5

func (l *IngressPathLiteral) ToProto() proto.Message

type IngressPathParameter added in v0.85.5

type IngressPathParameter struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Name string `parser:"'{' @Ident '}'" protobuf:"2"`
}

func (*IngressPathParameter) Position added in v0.100.0

func (l *IngressPathParameter) Position() Position

func (*IngressPathParameter) String added in v0.85.5

func (l *IngressPathParameter) String() string

func (*IngressPathParameter) ToProto added in v0.85.5

func (l *IngressPathParameter) ToProto() proto.Message

type Int

type Int struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Int bool `parser:"@'Int'" protobuf:"-"`
}

func (*Int) Equal added in v0.226.0

func (i *Int) Equal(other Type) bool

func (*Int) GetName added in v0.140.0

func (*Int) GetName() string

func (*Int) Position added in v0.100.0

func (i *Int) Position() Position

func (*Int) String

func (*Int) String() string

func (*Int) ToProto

func (i *Int) ToProto() proto.Message

type IntValue added in v0.136.0

type IntValue struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Value int `parser:"@Number" protobuf:"2"`
}

func (*IntValue) GetValue added in v0.153.0

func (i *IntValue) GetValue() any

func (*IntValue) Position added in v0.136.0

func (i *IntValue) Position() Position

func (*IntValue) String added in v0.136.0

func (i *IntValue) String() string

func (*IntValue) ToProto added in v0.136.0

func (i *IntValue) ToProto() proto.Message

type Map

type Map struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Key   Type `parser:"'{' @@" protobuf:"2"`
	Value Type `parser:"':' @@ '}'" protobuf:"3"`
}

func (*Map) Equal added in v0.226.0

func (m *Map) Equal(other Type) bool

func (*Map) Position added in v0.100.0

func (m *Map) Position() Position

func (*Map) String

func (m *Map) String() string

func (*Map) ToProto

func (m *Map) ToProto() proto.Message

type Metadata

type Metadata interface {
	Node
	// contains filtered or unexported methods
}

Metadata represents a metadata Node in the schema grammar.

type MetadataAlias added in v0.139.2

type MetadataAlias struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Kind  AliasKind `parser:"'+' 'alias' @Ident" protobuf:"2"`
	Alias string    `parser:"@String" protobuf:"3"`
}

func (*MetadataAlias) Position added in v0.139.2

func (m *MetadataAlias) Position() Position

func (*MetadataAlias) String added in v0.139.2

func (m *MetadataAlias) String() string

func (*MetadataAlias) ToProto added in v0.139.2

type MetadataCalls

type MetadataCalls struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Calls []*Ref `parser:"'+' 'calls' @@ (',' @@)*" protobuf:"2"`
}

func (*MetadataCalls) Position added in v0.100.0

func (m *MetadataCalls) Position() Position

func (*MetadataCalls) String

func (m *MetadataCalls) String() string

func (*MetadataCalls) ToProto

func (m *MetadataCalls) ToProto() proto.Message

type MetadataCronJob added in v0.165.0

type MetadataCronJob struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Cron string `parser:"'+' 'cron' Whitespace @(' ' | ~EOL)+" protobuf:"2"`
}

func (*MetadataCronJob) Position added in v0.165.0

func (m *MetadataCronJob) Position() Position

func (*MetadataCronJob) String added in v0.165.0

func (m *MetadataCronJob) String() string

func (*MetadataCronJob) ToProto added in v0.165.0

func (m *MetadataCronJob) ToProto() proto.Message

type MetadataDatabases added in v0.95.0

type MetadataDatabases struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Calls []*Ref `parser:"'+' 'database' 'calls' @@ (',' @@)*" protobuf:"2"`
}

func (*MetadataDatabases) Position added in v0.100.0

func (m *MetadataDatabases) Position() Position

func (*MetadataDatabases) String added in v0.95.0

func (m *MetadataDatabases) String() string

func (*MetadataDatabases) ToProto added in v0.95.0

func (m *MetadataDatabases) ToProto() proto.Message

type MetadataIngress

type MetadataIngress struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Type   string                 `parser:"'+' 'ingress' @('http')?" protobuf:"2"`
	Method string                 `parser:"@('GET' | 'POST' | 'PUT' | 'DELETE')" protobuf:"3"`
	Path   []IngressPathComponent `parser:"('/' @@)+" protobuf:"4"`
}

func (*MetadataIngress) Position added in v0.100.0

func (m *MetadataIngress) Position() Position

func (*MetadataIngress) String

func (m *MetadataIngress) String() string

func (*MetadataIngress) ToProto

func (m *MetadataIngress) ToProto() proto.Message

type MetadataRetry added in v0.221.0

type MetadataRetry struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Count      *int   `parser:"'+' 'retry' (@Number Whitespace)?" protobuf:"2,optional"`
	MinBackoff string `parser:"@(Number (?! Whitespace) Ident)?" protobuf:"3"`
	MaxBackoff string `parser:"@(Number (?! Whitespace) Ident)?" protobuf:"4"`
}

func (*MetadataRetry) Position added in v0.221.0

func (m *MetadataRetry) Position() Position

func (*MetadataRetry) RetryParams added in v0.229.0

func (m *MetadataRetry) RetryParams() (RetryParams, error)

func (*MetadataRetry) String added in v0.221.0

func (m *MetadataRetry) String() string

func (*MetadataRetry) ToProto added in v0.221.0

func (m *MetadataRetry) ToProto() proto.Message

type MetadataSubscriber added in v0.232.0

type MetadataSubscriber struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Name string `parser:"'+' 'subscribe' @Ident" protobuf:"2"`
}

func (*MetadataSubscriber) Position added in v0.232.0

func (m *MetadataSubscriber) Position() Position

func (*MetadataSubscriber) String added in v0.232.0

func (m *MetadataSubscriber) String() string

func (*MetadataSubscriber) ToProto added in v0.232.0

func (m *MetadataSubscriber) ToProto() proto.Message

type MetadataTypeMap added in v0.282.0

type MetadataTypeMap struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Runtime    string `parser:"'+' 'typemap' @('go' | 'kotlin')" protobuf:"2"`
	NativeName string `parser:"@String" protobuf:"3"`
}

func (*MetadataTypeMap) Position added in v0.282.0

func (m *MetadataTypeMap) Position() Position

func (*MetadataTypeMap) String added in v0.282.0

func (m *MetadataTypeMap) String() string

func (*MetadataTypeMap) ToProto added in v0.282.0

type Module

type Module struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Builtin  bool     `parser:"@'builtin'?" protobuf:"3"`
	Name     string   `parser:"'module' @Ident '{'" protobuf:"4"`
	Decls    []Decl   `parser:"@@* '}'" protobuf:"5"`
}

func Builtins added in v0.89.0

func Builtins() *Module

Builtins returns a Module containing built-in types.

func ModuleFromBytes

func ModuleFromBytes(b []byte) (*Module, error)

func ModuleFromProto

func ModuleFromProto(s *schemapb.Module) (*Module, error)

ModuleFromProto converts a protobuf Module to a Module and validates it.

func ModuleFromProtoFile added in v0.134.1

func ModuleFromProtoFile(filename string) (*Module, error)

ModuleFromProtoFile loads a module from the given proto-encoded file.

func ParseModule

func ParseModule(filename string, r io.Reader) (*Module, error)

func ParseModuleString

func ParseModuleString(filename, input string) (*Module, error)

func (*Module) AddData

func (m *Module) AddData(data *Data) int

AddData and return its index.

If data is already in the module, the existing index is returned. If the new data is exported but the existing data is not, it sets it to being exported.

func (*Module) AddDecl added in v0.247.3

func (m *Module) AddDecl(decl Decl)

AddDecl adds a single decl to the module.

It is only added if not already present or if it changes the visibility of the existing Decl.

func (*Module) AddDecls added in v0.247.3

func (m *Module) AddDecls(decls []Decl)

AddDecls appends decls to the module.

Decls are only added if they are not already present in the module or if they change the visibility of an existing Decl.

func (*Module) Data

func (m *Module) Data() []*Data

func (*Module) GetName added in v0.140.0

func (m *Module) GetName() string

func (*Module) Imports added in v0.61.0

func (m *Module) Imports() []string

Imports returns the modules imported by this module.

func (*Module) IsExported added in v0.193.0

func (m *Module) IsExported() bool

func (*Module) Position added in v0.100.0

func (m *Module) Position() Position

func (*Module) Resolve added in v0.100.0

func (m *Module) Resolve(ref Ref) *ModuleDecl

Resolve returns the declaration in this module with the given name, or nil

func (*Module) Scan added in v0.113.1

func (m *Module) Scan(src any) error

func (*Module) String

func (m *Module) String() string

func (*Module) ToProto

func (m *Module) ToProto() proto.Message

func (*Module) Value added in v0.113.1

func (m *Module) Value() (driver.Value, error)

func (*Module) Verbs

func (m *Module) Verbs() []*Verb

type ModuleDecl added in v0.100.0

type ModuleDecl struct {
	Module optional.Option[*Module]
	Symbol Symbol
}

ModuleDecl is a declaration associated with a module.

func ResolveAs added in v0.157.0

func ResolveAs[S Symbol](scopes Scopes, ref Ref) (symbol S, decl *ModuleDecl)

ResolveAs resolves a Ref to a concrete symbol and declaration.

[decl] will be non-nil if the symbol is found, regardless of its type. [symbol] will be non-nil if the symbol is of type [S].

func ResolveTypeAs added in v0.157.0

func ResolveTypeAs[S Symbol](scopes Scopes, t Type) (symbol S, decl *ModuleDecl)

ResolveTypeAs resolves a Type to a concrete symbol and declaration.

type Named added in v0.157.0

type Named interface {
	Symbol
	GetName() string
}

A Named symbol in the grammar.

type Node

type Node interface {
	String() string
	ToProto() proto.Message
	Position() Position
	// contains filtered or unexported methods
}

A Node in the schema grammar.

type Optional added in v0.78.0

type Optional struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Type Type `parser:"@@" protobuf:"2,optional"`
}

Optional represents a Type whose value may be optional.

func (*Optional) Equal added in v0.226.0

func (o *Optional) Equal(other Type) bool

func (*Optional) Position added in v0.100.0

func (o *Optional) Position() Position

func (*Optional) String added in v0.78.0

func (o *Optional) String() string

func (*Optional) ToProto added in v0.78.0

func (o *Optional) ToProto() proto.Message

type Position

type Position struct {
	Filename string `protobuf:"1"`
	Offset   int    `parser:"" protobuf:"-"`
	Line     int    `protobuf:"2"`
	Column   int    `protobuf:"3"`
}

func (Position) String

func (p Position) String() string

func (Position) ToProto

func (p Position) ToProto() proto.Message

type Ref

type Ref struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Module string `parser:"(@Ident '.')?" protobuf:"3"`
	Name   string `parser:"@Ident" protobuf:"2"`
	// Only used for data references.
	TypeParameters []Type `parser:"[ '<' @@ (',' @@)* '>' ]" protobuf:"4"`
}

Ref is an untyped reference to a symbol.

func ParseRef

func ParseRef(ref string) (*Ref, error)

func RefFromProto added in v0.149.0

func RefFromProto(s *schemapb.Ref) *Ref

func (*Ref) Equal added in v0.226.0

func (r *Ref) Equal(other Type) bool

func (*Ref) Position added in v0.100.0

func (r *Ref) Position() Position

func (*Ref) Scan added in v0.194.0

func (r *Ref) Scan(src any) error

func (*Ref) String

func (r *Ref) String() string

func (*Ref) ToProto added in v0.149.0

func (r *Ref) ToProto() proto.Message

func (Ref) ToRefKey added in v0.149.0

func (r Ref) ToRefKey() RefKey

func (Ref) Value added in v0.194.0

func (r Ref) Value() (driver.Value, error)

type RefKey added in v0.149.0

type RefKey struct {
	Module string `parser:"(@Ident '.')?"`
	Name   string `parser:"@Ident"`
}

RefKey is a map key for a reference.

func (*RefKey) Scan added in v0.226.0

func (r *RefKey) Scan(src any) error

func (RefKey) String added in v0.186.0

func (r RefKey) String() string

func (RefKey) ToProto added in v0.226.0

func (r RefKey) ToProto() *schemapb.Ref

func (RefKey) ToRef added in v0.226.0

func (r RefKey) ToRef() *Ref

func (RefKey) Value added in v0.226.0

func (r RefKey) Value() (driver.Value, error)

type Resolver added in v0.100.0

type Resolver interface {
	// Resolve a reference to a symbol declaration or nil.
	Resolve(ref Ref) *ModuleDecl
}

Resolver may be implemented be a node in the AST to resolve references within itself.

type RetryParams added in v0.229.0

type RetryParams struct {
	Count      int
	MinBackoff time.Duration
	MaxBackoff time.Duration
}

func RetryParamsForFSMTransition added in v0.229.0

func RetryParamsForFSMTransition(fsm *FSM, verb *Verb) (RetryParams, error)

RetryParamsForFSMTransition finds the retry metadata for the given transition and returns the retry count, min and max backoff.

type Schema

type Schema struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Modules []*Module `parser:"@@*" protobuf:"2"`
}

func FromProto

func FromProto(s *schemapb.Schema) (*Schema, error)

FromProto converts a protobuf Schema to a Schema and validates it.

func MustValidate added in v0.89.0

func MustValidate(schema *Schema) *Schema

MustValidate panics if a schema is invalid.

This is useful for testing.

func Parse

func Parse(filename string, r io.Reader) (*Schema, error)

func ParseString

func ParseString(filename, input string) (*Schema, error)

func ValidateModuleInSchema added in v0.164.1

func ValidateModuleInSchema(schema *Schema, m optional.Option[*Module]) (*Schema, error)

ValidateModuleInSchema clones and normalises a schema and semantically validates a single module within it. If no module is provided, all modules in the schema are validated.

func ValidateSchema added in v0.164.1

func ValidateSchema(schema *Schema) (*Schema, error)

ValidateSchema clones, normalises and semantically validates a schema.

func (*Schema) Hash

func (s *Schema) Hash() [sha256.Size]byte

func (*Schema) Module added in v0.89.0

func (s *Schema) Module(name string) optional.Option[*Module]

Module returns the named module if it exists.

func (*Schema) Position added in v0.100.0

func (s *Schema) Position() Position

func (*Schema) Resolve added in v0.225.0

func (s *Schema) Resolve(ref *Ref) optional.Option[Decl]

Resolve a reference to a declaration.

func (*Schema) ResolveMonomorphised added in v0.225.0

func (s *Schema) ResolveMonomorphised(ref *Ref) (*Data, error)

ResolveMonomorphised resolves a reference to a monomorphised Data type. Also supports resolving the monomorphised Data type underlying a TypeAlias, where applicable.

If a Ref is not found, returns ErrNotFound.

func (*Schema) ResolveRequestResponseType added in v0.309.1

func (s *Schema) ResolveRequestResponseType(ref *Ref) (Symbol, error)

ResolveRequestResponseType resolves a reference to a supported request/response type, which can be a Data or an Any, or a TypeAlias over either supported type.

func (*Schema) ResolveToType added in v0.225.0

func (s *Schema) ResolveToType(ref *Ref, out Decl) error

ResolveToType resolves a reference to a declaration of the given type.

The out parameter must be a pointer to a non-nil Decl implementation or this will panic.

data := &Data{}
err := s.ResolveToType(ref, data)

func (*Schema) String

func (s *Schema) String() string

func (*Schema) ToProto

func (s *Schema) ToProto() proto.Message

func (*Schema) Upsert

func (s *Schema) Upsert(module *Module)

Upsert inserts or replaces a module.

type Scope added in v0.100.0

type Scope map[string]ModuleDecl

Scope maps relative names to fully qualified types.

func (Scope) String added in v0.100.0

func (s Scope) String() string

type Scoped added in v0.101.0

type Scoped interface {
	Scope() Scope
}

Scoped is implemented by nodes that wish to introduce a new scope.

type Scopes added in v0.100.0

type Scopes []Scope

Scopes to search during type resolution.

func NewScopes added in v0.100.0

func NewScopes() Scopes

NewScopes constructs a new type resolution stack with builtins pre-populated.

func (*Scopes) Add added in v0.100.0

func (s *Scopes) Add(owner optional.Option[*Module], name string, symbol Symbol) error

Add a declaration to the current scope.

func (Scopes) Push added in v0.100.0

func (s Scopes) Push() Scopes

Push a new Scope onto the stack.

This contains references to previous Scopes so that updates are preserved.

func (Scopes) PushScope added in v0.101.0

func (s Scopes) PushScope(scope Scope) Scopes

func (Scopes) Resolve added in v0.100.0

func (s Scopes) Resolve(ref Ref) *ModuleDecl

Resolve a reference to a symbol declaration or nil.

func (Scopes) ResolveType added in v0.157.0

func (s Scopes) ResolveType(t Type) *ModuleDecl

func (Scopes) String added in v0.100.0

func (s Scopes) String() string

type Secret added in v0.146.0

type Secret struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Name     string   `parser:"'secret' @Ident" protobuf:"3"`
	Type     Type     `parser:"@@" protobuf:"4"`
}

func SecretFromProto added in v0.146.3

func SecretFromProto(s *schemapb.Secret) *Secret

func (*Secret) GetName added in v0.146.0

func (s *Secret) GetName() string

func (*Secret) IsExported added in v0.193.0

func (s *Secret) IsExported() bool

func (*Secret) Position added in v0.146.0

func (s *Secret) Position() Position

func (*Secret) String added in v0.146.0

func (s *Secret) String() string

func (*Secret) ToProto added in v0.146.0

func (s *Secret) ToProto() protoreflect.ProtoMessage

type String

type String struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Str bool `parser:"@'String'" protobuf:"-"`
}

func (*String) Equal added in v0.226.0

func (s *String) Equal(other Type) bool

func (*String) GetName added in v0.140.0

func (*String) GetName() string

func (*String) Position added in v0.100.0

func (s *String) Position() Position

func (*String) String

func (*String) String() string

func (*String) ToProto

func (s *String) ToProto() proto.Message

type StringValue added in v0.136.0

type StringValue struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Value string `parser:"@String" protobuf:"2"`
}

func (*StringValue) GetValue added in v0.153.0

func (s *StringValue) GetValue() any

func (*StringValue) Position added in v0.136.0

func (s *StringValue) Position() Position

func (*StringValue) String added in v0.136.0

func (s *StringValue) String() string

func (*StringValue) ToProto added in v0.136.0

func (s *StringValue) ToProto() proto.Message

type Subscription added in v0.232.0

type Subscription struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Name     string   `parser:"'subscription' @Ident" protobuf:"3"`
	Topic    *Ref     `parser:"@@" protobuf:"4"`
}

func SubscriptionFromProto added in v0.232.0

func SubscriptionFromProto(s *schemapb.Subscription) *Subscription

func (*Subscription) GetName added in v0.232.0

func (s *Subscription) GetName() string

func (*Subscription) IsExported added in v0.232.0

func (s *Subscription) IsExported() bool

func (*Subscription) Position added in v0.232.0

func (s *Subscription) Position() Position

func (*Subscription) String added in v0.232.0

func (s *Subscription) String() string

func (*Subscription) ToProto added in v0.232.0

func (s *Subscription) ToProto() proto.Message

type Symbol added in v0.149.2

type Symbol interface {
	Node
	// contains filtered or unexported methods
}

Symbol represents a symbol in the schema grammar.

A Symbol is a named type that can be referenced by other types. This includes user defined data types such as data structures and enums, and builtin types.

type Time

type Time struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Time bool `parser:"@'Time'" protobuf:"-"`
}

func (*Time) Equal added in v0.226.0

func (t *Time) Equal(other Type) bool

func (*Time) GetName added in v0.140.0

func (*Time) GetName() string

func (*Time) Position added in v0.100.0

func (t *Time) Position() Position

func (*Time) String

func (*Time) String() string

func (*Time) ToProto

func (t *Time) ToProto() proto.Message

type Topic added in v0.232.0

type Topic struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string `parser:"@Comment*" protobuf:"2"`
	Export   bool     `parser:"@'export'?" protobuf:"3"`
	Name     string   `parser:"'topic' @Ident" protobuf:"4"`
	Event    Type     `parser:"@@" protobuf:"5"`
}

func TopicFromProto added in v0.232.0

func TopicFromProto(t *schemapb.Topic) *Topic

func (*Topic) GetName added in v0.232.0

func (t *Topic) GetName() string

func (*Topic) IsExported added in v0.232.0

func (t *Topic) IsExported() bool

func (*Topic) Position added in v0.232.0

func (t *Topic) Position() Position

func (*Topic) String added in v0.232.0

func (t *Topic) String() string

func (*Topic) ToProto added in v0.232.0

func (t *Topic) ToProto() proto.Message

type Type

type Type interface {
	Node
	Equal(other Type) bool
	// contains filtered or unexported methods
}

Type represents a Type Node in the schema grammar.

func ParseType added in v0.226.0

func ParseType(filename, input string) (Type, error)

ParseType parses the string representation of a type.

func TypeFromProto added in v0.226.0

func TypeFromProto(s *schemapb.Type) Type

type TypeAlias added in v0.216.0

type TypeAlias struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string   `parser:"@Comment*" protobuf:"2"`
	Export   bool       `parser:"@'export'?" protobuf:"3"`
	Name     string     `parser:"'typealias' @Ident" protobuf:"4"`
	Type     Type       `parser:"@@" protobuf:"5"`
	Metadata []Metadata `parser:"@@*" protobuf:"6"`
}

func TypeAliasFromProto added in v0.216.0

func TypeAliasFromProto(s *schemapb.TypeAlias) *TypeAlias

func (*TypeAlias) GetName added in v0.216.0

func (t *TypeAlias) GetName() string

func (*TypeAlias) IsExported added in v0.216.0

func (t *TypeAlias) IsExported() bool

func (*TypeAlias) Position added in v0.216.0

func (t *TypeAlias) Position() Position

func (*TypeAlias) String added in v0.216.0

func (t *TypeAlias) String() string

func (*TypeAlias) ToProto added in v0.216.0

func (t *TypeAlias) ToProto() proto.Message

type TypeParameter added in v0.101.0

type TypeParameter struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Name string `parser:"@Ident" protobuf:"2"`
}

func (*TypeParameter) GetName added in v0.140.0

func (t *TypeParameter) GetName() string

func (*TypeParameter) Position added in v0.101.0

func (t *TypeParameter) Position() Position

func (*TypeParameter) String added in v0.101.0

func (t *TypeParameter) String() string

func (*TypeParameter) ToProto added in v0.101.0

type TypeValue added in v0.190.0

type TypeValue struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Value Type `parser:"@@" protobuf:"2"`
}

func (*TypeValue) GetValue added in v0.190.0

func (t *TypeValue) GetValue() any

func (*TypeValue) Position added in v0.190.0

func (t *TypeValue) Position() Position

func (*TypeValue) String added in v0.190.0

func (t *TypeValue) String() string

func (*TypeValue) ToProto added in v0.190.0

func (t *TypeValue) ToProto() proto.Message

type Unit added in v0.94.0

type Unit struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Unit bool `parser:"@'Unit'" protobuf:"-"`
}

func (*Unit) Equal added in v0.226.0

func (u *Unit) Equal(other Type) bool

func (*Unit) GetName added in v0.140.0

func (u *Unit) GetName() string

func (*Unit) Position added in v0.100.0

func (u *Unit) Position() Position

func (*Unit) String added in v0.94.0

func (u *Unit) String() string

func (*Unit) ToProto added in v0.94.0

func (u *Unit) ToProto() protoreflect.ProtoMessage

type Value added in v0.136.0

type Value interface {
	Node
	GetValue() any
	// contains filtered or unexported methods
}

Value represents a value Node in the schema grammar.

type Verb

type Verb struct {
	Pos Position `parser:"" protobuf:"1,optional"`

	Comments []string   `parser:"@Comment*" protobuf:"2"`
	Export   bool       `parser:"@'export'?" protobuf:"3"`
	Name     string     `parser:"'verb' @Ident" protobuf:"4"`
	Request  Type       `parser:"'(' @@ ')'" protobuf:"5"`
	Response Type       `parser:"@@" protobuf:"6"`
	Metadata []Metadata `parser:"@@*" protobuf:"7"`
}

func VerbFromProto added in v0.136.0

func VerbFromProto(s *schemapb.Verb) *Verb

func (*Verb) AddCall

func (v *Verb) AddCall(verb *Ref)

AddCall adds a call reference to the Verb.

func (*Verb) GetMetadataCronJob added in v0.165.0

func (v *Verb) GetMetadataCronJob() optional.Option[*MetadataCronJob]

func (*Verb) GetMetadataIngress added in v0.91.0

func (v *Verb) GetMetadataIngress() optional.Option[*MetadataIngress]

func (*Verb) GetName added in v0.140.0

func (v *Verb) GetName() string

func (*Verb) IsExported added in v0.193.0

func (v *Verb) IsExported() bool

func (*Verb) Kind added in v0.202.0

func (v *Verb) Kind() VerbKind

Kind returns the kind of Verb this is.

func (*Verb) Position added in v0.100.0

func (v *Verb) Position() Position

func (*Verb) String

func (v *Verb) String() string

func (*Verb) ToProto

func (v *Verb) ToProto() proto.Message

type VerbKind added in v0.202.0

type VerbKind string

VerbKind is the kind of Verb: verb, sink, source or empty.

const (
	// VerbKindVerb is a normal verb taking an input and an output of any non-unit type.
	VerbKindVerb VerbKind = "verb"
	// VerbKindSink is a verb that takes an input and returns unit.
	VerbKindSink VerbKind = "sink"
	// VerbKindSource is a verb that returns an output and takes unit.
	VerbKindSource VerbKind = "source"
	// VerbKindEmpty is a verb that takes unit and returns unit.
	VerbKindEmpty VerbKind = "empty"
)

Directories

Path Synopsis
Package strcase provides programming case conversion functions for strings.
Package strcase provides programming case conversion functions for strings.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL