Documentation ¶
Index ¶
- Variables
- func BoolVal(v Value) (bool, error)
- func Register(name string, ext any)
- func StrVal(v Value) (string, error)
- type Attr
- func (a *Attr) Bool() (bool, error)
- func (a *Attr) Bools() ([]bool, error)
- func (a *Attr) Int() (int, error)
- func (a *Attr) Int64() (int64, error)
- func (a *Attr) Ref() (string, error)
- func (a *Attr) Refs() ([]*Ref, error)
- func (a *Attr) String() (string, error)
- func (a *Attr) Strings() ([]string, error)
- type Config
- type DefaultExtension
- type EvalFunc
- type Evaluator
- type ListValue
- type LiteralValue
- type Marshaler
- type MarshalerFunc
- type Option
- type RawExpr
- type Ref
- type Remainer
- type Resource
- type State
- type Type
- type TypeAttr
- type TypeRegistry
- type TypeRegistryOption
- type TypeSpec
- type TypeSpecOption
- type Value
Constants ¶
This section is empty.
Variables ¶
var Marshal = MarshalerFunc(New().MarshalSpec)
Marshal returns the Atlas HCL encoding of v.
Functions ¶
func BoolVal ¶
BoolVal returns the bool representation of v. If v is not a *LiteralValue it returns an error. If the raw string representation of v cannot be read as a bool, an error is returned as well.
Types ¶
type Attr ¶
Attr is an attribute of a Resource.
func ListAttr ¶
ListAttr is a helper method for constructing *schemahcl.Attr instances that contain list values.
func LitAttr ¶
LitAttr is a helper method for constructing *schemahcl.Attr instances that contain literal values.
func StrLitAttr ¶
StrLitAttr is a helper method for constructing *schemahcl.Attr instances that contain literal values representing string literals.
func (*Attr) Bool ¶
Bool returns a boolean from the Value of the Attr. If The value is not a LiteralValue or the value cannot be converted to a boolean an error is returned.
func (*Attr) Bools ¶
Bools returns a slice of bools from the Value of the Attr. If The value is not a ListValue or its values cannot be converted to bools an error is returned.
func (*Attr) Int ¶
Int returns an int from the Value of the Attr. If The value is not a LiteralValue or the value cannot be converted to an integer an error is returned.
func (*Attr) Int64 ¶
Int64 returns an int64 from the Value of the Attr. If The value is not a LiteralValue or the value cannot be converted to an integer an error is returned.
func (*Attr) Ref ¶
Ref returns the string representation of the Attr. If the value is not a Ref or the value an error is returned.
type Config ¶
type Config struct {
// contains filtered or unexported fields
}
Config configures an unmarshaling.
type DefaultExtension ¶
type DefaultExtension struct {
Extra Resource
}
DefaultExtension can be embedded in structs that need basic default behavior. For instance, DefaultExtension implements Remainer, and has a private *Resource field that can store additional attributes and children that do not match the structs fields.
func (*DefaultExtension) Attr ¶
func (d *DefaultExtension) Attr(name string) (*Attr, bool)
Attr returns the Attr by the provided name and reports whether it was found.
func (*DefaultExtension) Remain ¶
func (d *DefaultExtension) Remain() *Resource
Remain implements the Remainer interface.
type Evaluator ¶
type Evaluator interface { // Eval evaluates parsed HCL files using input variables into a schema.Realm. Eval(*hclparse.Parser, any, map[string]string) error }
Evaluator is the interface that wraps the Eval function.
type ListValue ¶
type ListValue struct {
V []Value
}
ListValue implements Value and represents a list of Values.
type LiteralValue ¶
type LiteralValue struct {
V string
}
LiteralValue implements Value and represents a literal value (string, number, etc.)
type Marshaler ¶
type Marshaler interface { // MarshalSpec marshals the provided input into a valid Atlas HCL document. MarshalSpec(any) ([]byte, error) }
Marshaler is the interface that wraps the MarshalSpec function.
type MarshalerFunc ¶
MarshalerFunc is the function type that is implemented by the MarshalSpec method of the Marshaler interface.
func (MarshalerFunc) MarshalSpec ¶
func (f MarshalerFunc) MarshalSpec(v any) ([]byte, error)
MarshalSpec implements Marshaler.
type Option ¶
type Option func(*Config)
Option configures a Config.
func WithScopedEnums ¶
WithScopedEnums configured a list of allowed ENUMs to be used in the given context, block or attribute. For example, the following option allows setting HASH or BTREE to the "using" attribute in "index" block.
WithScopedEnums("table.index.type", "HASH", "BTREE") table "t" { ... index "i" { type = HASH // Allowed. type = INVALID // Not Allowed. } }
type RawExpr ¶
type RawExpr struct {
X string
}
RawExpr implements Value and represents any raw expression.
type Ref ¶
type Ref struct {
V string
}
Ref implements Value and represents a reference to another Resource. The path to a Resource under the root Resource is expressed as "$<type>.<name>..." recursively. For example, a resource of type "table" that is named "users" and is a direct child of the root Resource's address shall be "$table.users". A child resource of that table of type "column" and named "id", shall be referenced as "$table.users.$column.id", and so on.
type Remainer ¶
type Remainer interface { // Remain returns a resource representing any extra children and attributes // that are related to the struct but were not mapped to any of its fields. Remain() *Resource }
Remainer is the interface that is implemented by types that can store additional attributes and children resources.
type Resource ¶
type Resource struct { Name string Qualifier string Type string Attrs []*Attr Children []*Resource }
Resource is a generic container for resources described in configurations.
func (*Resource) As ¶
As reads the attributes and children resources of the resource into the target struct.
func (*Resource) Attr ¶
Attr returns the Attr by the provided name and reports whether it was found.
func (*Resource) FinalName ¶
FinalName returns the final name for the resource by examining the struct tags for the extension of the Resource's type. If no such extension is registered or the extension struct does not have a name field, an error is returned.
func (*Resource) Resource ¶
Resource returns the first child Resource by its type and reports whether it was found.
type State ¶
type State struct {
// contains filtered or unexported fields
}
State is used to evaluate and marshal Atlas HCL documents and stores a configuration for these operations.
func (*State) Eval ¶
Eval evaluates the parsed HCL documents using the input variables and populates v using the result.
func (*State) EvalBytes ¶
EvalBytes evaluates the data byte-slice as an Atlas HCL document using the input variables and stores the result in v.
type TypeAttr ¶
type TypeAttr struct { // Name should be a snake_case of related the schema.Type struct field. Name string Kind reflect.Kind Required bool }
TypeAttr describes an attribute of a TypeSpec, for example `varchar` fields can have a `size` attribute.
func SizeTypeAttr ¶
SizeTypeAttr returns a TypeAttr for a size attribute.
type TypeRegistry ¶
type TypeRegistry struct {
// contains filtered or unexported fields
}
TypeRegistry is a collection of *schemahcl.TypeSpec.
func NewRegistry ¶
func NewRegistry(opts ...TypeRegistryOption) *TypeRegistry
NewRegistry creates a new *TypeRegistry, registers the provided types and panics if an error occurs.
func (*TypeRegistry) Convert ¶
func (r *TypeRegistry) Convert(typ schema.Type) (*Type, error)
Convert converts the schema.Type to a *schemahcl.Type.
func (*TypeRegistry) PrintType ¶
func (r *TypeRegistry) PrintType(typ *Type) (string, error)
PrintType returns the string representation of a column type which can be parsed by the driver into a schema.Type.
func (*TypeRegistry) Register ¶
func (r *TypeRegistry) Register(specs ...*TypeSpec) error
Register adds one or more TypeSpec to the registry.
func (*TypeRegistry) Specs ¶
func (r *TypeRegistry) Specs() []*TypeSpec
Specs returns the TypeSpecs in the registry.
type TypeRegistryOption ¶
type TypeRegistryOption func(*TypeRegistry) error
TypeRegistryOption configures a TypeRegistry.
func WithFormatter ¶
func WithFormatter(f func(schema.Type) (string, error)) TypeRegistryOption
WithFormatter configures the registry to use a formatting function for printing schema.Type as string.
func WithParser ¶
func WithParser(parser func(string) (schema.Type, error)) TypeRegistryOption
WithParser configures the registry to use a parsing function for converting a string to a schema.Type.
func WithSpecFunc ¶
func WithSpecFunc(spec func(schema.Type) (*Type, error)) TypeRegistryOption
WithSpecFunc configures the registry to use the given function for converting a schema.Type to schemahcl.Type
func WithSpecs ¶
func WithSpecs(specs ...*TypeSpec) TypeRegistryOption
WithSpecs configures the registry to register the given list of type specs.
type TypeSpec ¶
type TypeSpec struct { // Name is the identifier for the type in an Atlas DDL document. Name string // T is the database identifier for the type. T string Attributes []*TypeAttr // RType is the reflect.Type of the schema.Type used to describe the TypeSpec. // This field is optional and used to determine the TypeSpec in cases where the // schema.Type does not have a `T` field. RType reflect.Type // Format is an optional formatting function. // If exists, it will be used instead the registry one. Format func(*Type) (string, error) // FromSpec is an optional function that can be attached // to the type spec and allows converting the schema spec // type to a schema type (from document to databse). FromSpec func(*Type) (schema.Type, error) // ToSpec is an optional function that can be attached // to the type spec and allows converting the schema type // to a schema spec type (from database to document). ToSpec func(schema.Type) (*Type, error) }
TypeSpec represents a specification for defining a Type.
func AliasTypeSpec ¶
func AliasTypeSpec(name, dbType string, opts ...TypeSpecOption) *TypeSpec
AliasTypeSpec returns a TypeSpec with the provided name.
func NewTypeSpec ¶
func NewTypeSpec(name string, opts ...TypeSpecOption) *TypeSpec
NewTypeSpec returns a TypeSpec with the provided name.
type TypeSpecOption ¶
type TypeSpecOption func(*TypeSpec)
TypeSpecOption configures a schemahcl.TypeSpec.
func WithAttributes ¶
func WithAttributes(attrs ...*TypeAttr) TypeSpecOption
WithAttributes returns an attributes TypeSpecOption.
func WithFromSpec ¶
func WithFromSpec(f func(*Type) (schema.Type, error)) TypeSpecOption
WithFromSpec allows configuring the FromSpec convert function using functional options.
func WithToSpec ¶
func WithToSpec(f func(schema.Type) (*Type, error)) TypeSpecOption
WithToSpec allows configuring the ToSpec convert function using functional options.
func WithTypeFormatter ¶
func WithTypeFormatter(f func(*Type) (string, error)) TypeSpecOption
WithTypeFormatter allows overriding the Format function for the Type.