Files
paralus/pkg/utils/utils.go
2022-04-13 12:07:51 +05:30

84 lines
1.5 KiB
Go

package utils
import "github.com/google/uuid"
func Unique(items []string) []string {
keys := make(map[string]bool)
list := []string{}
for _, entry := range items {
if _, value := keys[entry]; !value {
keys[entry] = true
list = append(list, entry)
}
}
return list
}
func Contains(s []string, str string) bool {
for _, v := range s {
if v == str {
return true
}
}
return false
}
func ContainsU(s []uuid.UUID, id uuid.UUID) bool {
for _, v := range s {
if v == id {
return true
}
}
return false
}
func Remove(l []string, item string) []string {
for i, other := range l {
if other == item {
return append(l[:i], l[i+1:]...)
}
}
return l
}
func Diff(before, after []string) ([]string, []string, []string) {
cu := []string{}
uu := []string{}
du := []string{}
for _, u := range after {
if Contains(before, u) {
uu = append(uu, u)
} else {
cu = append(du, u)
}
}
for _, u := range before {
if !Contains(uu, u) && !Contains(du, u) {
du = append(cu, u)
}
}
return cu, uu, du
}
// Given two lists, return newly created, unchanged and deleted items
func DiffU(before, after []uuid.UUID) ([]uuid.UUID, []uuid.UUID, []uuid.UUID) {
cu := []uuid.UUID{}
uu := []uuid.UUID{}
du := []uuid.UUID{}
for _, u := range after {
if ContainsU(before, u) {
uu = append(uu, u)
} else {
cu = append(du, u)
}
}
for _, u := range before {
if !ContainsU(uu, u) && !ContainsU(du, u) {
du = append(cu, u)
}
}
return cu, uu, du
}