Skip to content

Commit 82c6a7c

Browse files
committed
#### Version 0.7.8
* Refactor: use mapperObject refactored the static version implementation. * 2022-04-16 10:00 in ShangHai
1 parent de7c501 commit 82c6a7c

File tree

5 files changed

+27
-11
lines changed

5 files changed

+27
-11
lines changed

convert.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ func ToInt64(value interface{}) (d int64) {
186186

187187
type argInt []int
188188

189-
// get int by index from int slice
189+
// Get int by index from int slice
190190
func (a argInt) Get(i int, args ...int) (r int) {
191191
if i >= 0 && i < len(a) {
192192
r = a[i]

example/typewrapper/main.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"fmt"
5+
"github.com/devfeel/mapper"
46
"reflect"
57
"time"
68
)
@@ -26,7 +28,7 @@ type decimal struct {
2628
}
2729

2830
type DecimalWrapper struct {
29-
// mapper.BaseTypeWrapper
31+
mapper.BaseTypeWrapper
3032
}
3133

3234
func (w *DecimalWrapper) IsType(value reflect.Value) bool {
@@ -37,14 +39,14 @@ func (w *DecimalWrapper) IsType(value reflect.Value) bool {
3739
}
3840

3941
func main() {
40-
/*
41-
mapper.UseWrapper(&DecimalWrapper{})
42-
user := &User{Name: "test", Age: 10, Score: decimal{value: 1}, Time: time.Now()}
43-
stu := &Student{}
4442

45-
mapper.AutoMapper(user, stu)
43+
mapper.UseWrapper(&DecimalWrapper{})
44+
user := &User{Name: "test", Age: 10, Score: decimal{value: 1}, Time: time.Now()}
45+
stu := &Student{}
46+
47+
mapper.AutoMapper(user, stu)
48+
49+
fmt.Println(user)
50+
fmt.Println(stu)
4651

47-
fmt.Println(user)
48-
fmt.Println(stu)
49-
*/
5052
}

mapper.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type IMapper interface {
1919
JsonToMap(body []byte, toMap *map[string]interface{}) error
2020

2121
Register(obj interface{}) error
22+
UseWrapper(w TypeWrapper)
2223

2324
GetTypeName(obj interface{}) string
2425
GetFieldName(objElem reflect.Value, index int) string
@@ -51,6 +52,11 @@ func PackageVersion() string {
5152
return packageVersion
5253
}
5354

55+
// UseWrapper register a type wrapper
56+
func UseWrapper(w TypeWrapper) {
57+
standardMapper.UseWrapper(w)
58+
}
59+
5460
// CheckIsTypeWrapper check value is in type wrappers
5561
func CheckIsTypeWrapper(value reflect.Value) bool {
5662
return standardMapper.CheckIsTypeWrapper(value)

mapper_object.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,14 @@ func (dm *mapperObject) Register(obj interface{}) error {
199199
return dm.registerValue(objValue)
200200
}
201201

202+
// UseWrapper register a type wrapper
203+
func (dm *mapperObject) UseWrapper(w TypeWrapper) {
204+
if len(dm.typeWrappers) > 0 {
205+
dm.typeWrappers[len(dm.typeWrappers)-1].SetNext(w)
206+
}
207+
dm.typeWrappers = append(dm.typeWrappers, w)
208+
}
209+
202210
// MapToSlice mapper from map[string]interface{} to a slice of any type's ptr
203211
// toSlice must be a slice of any type.
204212
func (dm *mapperObject) MapToSlice(fromMap map[string]interface{}, toSlice interface{}) error {

mapper_object_internal.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (dm *mapperObject) elemToStruct(fromElem, toElem reflect.Value) {
102102
x := reflect.New(toFieldInfo.Type()).Elem()
103103
err := dm.elemMapper(fromFieldInfo, x)
104104
if err != nil {
105-
fmt.Println("auto mapper field", fromFieldInfo, "=>", toFieldInfo, "error", err.Error())
105+
fmt.Println("auto mapper failed", fromFieldInfo, "=>", toFieldInfo, "error", err.Error())
106106
} else {
107107
toFieldInfo.Set(x)
108108
}

0 commit comments

Comments
 (0)