Skip to content

package goschema

import "github.com/cloudboss/unobin/pkg/goschema"

Package goschema reads a Go library's source to learn the output schema of each registered resource, data source, and action. The dev CLI feeds the result into the reference checker so trailing field names in references like `resource.app.id` can be validated at compile time.

Functions

func Read

func Read(dir string, extra ...ModuleRoot) (*runtime.LibrarySchema, []string, error)

Read parses the Go library rooted at dir and returns its schema plus any warnings: registered types whose sibling Output struct could not be located, and constraints whose pieces could not be extracted from source. Returns an error when no `Library()` function is found in dir's root package, or when the directory cannot be read. extra lists further module roots the walker may read source from when a referenced type lives outside the library's own module.

Types

type Analysis

type Analysis struct {
    Schema   *runtime.LibrarySchema
    Index    *SourceIndex
    Warnings []string
}

Analysis is the complete Go library source analysis.

func Analyze

func Analyze(dir string, extra ...ModuleRoot) (*Analysis, error)

Analyze reads a Go library's source and returns its schema facts and locations.

type GoLocation

type GoLocation struct {
    Path   string
    Line   int
    Column int
    Offset int
}

GoLocation points at a byte in a Go source file.

type ModuleRoot

type ModuleRoot struct {
    Path string
    Dir  string
}

ModuleRoot names a module's source on disk: Path is the module's import path and Dir is the directory holding its source. The walker resolves a selector into any root whose Path contains the selector's import path.

type SourceIndex

type SourceIndex struct {
    LibraryFunc   GoLocation
    Registrations map[string]map[string]GoLocation
    InputTypes    map[string]map[string]GoLocation
    OutputTypes   map[string]map[string]GoLocation
    InputFields   map[string]map[string]map[string]GoLocation
    OutputFields  map[string]map[string]map[string]GoLocation
    ConfigType    GoLocation
    ConfigFields  map[string]GoLocation
    Functions     map[string]GoLocation
}

SourceIndex records source locations for a Go library schema.

func ReadWithIndex

func ReadWithIndex(dir string, extra ...ModuleRoot) (
    schema *runtime.LibrarySchema,
    index *SourceIndex,
    warnings []string,
    err error,
)

ReadWithIndex reads a Go library schema and the matching source index.

type SourceIndexCache

type SourceIndexCache struct {
    // contains filtered or unexported fields
}

SourceIndexCache caches schema and source-index reads by directory.

func NewSourceIndexCache

func NewSourceIndexCache(extra ...ModuleRoot) *SourceIndexCache

NewSourceIndexCache returns an empty source index cache.

func (*SourceIndexCache) Invalidate

func (c *SourceIndexCache) Invalidate(dir string)

Invalidate removes one directory from the cache.

func (*SourceIndexCache) Read

func (c *SourceIndexCache) Read(dir string) (
    schema *runtime.LibrarySchema,
    index *SourceIndex,
    warnings []string,
    err error,
)

Read reads a schema and source index, using the cache when present.