Skip to content

Commit 81b099e

Browse files
committed
refactor: remove SetFields function and associated tests for cleaner code
Signed-off-by: tbxark <[email protected]>
1 parent e7cf16d commit 81b099e

File tree

3 files changed

+0
-162
lines changed

3 files changed

+0
-162
lines changed

contrib/json-gen-proto/main.go

-42
This file was deleted.

database/mapper/render.go

-51
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ package mapper
22

33
import (
44
"encoding/json"
5-
"fmt"
65
"golang.org/x/exp/constraints"
7-
"golang.org/x/text/cases"
8-
"golang.org/x/text/language"
9-
"reflect"
106
)
117

128
func Map[S any, T any](source []S, mapper func(S) T) []T {
@@ -30,53 +26,6 @@ func MapStruct[S any, T any](source *S) *T {
3026
return &target
3127
}
3228

33-
func SetFields[S any, T any](source S, target T, ignoreZero bool) (err error) {
34-
defer func() {
35-
if r := recover(); r != nil {
36-
err = fmt.Errorf("panic: %v", r)
37-
}
38-
}()
39-
sourceValue := reflect.ValueOf(source)
40-
targetValue := reflect.ValueOf(target)
41-
if targetValue.Kind() != reflect.Ptr {
42-
err = fmt.Errorf("target must be a pointer")
43-
return
44-
}
45-
for sourceValue.Kind() == reflect.Ptr {
46-
sourceValue = sourceValue.Elem()
47-
}
48-
targetValue = targetValue.Elem()
49-
sourceType := sourceValue.Type()
50-
for i := 0; i < sourceValue.NumField(); i++ {
51-
field := sourceType.Field(i)
52-
fieldValue := sourceValue.Field(i)
53-
setterName := "Set" + cases.Title(language.Und, cases.NoLower).String(field.Name)
54-
//setterName := "Set" + cases.Title(field.Name).String()
55-
method := targetValue.Addr().MethodByName(setterName)
56-
if method.IsValid() {
57-
if method.Type().NumIn() != 1 {
58-
err = fmt.Errorf("method %s must have one parameter", setterName)
59-
return
60-
}
61-
methodParamType := method.Type().In(0)
62-
if method.Type().In(0) != fieldValue.Type() {
63-
if fieldValue.Type().ConvertibleTo(methodParamType) {
64-
fieldValue = fieldValue.Convert(methodParamType)
65-
} else {
66-
err = fmt.Errorf("method %s parameter type must be %s, but got %s", setterName, methodParamType, fieldValue.Type())
67-
return
68-
}
69-
}
70-
if ignoreZero && fieldValue.IsZero() {
71-
continue
72-
}
73-
args := []reflect.Value{fieldValue}
74-
method.Call(args)
75-
}
76-
}
77-
return
78-
}
79-
8029
func Page[P constraints.Integer](total, pageSize, defaultSize P) P {
8130
if total == 0 {
8231
return 0

database/mapper/render_test.go

-69
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package mapper
22

33
import (
4-
"reflect"
54
"testing"
65
)
76

@@ -21,74 +20,6 @@ func (t *Target) SetName(name string) { t.name = &name }
2120
func (t *Target) SetAge(age int64) { t.age = int(age) }
2221
func (t *Target) SetIsActive(isActive bool) { t.isActive = isActive }
2322

24-
func TestSetFields(t *testing.T) {
25-
names := []string{"Alice", "", "Charlie"}
26-
tests := []struct {
27-
name string
28-
source Source
29-
ignoreZero bool
30-
want Target
31-
}{
32-
{
33-
name: "Basic Test",
34-
source: Source{
35-
Name: names[0],
36-
Age: 25,
37-
IsActive: true,
38-
},
39-
ignoreZero: false,
40-
want: Target{
41-
name: &names[0],
42-
age: 25,
43-
isActive: true,
44-
},
45-
},
46-
{
47-
name: "Ignore zero value test",
48-
source: Source{
49-
Name: names[1],
50-
Age: 0,
51-
IsActive: false,
52-
},
53-
ignoreZero: true,
54-
want: Target{
55-
name: nil,
56-
age: 0,
57-
isActive: false,
58-
},
59-
},
60-
{
61-
name: "Partial field test",
62-
source: Source{
63-
Name: names[2],
64-
Age: 0,
65-
IsActive: true,
66-
},
67-
ignoreZero: true,
68-
want: Target{
69-
name: &names[2],
70-
age: 0,
71-
isActive: true,
72-
},
73-
},
74-
}
75-
76-
for _, tt := range tests {
77-
t.Run(tt.name, func(t *testing.T) {
78-
target := &Target{}
79-
err := SetFields(tt.source, target, tt.ignoreZero)
80-
if err != nil {
81-
t.Errorf("SetFields() error = %v", err)
82-
return
83-
}
84-
85-
if !reflect.DeepEqual(*target, tt.want) {
86-
t.Errorf("SetFields() = %v, want %v", *target, tt.want)
87-
}
88-
})
89-
}
90-
}
91-
9223
func TestMapStruct(t *testing.T) {
9324
type structA struct {
9425
Name string `json:"name"`

0 commit comments

Comments
 (0)