Select Git revision
recovering_middleware.go
schema.go 5.65 KiB
package schema
import (
"context"
"reflect"
"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 {
s := &Schema{Field: *field.Object(kv...)}
s.Field.EnableState()
return s
}
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) ClearState() *Schema {
s.Field.ClearState()
return s
}
func (s *Schema) Equal(sch *Schema) bool {
if s == sch {
return true
}
if s == nil || sch == nil {
return false
}
return reflect.DeepEqual(s.Field, sch.Field)
}
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, len(s.Metadata))
}
for i := 0; i < len(kv); i += 2 {