1
0
mirror of https://github.com/rancher/norman.git synced 2025-09-12 13:20:53 +00:00

Change ToInternal to return error

This commit is contained in:
Darren Shepherd
2018-06-04 16:48:22 -07:00
parent 6db31068a0
commit 875bcf4b2d
28 changed files with 185 additions and 66 deletions

View File

@@ -10,7 +10,7 @@ import (
type Mapper interface {
FromInternal(data map[string]interface{})
ToInternal(data map[string]interface{})
ToInternal(data map[string]interface{}) error
ModifySchema(schema *Schema, schemas *Schemas) error
}
@@ -22,10 +22,12 @@ func (m Mappers) FromInternal(data map[string]interface{}) {
}
}
func (m Mappers) ToInternal(data map[string]interface{}) {
func (m Mappers) ToInternal(data map[string]interface{}) error {
var errors []error
for i := len(m) - 1; i >= 0; i-- {
m[i].ToInternal(data)
errors = append(errors, m[i].ToInternal(data))
}
return NewErrors(errors...)
}
func (m Mappers) ModifySchema(schema *Schema, schemas *Schemas) error {
@@ -43,6 +45,7 @@ type typeMapper struct {
typeName string
subSchemas map[string]*Schema
subArraySchemas map[string]*Schema
subMapSchemas map[string]*Schema
}
func (t *typeMapper) FromInternal(data map[string]interface{}) {
@@ -57,6 +60,17 @@ func (t *typeMapper) FromInternal(data map[string]interface{}) {
schema.Mapper.FromInternal(fieldData)
}
for fieldName, schema := range t.subMapSchemas {
if schema.Mapper == nil {
continue
}
datas, _ := data[fieldName].(map[string]interface{})
for _, fieldData := range datas {
mapFieldData, _ := fieldData.(map[string]interface{})
schema.Mapper.FromInternal(mapFieldData)
}
}
for fieldName, schema := range t.subArraySchemas {
if schema.Mapper == nil {
continue
@@ -68,12 +82,12 @@ func (t *typeMapper) FromInternal(data map[string]interface{}) {
}
}
Mappers(t.Mappers).FromInternal(data)
if _, ok := data["type"]; !ok && data != nil {
data["type"] = t.typeName
}
Mappers(t.Mappers).FromInternal(data)
if data != nil && t.root {
if _, ok := data["id"]; ok {
if namespace != "" {
@@ -92,8 +106,9 @@ func (t *typeMapper) FromInternal(data map[string]interface{}) {
}
}
func (t *typeMapper) ToInternal(data map[string]interface{}) {
Mappers(t.Mappers).ToInternal(data)
func (t *typeMapper) ToInternal(data map[string]interface{}) error {
errors := Errors{}
errors.Add(Mappers(t.Mappers).ToInternal(data))
for fieldName, schema := range t.subArraySchemas {
if schema.Mapper == nil {
@@ -101,7 +116,17 @@ func (t *typeMapper) ToInternal(data map[string]interface{}) {
}
datas, _ := data[fieldName].([]interface{})
for _, fieldData := range datas {
schema.Mapper.ToInternal(convert.ToMapInterface(fieldData))
errors.Add(schema.Mapper.ToInternal(convert.ToMapInterface(fieldData)))
}
}
for fieldName, schema := range t.subMapSchemas {
if schema.Mapper == nil {
continue
}
datas, _ := data[fieldName].(map[string]interface{})
for _, fieldData := range datas {
errors.Add(schema.Mapper.ToInternal(convert.ToMapInterface(fieldData)))
}
}
@@ -110,13 +135,16 @@ func (t *typeMapper) ToInternal(data map[string]interface{}) {
continue
}
fieldData, _ := data[fieldName].(map[string]interface{})
schema.Mapper.ToInternal(fieldData)
errors.Add(schema.Mapper.ToInternal(fieldData))
}
return errors.Err()
}
func (t *typeMapper) ModifySchema(schema *Schema, schemas *Schemas) error {
t.subSchemas = map[string]*Schema{}
t.subArraySchemas = map[string]*Schema{}
t.subMapSchemas = map[string]*Schema{}
t.typeName = fmt.Sprintf("%s/schemas/%s", schema.Version.Path, schema.ID)
mapperSchema := schema
@@ -129,6 +157,9 @@ func (t *typeMapper) ModifySchema(schema *Schema, schemas *Schemas) error {
if definition.IsArrayType(fieldType) {
fieldType = definition.SubType(fieldType)
targetMap = t.subArraySchemas
} else if definition.IsMapType(fieldType) {
fieldType = definition.SubType(fieldType)
targetMap = t.subMapSchemas
}
schema := schemas.Schema(&schema.Version, fieldType)