models_manager.go 1.62 KB
package orm

import ()

type fieldError struct {
	name string
	err  error
}

func (f *fieldError) Name() string {
	return f.name
}

func (f *fieldError) Error() error {
	return f.err
}

func NewFieldError(name string, err error) IFieldError {
	return &fieldError{name, err}
}

// non cleaned field errors
type fieldErrors struct {
	errors    map[string]IFieldError
	errorList []IFieldError
}

func (fe *fieldErrors) Get(name string) IFieldError {
	return fe.errors[name]
}

func (fe *fieldErrors) Set(name string, value IFieldError) {
	fe.errors[name] = value
}

func (fe *fieldErrors) List() []IFieldError {
	return fe.errorList
}

func NewFieldErrors() IFieldErrors {
	return &fieldErrors{errors: make(map[string]IFieldError)}
}

type Manager struct {
	ins    Modeler
	inited bool
}

// func (m *Manager) init(model reflect.Value) {
// 	elm := model.Elem()
// 	for i := 0; i < elm.NumField(); i++ {
// 		field := elm.Field(i)
// 		if _, ok := field.Interface().(Fielder); ok && field.CanSet() {
// 			if field.Elem().Kind() != reflect.Struct {
// 				field.Set(reflect.New(field.Type().Elem()))
// 			}
// 		}
// 	}
// }

func (m *Manager) Init(model Modeler, args ...interface{}) Modeler {
	if m.inited {
		return m.ins
	}
	m.inited = true
	m.ins = model
	skipInitial := false
	if len(args) > 0 {
		if b, ok := args[0].(bool); ok && b {
			skipInitial = true
		}
	}
	_ = skipInitial
	return model
}

func (m *Manager) IsInited() bool {
	return m.inited
}

func (m *Manager) Clean() IFieldErrors {
	return nil
}

func (m *Manager) CleanFields(name string) IFieldErrors {
	return nil
}

func (m *Manager) GetTableName() string {
	return getTableName(m.ins)
}