Files
warewulf/internal/pkg/upgrade/slices.go
2025-03-28 03:49:22 -06:00

41 lines
868 B
Go

package upgrade
func indexOf[T comparable](slice []T, item T) int {
for i, v := range slice {
if v == item {
return i
}
}
return -1
}
func replaceSliceElement[T any](original []T, index int, replacement []T) []T {
if index < 0 || index >= len(original) {
return original
}
return append(original[:index], append(replacement, original[index+1:]...)...)
}
func replaceOverlay(originals []string, toReplace string, replacements []string) []string {
if indexOf(originals, toReplace) == -1 {
return originals
}
lookup := make(map[string]bool)
for _, v := range originals {
lookup[v] = true
}
var newReplacements []string
for _, v := range replacements {
if !lookup[v] || v == toReplace {
newReplacements = append(newReplacements, v)
}
}
return replaceSliceElement(
originals,
indexOf(originals, toReplace),
newReplacements)
}