Documentation ¶
Index ¶
- Constants
- func DataToJSONSchema(schema *Schema, dataRef DataRef) (*jsonschema.Schema, error)
- func Normalise[T Node](n T) T
- func ProtobufSchema() string
- func ValidateModule(module *Module) error
- func Visit(n Node, visit func(n Node, next func() error) error) error
- type AbstractRef
- type Array
- type Bool
- type Bytes
- type Data
- type DataRef
- type Database
- type Decl
- type Field
- type Float
- type IngressPathComponent
- type IngressPathLiteral
- type IngressPathParameter
- type Int
- type Map
- type Metadata
- type MetadataCalls
- type MetadataDatabases
- type MetadataIngress
- type Module
- type Node
- type Optional
- type Position
- type Ref
- type RefProto
- type Schema
- func (s *Schema) DataMap() map[DataRef]*Data
- func (s *Schema) Hash() [sha256.Size]byte
- func (s *Schema) Module(name string) types.Option[*Module]
- func (s *Schema) ResolveDataRef(ref *DataRef) *Data
- func (s *Schema) ResolveVerbRef(ref *VerbRef) *Verb
- func (s *Schema) String() string
- func (s *Schema) ToProto() proto.Message
- func (s *Schema) Upsert(module *Module)
- type SinkRef
- type SourceRef
- type String
- type Time
- type Type
- type Unit
- type Verb
- type VerbRef
Constants ¶
const BuiltinsSource = `` /* 428-byte string literal not displayed */
BuiltinsSource is the schema source code for built-in types.
Variables ¶
This section is empty.
Functions ¶
func DataToJSONSchema ¶ added in v0.1.1
DataToJSONSchema converts the schema for a Data object to a JSON Schema.
It takes in the full schema in order to resolve and define references.
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 ValidateModule ¶
ValidateModule performs the subset of semantic validation possible on a single module.
Types ¶
type AbstractRef ¶ added in v0.93.0
AbstractRef is an abstract reference to a function or data type.
func (AbstractRef[Proto]) String ¶ added in v0.93.0
func (v AbstractRef[Proto]) String() string
func (*AbstractRef[Proto]) ToProto ¶ added in v0.93.0
func (v *AbstractRef[Proto]) ToProto() proto.Message
type Array ¶
type Bool ¶
type Bytes ¶ added in v0.88.0
type Data ¶
type Data struct { Pos Position `parser:"" protobuf:"1,optional"` Comments []string `parser:"@Comment*" protobuf:"5"` Name string `parser:"'data' @Ident '{'" protobuf:"2"` Fields []*Field `parser:"@@* '}'" protobuf:"3"` Metadata []Metadata `parser:"@@*" protobuf:"4"` }
A Data structure.
func DataToSchema ¶
type DataRef ¶
type DataRef = AbstractRef[schemapb.DataRef]
DataRef is a reference to a data structure.
func DataRefFromProto ¶ added in v0.93.0
func ParseDataRef ¶ added in v0.93.0
type Database ¶ added in v0.95.0
type Database struct { Pos Position `parser:"" protobuf:"1,optional"` Comments []string `parser:"@Comment*" protobuf:"3"` Name string `parser:"'database' @Ident" protobuf:"2"` }
func DatabaseToSchema ¶ added in v0.95.0
type Field ¶
type Float ¶
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:"@Ident" protobuf:"2"` }
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) 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 Map ¶
type MetadataCalls ¶
type MetadataCalls struct { Pos Position `parser:"" protobuf:"1,optional"` Calls []*VerbRef `parser:"'calls' @@ (',' @@)*" protobuf:"2"` }
func (*MetadataCalls) String ¶
func (m *MetadataCalls) String() string
func (*MetadataCalls) ToProto ¶
func (m *MetadataCalls) ToProto() proto.Message
type MetadataDatabases ¶ added in v0.95.0
type MetadataDatabases struct { Pos Position `parser:"" protobuf:"1,optional"` Calls []*Database `parser:"'database' 'calls' @@ (',' @@)*" protobuf:"2"` }
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' | 'ftl')" protobuf:"2"` Method string `parser:"@('GET' | 'POST' | 'PUT' | 'DELETE')" protobuf:"3"` Path []IngressPathComponent `parser:"('/' @@)+" protobuf:"4"` }
func (*MetadataIngress) String ¶
func (m *MetadataIngress) String() string
func (*MetadataIngress) ToProto ¶
func (m *MetadataIngress) ToProto() proto.Message
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 ModuleFromProto ¶
ModuleFromProto converts a protobuf Module to a Module and validates it.
func ParseModuleString ¶
type Node ¶
type Node interface { String() string ToProto() proto.Message // 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.
type Position ¶
type Ref ¶
type Ref struct { Pos Position `parser:"" protobuf:"1,optional"` Module string `parser:"(@Ident '.')?" protobuf:"3"` Name string `parser:"@Ident" protobuf:"2"` }
Ref is an untyped reference to a symbol.
type RefProto ¶ added in v0.93.0
type RefProto interface { schemapb.VerbRef | schemapb.DataRef | schemapb.SinkRef | schemapb.SourceRef }
RefProto is a constraint on the type of proto that can be used in a Ref.
type Schema ¶
type Schema struct { Pos Position `parser:"" protobuf:"1,optional"` Modules []*Module `parser:"@@*" protobuf:"2"` }
func MustValidate ¶ added in v0.89.0
MustValidate panics if a schema is invalid.
This is useful for testing.
func ParseString ¶
func (*Schema) ResolveDataRef ¶ added in v0.80.0
func (*Schema) ResolveVerbRef ¶ added in v0.80.0
type SinkRef ¶ added in v0.93.0
type SinkRef = AbstractRef[schemapb.SinkRef]
SinkRef is a reference to a Sink.
func ParseSinkRef ¶ added in v0.93.0
func SinkRefFromProto ¶ added in v0.93.0
type SourceRef ¶ added in v0.93.0
type SourceRef = AbstractRef[schemapb.SourceRef]
SourceRef is a reference to a Source.
func ParseSourceRef ¶ added in v0.93.0
func SourceRefFromProto ¶ added in v0.93.0
type String ¶
type Time ¶
type Type ¶
type Type interface { Node // contains filtered or unexported methods }
Type represents a Type Node in the schema grammar.
type Unit ¶ added in v0.94.0
type Unit struct { Pos Position `parser:"" protobuf:"1,optional"` Unit bool `parser:"@'Unit'" protobuf:"-"` }
func (*Unit) ToProto ¶ added in v0.94.0
func (u *Unit) ToProto() protoreflect.ProtoMessage
type Verb ¶
type Verb struct { Pos Position `parser:"" protobuf:"1,optional"` Comments []string `parser:"@Comment*" protobuf:"3"` Name string `parser:"'verb' @Ident" protobuf:"2"` Request Type `parser:"'(' @@ ')'" protobuf:"4"` Response Type `parser:"@@" protobuf:"5"` Metadata []Metadata `parser:"@@*" protobuf:"6"` }
func VerbToSchema ¶
func (*Verb) GetMetadataIngress ¶ added in v0.91.0
func (v *Verb) GetMetadataIngress() types.Option[*MetadataIngress]
type VerbRef ¶
type VerbRef = AbstractRef[schemapb.VerbRef]
VerbRef is a reference to a Verb.
func ParseVerbRef ¶ added in v0.93.0
func VerbRefFromProto ¶
Source Files ¶
- array.go
- bool.go
- builtin.go
- bytes.go
- data.go
- database.go
- dataref.go
- encoding.go
- field.go
- float.go
- int.go
- jsonschema.go
- map.go
- metadatacalls.go
- metadatadatabases.go
- metadataingress.go
- module.go
- normalise.go
- optional.go
- parser.go
- protobuf.go
- protobuf_dec.go
- protobuf_enc.go
- refs.go
- schema.go
- sinkref.go
- sourceref.go
- string.go
- time.go
- unit.go
- validate.go
- verb.go
- verbref.go
- visit.go