MapperMap mapper and set value from map to object support auto register struct now support field type: 1.reflect.Bool 2.reflect.String 3.reflect.Int8\16\32\64 4.reflect.Uint8\16\32\64 5.reflect.Float32\64 6.time.Time
(fromMap map[string]interface{}, toObj interface{})
| 63 | // 5.reflect.Float32\64 |
| 64 | // 6.time.Time |
| 65 | func (dm *mapperObject) MapperMap(fromMap map[string]interface{}, toObj interface{}) error { |
| 66 | toElemType := reflect.ValueOf(toObj) |
| 67 | toElem := toElemType |
| 68 | if toElemType.Kind() == reflect.Ptr { |
| 69 | toElem = toElemType.Elem() |
| 70 | } |
| 71 | |
| 72 | if toElem == dm.ZeroValue { |
| 73 | return errors.New("to obj is not legal value") |
| 74 | } |
| 75 | // check register flag |
| 76 | // if not register, register it |
| 77 | if !dm.checkIsRegister(toElem) { |
| 78 | if err := dm.Register(toObj); err != nil { |
| 79 | return err |
| 80 | } |
| 81 | } |
| 82 | for k, v := range fromMap { |
| 83 | fieldName := k |
| 84 | // check field is exists |
| 85 | realFieldName, exists := dm.CheckExistsField(toElem, fieldName) |
| 86 | if !exists { |
| 87 | continue |
| 88 | } |
| 89 | fieldInfo, exists := toElem.Type().FieldByName(realFieldName) |
| 90 | if !exists { |
| 91 | continue |
| 92 | } |
| 93 | |
| 94 | fieldKind := fieldInfo.Type.Kind() |
| 95 | fieldValue := toElem.FieldByName(realFieldName) |
| 96 | |
| 97 | if err := dm.setFieldValue(fieldValue, fieldKind, v); err != nil { |
| 98 | return err |
| 99 | } |
| 100 | } |
| 101 | return nil |
| 102 | } |
| 103 | |
| 104 | // SetEnabledTypeChecking set enabled flag for TypeChecking |
| 105 | // if set true, the field type will be checked for consistency during mapping |
no test coverage detected