mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-15 23:06:38 +00:00
* implement reverse proxy --------- Co-authored-by: Alisdair MacLeod <git@alisdairmacleod.co.uk> Co-authored-by: mlsmaycon <mlsmaycon@gmail.com> Co-authored-by: Eduard Gert <kontakt@eduardgert.de> Co-authored-by: Viktor Liu <viktor@netbird.io> Co-authored-by: Diego Noguês <diego.sure@gmail.com> Co-authored-by: Diego Noguês <49420+diegocn@users.noreply.github.com> Co-authored-by: Bethuel Mmbaga <bethuelmbaga12@gmail.com> Co-authored-by: Zoltan Papp <zoltan.pmail@gmail.com> Co-authored-by: Ashley Mensah <ashleyamo982@gmail.com>
53 lines
952 B
Go
53 lines
952 B
Go
package util
|
|
|
|
// Difference returns the elements in `a` that aren't in `b`.
|
|
func Difference(a, b []string) []string {
|
|
mb := make(map[string]struct{}, len(b))
|
|
for _, x := range b {
|
|
mb[x] = struct{}{}
|
|
}
|
|
var diff []string
|
|
for _, x := range a {
|
|
if _, found := mb[x]; !found {
|
|
diff = append(diff, x)
|
|
}
|
|
}
|
|
return diff
|
|
}
|
|
|
|
// ToPtr returns a pointer to the given value.
|
|
func ToPtr[T any](value T) *T {
|
|
return &value
|
|
}
|
|
|
|
type comparableObject[T any] interface {
|
|
Equal(other T) bool
|
|
}
|
|
|
|
func MergeUnique[T comparableObject[T]](arr1, arr2 []T) []T {
|
|
var result []T
|
|
|
|
for _, item := range arr1 {
|
|
if !contains(result, item) {
|
|
result = append(result, item)
|
|
}
|
|
}
|
|
|
|
for _, item := range arr2 {
|
|
if !contains(result, item) {
|
|
result = append(result, item)
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func contains[T comparableObject[T]](slice []T, element T) bool {
|
|
for _, item := range slice {
|
|
if item.Equal(element) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|