mirror of
https://github.com/versia-pub/versia-go.git
synced 2025-12-06 22:38:20 +01:00
53 lines
837 B
Go
53 lines
837 B
Go
package utils
|
|
|
|
import "strings"
|
|
|
|
func MapSlice[T any, V any](obj []T, transform func(T) V) []V {
|
|
vs := make([]V, 0, len(obj))
|
|
|
|
for _, o := range obj {
|
|
vs = append(vs, transform(o))
|
|
}
|
|
|
|
return vs
|
|
}
|
|
|
|
type CombinedError struct {
|
|
Errors []error
|
|
}
|
|
|
|
func (e CombinedError) Error() string {
|
|
sb := strings.Builder{}
|
|
|
|
for i, err := range e.Errors {
|
|
sb.WriteString(err.Error())
|
|
|
|
if i < len(e.Errors)-1 {
|
|
sb.WriteString("\n")
|
|
}
|
|
}
|
|
|
|
return sb.String()
|
|
}
|
|
|
|
func MapErrorSlice[T any, V any](obj []T, transform func(T) (V, error)) ([]V, error) {
|
|
vs := make([]V, 0, len(obj))
|
|
errs := make([]error, 0, len(obj))
|
|
|
|
for _, o := range obj {
|
|
v, err := transform(o)
|
|
if err != nil {
|
|
errs = append(errs, err)
|
|
continue
|
|
}
|
|
|
|
vs = append(vs, v)
|
|
}
|
|
|
|
if len(errs) > 0 {
|
|
return nil, CombinedError{Errors: errs}
|
|
}
|
|
|
|
return vs, nil
|
|
}
|