Select Git revision
spaces.proto
schema.go 4.72 KiB
package schema
import (
"context"
"git.perx.ru/perxis/perxis-go/pkg/errors"
"git.perx.ru/perxis/perxis-go/pkg/expr"
"git.perx.ru/perxis/perxis-go/pkg/schema/field"
"git.perx.ru/perxis/perxis-go/pkg/schema/modify"
"git.perx.ru/perxis/perxis-go/pkg/schema/validate"
)
type Schema struct {
field.Field
Loaded bool `json:"loaded"`
Metadata map[string]string `json:"metadata"`
}
func New(kv ...interface{}) *Schema {
return &Schema{Field: *field.Object(kv...)}
}
func NewFromField(f *field.Field) *Schema {
return &Schema{Field: *f}
}
var (
Encode = field.Encode
Decode = field.Decode
Modify = modify.Modify
Validate = validate.Validate
Evaluate = field.Evaluate
)
func (s *Schema) Clone(reset bool) *Schema {
return &Schema{
Field: *s.Field.Clone(reset),
Loaded: s.Loaded,
Metadata: s.Metadata,
}
}
func (s Schema) WithIncludes(includes ...interface{}) *Schema {
s.Field.SetIncludes(includes...)
return &s
}
func (s *Schema) WithMetadata(kv ...string) *Schema {
if s.Metadata == nil {
s.Metadata = make(map[string]string)
}
for i := 0; i < len(kv); i += 2 {
s.Metadata[kv[i]] = kv[i+1]
}
return s
}
func (s Schema) SetMetadata(md map[string]string) *Schema {
s.Metadata = md
return &s
}
func (s *Schema) Load(ctx context.Context) error {
if s.Loaded {
return nil
}
return s.LoadIncludes(ctx, nil)
}
func (s *Schema) LoadIncludes(ctx context.Context, loader field.Loader) (err error) {