Skip to content

Commit 5f59c26

Browse files
committed
slices: add mapping for pointer slices and pointer values in slices for source and dest
Signed-off-by: Dmitrii Aleksandrov <goodmobiledevices@gmail.com>
1 parent 73fc47f commit 5f59c26

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

mapper_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,44 @@ func TestMapTo(t *testing.T) {
5757
assert.Equal(t, source[i].Name, dest[i].Name)
5858
}
5959
})
60+
t.Run("Source is a slice with pointer elements", func(t *testing.T) {
61+
source := []*TestingStructSource{
62+
{
63+
Name: "ArrayTest1",
64+
},
65+
{
66+
Name: "ArrayTest2",
67+
},
68+
{
69+
Name: "ArrayTest3",
70+
},
71+
}
72+
dest, err := MapTo[[]TestingStructDest](source)
73+
assert.NoError(t, err)
74+
assert.Equal(t, len(source), len(dest))
75+
for i, _ := range source {
76+
assert.Equal(t, source[i].Name, dest[i].Name)
77+
}
78+
})
79+
t.Run("Source is a slice with pointer elements, dest is a slice with pointer elements", func(t *testing.T) {
80+
source := []*TestingStructSource{
81+
{
82+
Name: "ArrayTest1",
83+
},
84+
{
85+
Name: "ArrayTest2",
86+
},
87+
{
88+
Name: "ArrayTest3",
89+
},
90+
}
91+
dest, err := MapTo[[]*TestingStructDest](source)
92+
assert.NoError(t, err)
93+
assert.Equal(t, len(source), len(dest))
94+
for i, _ := range source {
95+
assert.Equal(t, source[i].Name, dest[i].Name)
96+
}
97+
})
6098
t.Run("Source is a slice pointer", func(t *testing.T) {
6199
source := &[]TestingStructSource{
62100
{

routes.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,56 @@ func addSliceRoutes[TSource, TDest any]() {
5656
}
5757
return nil
5858
})
59+
addSliceRoute[*[]TSource, *[]*TDest](func(sourceSlice *[]TSource, pointerDestSlice *[]*TDest) error {
60+
for _, source := range *sourceSlice {
61+
dest, err := MapTo[TDest](source)
62+
if err != nil {
63+
return err
64+
}
65+
*pointerDestSlice = append(*pointerDestSlice, &dest)
66+
}
67+
return nil
68+
})
69+
addSliceRoute[[]*TSource, *[]TDest](func(sourceSlice []*TSource, pointerDestSlice *[]TDest) error {
70+
for _, source := range sourceSlice {
71+
dest, err := MapTo[TDest](source)
72+
if err != nil {
73+
return err
74+
}
75+
*pointerDestSlice = append(*pointerDestSlice, dest)
76+
}
77+
return nil
78+
})
79+
addSliceRoute[[]*TSource, *[]*TDest](func(sourceSlice []*TSource, pointerDestSlice *[]*TDest) error {
80+
for _, source := range sourceSlice {
81+
dest, err := MapTo[TDest](source)
82+
if err != nil {
83+
return err
84+
}
85+
*pointerDestSlice = append(*pointerDestSlice, &dest)
86+
}
87+
return nil
88+
})
89+
addSliceRoute[*[]*TSource, *[]TDest](func(sourceSlice *[]*TSource, pointerDestSlice *[]TDest) error {
90+
for _, source := range *sourceSlice {
91+
dest, err := MapTo[TDest](source)
92+
if err != nil {
93+
return err
94+
}
95+
*pointerDestSlice = append(*pointerDestSlice, dest)
96+
}
97+
return nil
98+
})
99+
addSliceRoute[*[]*TSource, *[]*TDest](func(sourceSlice *[]*TSource, pointerDestSlice *[]*TDest) error {
100+
for _, source := range *sourceSlice {
101+
dest, err := MapTo[TDest](source)
102+
if err != nil {
103+
return err
104+
}
105+
*pointerDestSlice = append(*pointerDestSlice, &dest)
106+
}
107+
return nil
108+
})
59109
}
60110

61111
func AddRoute[TSource, TDest any | []any](mapFunc func(source TSource, dest *TDest) error) error {

0 commit comments

Comments
 (0)