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:
@@ -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)
|
||||
|
Reference in New Issue
Block a user