41 lines
868 B
Go
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)
|
|
}
|