feat: adding FromSlicePtrOr (#506)

This commit is contained in:
Samuel Berthe
2024-07-26 07:56:32 +02:00
committed by GitHub
parent aa609e4f47
commit cb150f5d38
3 changed files with 33 additions and 0 deletions

View File

@@ -255,6 +255,7 @@ Type manipulation helpers:
- [FromPtrOr](#fromptror)
- [ToSlicePtr](#tosliceptr)
- [FromSlicePtr](#fromsliceptr)
- [FromSlicePtrOr](#fromsliceptror)
- [ToAnySlice](#toanyslice)
- [FromAnySlice](#fromanyslice)
- [Empty](#empty)
@@ -2700,6 +2701,18 @@ ptr := lo.Compact(
// []string{"hello", "world"}
```
### FromSlicePtrOr
Returns a slice with the pointer values or the fallback value.
```go
str1 := "hello"
str2 := "world"
ptr := lo.FromSlicePtrOr[string]([]*string{&str1, &str2, "fallback value"})
// []string{"hello", "world", "fallback value"}
```
### ToAnySlice
Returns a slice with all elements mapped to `any` type.

View File

@@ -69,6 +69,16 @@ func FromSlicePtr[T any](collection []*T) []T {
})
}
// FromSlicePtr returns a slice with the pointer values or the fallback value.
func FromSlicePtrOr[T any](collection []*T, fallback T) []T {
return Map(collection, func(x *T, _ int) T {
if x == nil {
return fallback
}
return *x
})
}
// ToAnySlice returns a slice with all elements mapped to `any` type
func ToAnySlice[T any](collection []T) []any {
result := make([]any, len(collection))

View File

@@ -131,6 +131,16 @@ func TestFromSlicePtr(t *testing.T) {
is.Equal(result1, []string{str1, str2, ""})
}
func TestFromSlicePtrOr(t *testing.T) {
is := assert.New(t)
str1 := "foo"
str2 := "bar"
result1 := FromSlicePtrOr([]*string{&str1, &str2, nil}, "fallback")
is.Equal(result1, []string{str1, str2, "fallback"})
}
func TestToAnySlice(t *testing.T) {
t.Parallel()
is := assert.New(t)