Documentation
¶
Overview ¶
Package spec contains the Go representation of an Regolithe Specification Set as well as various functions to handle reading and writing them.
Index ¶
- func Pluralize(word string) string
- type APIInfo
- type Attribute
- type AttributeNameConverterFunc
- type AttributeType
- type AttributeTypeConverterFunc
- type Config
- type Model
- type Parameter
- type ParameterDefinition
- type ParameterMapping
- type ParameterType
- type Relation
- type RelationAction
- type Relationship
- type Specification
- type SpecificationSet
- type TypeMap
- type TypeMapping
- func (t TypeMapping) All(mode string) (mapping []*TypeMap)
- func (t TypeMapping) Mapping(mode string, externalType string) (mapping *TypeMap, err error)
- func (t TypeMapping) Read(reader io.Reader, validate bool) (err error)
- func (t TypeMapping) Validate() []error
- func (t TypeMapping) Write(writer io.Writer) error
- type ValidationMap
- type ValidationMapping
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type APIInfo ¶
type APIInfo struct {
Prefix string `yaml:"prefix,omitempty" json:"prefix,omitempty"`
Root string `yaml:"root,omitempty" json:"root,omitempty"`
Version int `yaml:"version,omitempty" json:"version,omitempty"`
}
An APIInfo holds general information about the API.
func LoadAPIInfo ¶
LoadAPIInfo loads an APIInfo from the given file.
type Attribute ¶
type Attribute struct {
Name string `yaml:"name,omitempty" json:"name,omitempty"`
ExposedName string `yaml:"exposed_name,omitempty" json:"exposed_name,omitempty"`
Description string `yaml:"description,omitempty" json:"description,omitempty"`
Type AttributeType `yaml:"type,omitempty" json:"type,omitempty"`
Exposed bool `yaml:"exposed,omitempty" json:"exposed,omitempty"`
SubType string `yaml:"subtype,omitempty" json:"subtype,omitempty"`
Stored bool `yaml:"stored,omitempty" json:"stored,omitempty"`
Required bool `yaml:"required,omitempty" json:"required,omitempty"`
ReadOnly bool `yaml:"read_only,omitempty" json:"read_only,omitempty"`
CreationOnly bool `yaml:"creation_only,omitempty" json:"creation_only,omitempty"`
AllowedChars string `yaml:"allowed_chars,omitempty" json:"allowed_chars,omitempty"`
AllowedCharsMessage string `yaml:"allowed_chars_message,omitempty" json:"allowed_chars_message,omitempty"`
AllowedChoices []string `yaml:"allowed_choices,omitempty" json:"allowed_choices,omitempty"`
Autogenerated bool `yaml:"autogenerated,omitempty" json:"autogenerated,omitempty"`
DefaultValue any `yaml:"default_value,omitempty" json:"default_value,omitempty"`
Deprecated bool `yaml:"deprecated,omitempty" json:"deprecated,omitempty"`
ExampleValue any `yaml:"example_value,omitempty" json:"example_value,omitempty"`
Filterable bool `yaml:"filterable,omitempty" json:"filterable,omitempty"`
ForeignKey bool `yaml:"foreign_key,omitempty" json:"foreign_key,omitempty"`
Getter bool `yaml:"getter,omitempty" json:"getter,omitempty"`
Setter bool `yaml:"setter,omitempty" json:"setter,omitempty"`
Identifier bool `yaml:"identifier,omitempty" json:"identifier,omitempty"`
MaxLength uint16 `yaml:"max_length,omitempty" json:"max_length,omitempty"`
MinLength uint16 `yaml:"min_length,omitempty" json:"min_length,omitempty"`
MaxValue float64 `yaml:"max_value,omitempty" json:"max_value,omitempty"`
MinValue float64 `yaml:"min_value,omitempty" json:"min_value,omitempty"`
Orderable bool `yaml:"orderable,omitempty" json:"orderable,omitempty"`
PrimaryKey bool `yaml:"primary_key,omitempty" json:"primary_key,omitempty"`
Secret bool `yaml:"secret,omitempty" json:"secret,omitempty"`
Transient bool `yaml:"transient,omitempty" json:"transient,omitempty"`
OmitEmpty bool `yaml:"omit_empty,omitempty" json:"omit_empty,omitempty"`
Encrypted bool `yaml:"encrypted,omitempty" json:"encrypted,omitempty"`
Signed bool `yaml:"signed,omitempty" json:"signed,omitempty"`
Validations []string `yaml:"validations,omitempty" json:"validations,omitempty"`
Extensions map[string]any `yaml:"extensions,omitempty" json:"extensions,omitempty"`
ConvertedName string `yaml:"-" json:"-"`
ConvertedType string `yaml:"-" json:"-"`
TypeProvider string `yaml:"-" json:"-"`
Initializer string `yaml:"-" json:"-"`
ValidationProviders map[string]*ValidationMap `yaml:"-" json:"-"`
// contains filtered or unexported fields
}
An Attribute represents a regolithe specification attribute.
type AttributeNameConverterFunc ¶
AttributeNameConverterFunc is the type of a attribute name conveter.
type AttributeType ¶
type AttributeType string
AttributeType represents the various type for an attribute.
const ( AttributeTypeString AttributeType = "string" AttributeTypeInt AttributeType = "integer" AttributeTypeFloat AttributeType = "float" AttributeTypeBool AttributeType = "boolean" AttributeTypeEnum AttributeType = "enum" AttributeTypeList AttributeType = "list" AttributeTypeObject AttributeType = "object" AttributeTypeTime AttributeType = "time" AttributeTypeExt AttributeType = "external" AttributeTypeRef AttributeType = "ref" AttributeTypeRefList AttributeType = "refList" AttributeTypeRefMap AttributeType = "refMap" )
Various values for AttributeType.
type AttributeTypeConverterFunc ¶
type AttributeTypeConverterFunc func(typ AttributeType, subtype string) (converted string, provider string)
AttributeTypeConverterFunc is the type of a attribute type conveter.
type Config ¶
type Config struct {
Author string
Copyright string
Description string
Email string
Name string
ProductName string
URL string
Version string
// contains filtered or unexported fields
}
Config holds the Specification Config.
func LoadConfig ¶
LoadConfig loads the config from an ini file.
type Model ¶
type Model struct {
RestName string `yaml:"rest_name,omitempty" json:"rest_name,omitempty"`
ResourceName string `yaml:"resource_name,omitempty" json:"resource_name,omitempty"`
EntityName string `yaml:"entity_name,omitempty" json:"entity_name,omitempty"`
Package string `yaml:"package,omitempty" json:"package,omitempty"`
Group string `yaml:"group,omitempty" json:"group,omitempty"`
Description string `yaml:"description,omitempty" json:"description,omitempty"`
Documentation string `yaml:"documentation,omitempty" json:"documentation,omitempty"`
Aliases []string `yaml:"aliases,omitempty" json:"aliases,omitempty"`
Private bool `yaml:"private,omitempty" json:"private,omitempty"`
Get *RelationAction `yaml:"get,omitempty" json:"get,omitempty"`
Update *RelationAction `yaml:"update,omitempty" json:"update,omitempty"`
Delete *RelationAction `yaml:"delete,omitempty" json:"delete,omitempty"`
Extends []string `yaml:"extends,omitempty" json:"extends,omitempty"`
IsRoot bool `yaml:"root,omitempty" json:"root,omitempty"`
Detached bool `yaml:"detached,omitempty" json:"detached,omitempty"`
Validations []string `yaml:"validations,omitempty" json:"validations,omitempty"`
Extensions map[string]any `yaml:"extensions,omitempty" json:"extensions,omitempty"`
EntityNamePlural string `yaml:"-" json:"-"`
}
A Model holds generic information about a specification.
type Parameter ¶
type Parameter struct {
Name string `yaml:"name,omitempty" json:"name,omitempty"`
Description string `yaml:"description,omitempty" json:"description,omitempty"`
Type ParameterType `yaml:"type,omitempty" json:"type,omitempty"`
Multiple bool `yaml:"multiple,omitempty" json:"multiple,omitempty"`
AllowedChoices []string `yaml:"allowed_choices,omitempty" json:"allowed_choices,omitempty"`
DefaultValue any `yaml:"default_value,omitempty" json:"default_value,omitempty"`
ExampleValue any `yaml:"example_value,omitempty" json:"example_value,omitempty"`
}
A Parameter represent one parameter that can be sent with a query
type ParameterDefinition ¶
type ParameterDefinition struct {
Required [][][]string `yaml:"required,omitempty" json:"required,omitempty"`
Entries []*Parameter `yaml:"entries,omitempty" json:"entries,omitempty"`
}
ParameterDefinition represents a parameter definition.
func (*ParameterDefinition) Validate ¶
func (p *ParameterDefinition) Validate(relatedReSTName string) []error
Validate validates the parameter definition.
type ParameterMapping ¶
type ParameterMapping map[string]*ParameterDefinition
A ParameterMapping is a list parameter mapping
func LoadGlobalParameters ¶
func LoadGlobalParameters(path string) (ParameterMapping, error)
LoadGlobalParameters loads the global parameters file.
func NewParameterMapping ¶
func NewParameterMapping() ParameterMapping
NewParameterMapping returns a new ParameterMapping.
func (ParameterMapping) Read ¶
func (p ParameterMapping) Read(reader io.Reader, validate bool) (err error)
Read loads a validation mapping from the given io.Reader
func (ParameterMapping) Validate ¶
func (p ParameterMapping) Validate() []error
Validate the ParameterMapping
type ParameterType ¶
type ParameterType string
ParameterType represents the various type for a parameter.
const ( ParameterTypeString ParameterType = "string" ParameterTypeInt ParameterType = "integer" ParameterTypeFloat ParameterType = "float" ParameterTypeBool ParameterType = "boolean" ParameterTypeTime ParameterType = "time" ParameterTypeEnum ParameterType = "enum" ParameterTypeDuration ParameterType = "duration" )
Various values for ParameterType.
type Relation ¶
type Relation struct {
RestName string `yaml:"rest_name,omitempty" json:"rest_name,omitempty"`
Get *RelationAction `yaml:"get,omitempty" json:"get,omitempty"`
Create *RelationAction `yaml:"create,omitempty" json:"create,omitempty"`
Update *RelationAction `yaml:"update,omitempty" json:"update,omitempty"`
Delete *RelationAction `yaml:"delete,omitempty" json:"delete,omitempty"`
// contains filtered or unexported fields
}
An Relation represents a specification Relation.
func (*Relation) Specification ¶
func (r *Relation) Specification() Specification
Specification returns the Specification the API links to.
type RelationAction ¶
type RelationAction struct {
Description string `yaml:"description,omitempty" json:"description,omitempty"`
Deprecated bool `yaml:"deprecated,omitempty" json:"deprecated,omitempty"`
ParameterReferences []string `yaml:"global_parameters,omitempty" json:"global_parameters,omitempty"`
ParameterDefinition *ParameterDefinition `yaml:"parameters,omitempty" json:"parameters,omitempty"`
}
A RelationAction represents one the the possible action
type Relationship ¶
type Relationship struct {
Create map[string]*RelationAction
Delete map[string]*RelationAction
Get map[string]*RelationAction
GetMany map[string]*RelationAction
Update map[string]*RelationAction
}
A Relationship describes the hierarchical relationship of the models.
func NewRelationship ¶
func NewRelationship() *Relationship
NewRelationship returns a new Relationship.
func (*Relationship) Set ¶
func (r *Relationship) Set(action string, name string, ra *RelationAction)
Set sets the names that are allows to do the given action.
type Specification ¶
type Specification interface {
// Read reads and load the given reader containing a specification.
// If validates is true, validations will be done.
Read(reader io.Reader, validate bool) error
// Writes write the current state of the Specification in the given
// writer.
Write(writer io.Writer) error
// Validate validates the specification content.
Validate() []error
// ApplyBaseSpecifications applyes the given abstract specification to
// the specification.
ApplyBaseSpecifications(specs ...Specification) error
// Model returns the Specification model.
Model() *Model
// Attribute returns the attribute with the given name in the given version.
Attribute(name string, version string) *Attribute
// Attributes returns all attributes for the given version.
Attributes(version string) []*Attribute
// ExposedAttributes returns only the exposed attributes in the given version.
ExposedAttributes(version string) []*Attribute
// DefaultOrder returns the default ordering of the spec.
DefaultOrder() []string
// AttributeVersions returns all the versions of attributes.
AttributeVersions() []string
// LatestAttributesVersion returns the latest version of the attributes.
LatestAttributesVersion() string
// Relations returns the Specification relations.
Relations() []*Relation
// Relation returns the relation to the given restName.
Relation(restName string) *Relation
// Identitier returns the Attribute used as an identifier.
Identifier() *Attribute
}
A Specification is the interface representing a Regolithe Specification.
func LoadSpecification ¶
func LoadSpecification(specPath string, validate bool) (Specification, error)
LoadSpecification returns a new specification using the given file path.
func NewSpecification ¶
func NewSpecification() Specification
NewSpecification returns a new specification.
type SpecificationSet ¶
type SpecificationSet interface {
// Specification returns the Specification with the given name.
Specification(name string) Specification
// SpecificationGroup returns the Specifications in the given group name.
SpecificationGroup(groupName string) []Specification
// Specifications returns all Specifications.
Specifications() (specs []Specification)
// Len returns the number of specifications in the set.
Len() int
// Relationships is better
Relationships() map[string]*Relationship
// RelationshipsByRestName returns the relationships indexed by rest name.
RelationshipsByRestName() map[string]*Relationship
// RelationshipsByResourceName returns the relationships indexed by resource name.
RelationshipsByResourceName() map[string]*Relationship
// Configuration returns the specification set Config.
Configuration() *Config
// TypeMapping returns the specification set TypeMapping.
TypeMapping() TypeMapping
// ValidationMapping returns the specification set ValidationMapping.
ValidationMapping() ValidationMapping
// APIInfo returns the specification set APIInfo.
APIInfo() *APIInfo
// Groups returns the list of group names.
Groups() []string
}
SpecificationSet represents an entire set of specification.
func LoadSpecificationSet ¶
func LoadSpecificationSet( dirname string, nameConvertFunc AttributeNameConverterFunc, typeConvertFunc AttributeTypeConverterFunc, typeMappingName string, ) (SpecificationSet, error)
LoadSpecificationSet loads and parses all specification in a folder.
func LoadSpecificationSetFromGithub ¶
func LoadSpecificationSetFromGithub( token string, repoURL string, refName string, internalPath string, nameConvertFunc AttributeNameConverterFunc, typeConvertFunc AttributeTypeConverterFunc, typeMappingName string, ) (SpecificationSet, error)
LoadSpecificationSetFromGithub loads a set of specs from github.
type TypeMap ¶
type TypeMap struct {
Type string `yaml:"type,omitempty" json:"type,omitempty"`
Initializer string `yaml:"init,omitempty" json:"init,omitempty"`
Import string `yaml:"import,omitempty" json:"import,omitempty"`
Description string `yaml:"description,omitempty" json:"description,omitempty"`
}
A TypeMap represent a single Type Map.
type TypeMapping ¶
TypeMapping holds the mapping of the external types.
func LoadTypeMapping ¶
func LoadTypeMapping(path string) (TypeMapping, error)
LoadTypeMapping loads a TypeMapping from the given ini file.
func (TypeMapping) All ¶
func (t TypeMapping) All(mode string) (mapping []*TypeMap)
All returns the all the TypeMap for the given mode.
func (TypeMapping) Mapping ¶
func (t TypeMapping) Mapping(mode string, externalType string) (mapping *TypeMap, err error)
Mapping returns the TypeMap for the given external type.
func (TypeMapping) Read ¶
func (t TypeMapping) Read(reader io.Reader, validate bool) (err error)
Read loads a type mapping from the given io.Reader
func (TypeMapping) Validate ¶
func (t TypeMapping) Validate() []error
Validate validates the type mappings against the schema.
type ValidationMap ¶
type ValidationMap struct {
Name string `yaml:"name,omitempty" json:"name,omitempty"`
Import string `yaml:"import,omitempty" json:"import,omitempty"`
}
A ValidationMap represent a single ValidationMap.
type ValidationMapping ¶
type ValidationMapping map[string]map[string]*ValidationMap
ValidationMapping holds the mapping of the validation function.
func LoadValidationMapping ¶
func LoadValidationMapping(path string) (ValidationMapping, error)
LoadValidationMapping loads a ValidationMapping from the given ini file.
func NewValidationMapping ¶
func NewValidationMapping() ValidationMapping
NewValidationMapping returns a new ValidationMapping.
func (ValidationMapping) Mapping ¶
func (v ValidationMapping) Mapping(mode string, functionName string) (mapping *ValidationMap, err error)
Mapping returns the ValidationMap for the given external type.
func (ValidationMapping) Read ¶
func (v ValidationMapping) Read(reader io.Reader, validate bool) (err error)
Read loads a validation mapping from the given io.Reader
func (ValidationMapping) Validate ¶
func (v ValidationMapping) Validate() []error
Validate validates the type mappings against the schema.