Skip to content

Commit

Permalink
slices: add mapping for pointer slices and pointer values in slices f…
Browse files Browse the repository at this point in the history
…or source and dest

Signed-off-by: Dmitrii Aleksandrov <goodmobiledevices@gmail.com>
  • Loading branch information
Insei committed Apr 4, 2024
1 parent 73fc47f commit 5f59c26
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 0 deletions.
38 changes: 38 additions & 0 deletions mapper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,44 @@ func TestMapTo(t *testing.T) {
assert.Equal(t, source[i].Name, dest[i].Name)
}
})
t.Run("Source is a slice with pointer elements", func(t *testing.T) {
source := []*TestingStructSource{
{
Name: "ArrayTest1",
},
{
Name: "ArrayTest2",
},
{
Name: "ArrayTest3",
},
}
dest, err := MapTo[[]TestingStructDest](source)
assert.NoError(t, err)
assert.Equal(t, len(source), len(dest))
for i, _ := range source {
assert.Equal(t, source[i].Name, dest[i].Name)
}
})
t.Run("Source is a slice with pointer elements, dest is a slice with pointer elements", func(t *testing.T) {
source := []*TestingStructSource{
{
Name: "ArrayTest1",
},
{
Name: "ArrayTest2",
},
{
Name: "ArrayTest3",
},
}
dest, err := MapTo[[]*TestingStructDest](source)
assert.NoError(t, err)
assert.Equal(t, len(source), len(dest))
for i, _ := range source {
assert.Equal(t, source[i].Name, dest[i].Name)
}
})
t.Run("Source is a slice pointer", func(t *testing.T) {
source := &[]TestingStructSource{
{
Expand Down
50 changes: 50 additions & 0 deletions routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,56 @@ func addSliceRoutes[TSource, TDest any]() {
}
return nil
})
addSliceRoute[*[]TSource, *[]*TDest](func(sourceSlice *[]TSource, pointerDestSlice *[]*TDest) error {
for _, source := range *sourceSlice {
dest, err := MapTo[TDest](source)
if err != nil {
return err
}
*pointerDestSlice = append(*pointerDestSlice, &dest)
}
return nil
})
addSliceRoute[[]*TSource, *[]TDest](func(sourceSlice []*TSource, pointerDestSlice *[]TDest) error {
for _, source := range sourceSlice {
dest, err := MapTo[TDest](source)
if err != nil {
return err
}
*pointerDestSlice = append(*pointerDestSlice, dest)
}
return nil
})
addSliceRoute[[]*TSource, *[]*TDest](func(sourceSlice []*TSource, pointerDestSlice *[]*TDest) error {
for _, source := range sourceSlice {
dest, err := MapTo[TDest](source)
if err != nil {
return err
}
*pointerDestSlice = append(*pointerDestSlice, &dest)
}
return nil
})
addSliceRoute[*[]*TSource, *[]TDest](func(sourceSlice *[]*TSource, pointerDestSlice *[]TDest) error {
for _, source := range *sourceSlice {
dest, err := MapTo[TDest](source)
if err != nil {
return err
}
*pointerDestSlice = append(*pointerDestSlice, dest)
}
return nil
})
addSliceRoute[*[]*TSource, *[]*TDest](func(sourceSlice *[]*TSource, pointerDestSlice *[]*TDest) error {
for _, source := range *sourceSlice {
dest, err := MapTo[TDest](source)
if err != nil {
return err
}
*pointerDestSlice = append(*pointerDestSlice, &dest)
}
return nil
})
}

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

0 comments on commit 5f59c26

Please sign in to comment.