...

Source file src/dario.cat/mergo/issue104_test.go

Documentation: dario.cat/mergo

     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