...
1 package mergo_test
2
3 import (
4 "reflect"
5 "testing"
6
7 "dario.cat/mergo"
8 )
9
10 type Record struct {
11 Data map[string]interface{}
12 Mapping map[string]string
13 }
14
15 func StructToRecord(in interface{}) *Record {
16 rec := Record{}
17 rec.Data = make(map[string]interface{})
18 rec.Mapping = make(map[string]string)
19 typ := reflect.TypeOf(in)
20 for i := 0; i < typ.NumField(); i++ {
21 field := typ.Field(i)
22 dbFieldName := field.Tag.Get("db")
23 if dbFieldName != "" {
24 rec.Mapping[field.Name] = dbFieldName
25 }
26 }
27
28 if err := mergo.Map(&rec.Data, in); err != nil {
29 panic(err)
30 }
31 return &rec
32 }
33
34 func TestStructToRecord(t *testing.T) {
35 type A struct {
36 Name string `json:"name" db:"name"`
37 CIDR string `json:"cidr" db:"cidr"`
38 }
39 type Record struct {
40 Data map[string]interface{}
41 Mapping map[string]string
42 }
43 a := A{Name: "David", CIDR: "10.0.0.0/8"}
44 rec := StructToRecord(a)
45 if len(rec.Mapping) < 2 {
46 t.Fatalf("struct to record failed, no mapping, struct missing tags?, rec: %+v, a: %+v ", rec, a)
47 }
48 }
49
View as plain text