Files
pack/core/plan/spread.go
T
2025-03-04 00:39:55 -05:00

50 lines
772 B
Go

package plan
type Spreadable interface {
IsSpread() bool
}
type StringWrapper struct {
Value string
}
func (s StringWrapper) IsSpread() bool {
return s.Value == "..."
}
func Spread[T Spreadable](left []T, right []T) []T {
if left == nil {
return right
}
result := make([]T, 0, len(left)+len(right))
for _, val := range left {
if val.IsSpread() {
result = append(result, right...)
} else {
result = append(result, val)
}
}
return result
}
func SpreadStrings(left []string, right []string) []string {
if left == nil {
return right
}
result := make([]string, 0, len(left)+len(right))
for _, val := range left {
if val == "..." {
result = append(result, right...)
} else {
result = append(result, val)
}
}
return result
}