bitrix/internal/models/reflect.go

55 lines
1.2 KiB
Go

package models
import "reflect"
type FieldMapper interface {
GetFields() interface{}
}
func (c *CreatingDealReq) GetFields() interface{} {
return c.Fields
}
func (c *CompanyReq) GetFields() interface{} {
return c.Fields
}
func (c *CreateContactReq) GetFields() interface{} {
return c.Fields
}
func (c *CreatingLeadReq) GetFields() interface{} {
return c.Fields
}
func FormattingToMap(f FieldMapper, fieldAnswer map[string]string) map[string]map[string]interface{} {
resultFields := make(map[string]interface{})
result := make(map[string]map[string]interface{})
fields := reflect.ValueOf(f.GetFields())
fieldType := reflect.TypeOf(f.GetFields())
for i := 0; i < fields.NumField(); i++ {
field := fields.Field(i)
fieldName := fieldType.Field(i).Tag.Get("json")
switch field.Kind() {
case reflect.String:
resultFields[fieldName] = field.String()
case reflect.Int32, reflect.Int:
resultFields[fieldName] = field.Int()
case reflect.Slice:
if field.Type().Elem().Kind() == reflect.Int32 {
resultFields[fieldName] = field.Interface().([]int32)
}
}
}
for key, value := range fieldAnswer {
resultFields[key] = value
}
result["fields"] = resultFields
return result
}