You've already forked dcmerge
Initial Commit
This commit is contained in:
1210
pkg/domain/dockerCompose/config.go
Normal file
1210
pkg/domain/dockerCompose/config.go
Normal file
File diff suppressed because it is too large
Load Diff
2093
pkg/domain/dockerCompose/config_test.go
Normal file
2093
pkg/domain/dockerCompose/config_test.go
Normal file
File diff suppressed because it is too large
Load Diff
65
pkg/domain/dockerCompose/equalable.go
Normal file
65
pkg/domain/dockerCompose/equalable.go
Normal file
@ -0,0 +1,65 @@
|
||||
package dockerCompose
|
||||
|
||||
type Equalable interface {
|
||||
Equal(equalable Equalable) bool
|
||||
}
|
||||
|
||||
// Contains returns true when sliceA is in sliceB.
|
||||
func Contains[R Equalable](sliceA, sliceB []R) bool {
|
||||
switch {
|
||||
case sliceA == nil && sliceB == nil:
|
||||
return true
|
||||
case sliceA != nil && sliceB == nil:
|
||||
return false
|
||||
case sliceA == nil && sliceB != nil:
|
||||
return false
|
||||
default:
|
||||
LOOP:
|
||||
for i := range sliceA {
|
||||
for j := range sliceB {
|
||||
if sliceA[i].Equal(sliceB[j]) {
|
||||
continue LOOP
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// Equal returns true when sliceA and sliceB are equal.
|
||||
func Equal[R Equalable](sliceA, sliceB []R) bool {
|
||||
return Contains(sliceA, sliceB) &&
|
||||
Contains(sliceB, sliceA) &&
|
||||
len(sliceA) == len(sliceB)
|
||||
}
|
||||
|
||||
// Equal returns true when booth string maps of Equalable are equal.
|
||||
func EqualStringMap[R Equalable](mapA, mapB map[string]R) bool {
|
||||
equalFunc := func(mapA, mapB map[string]R) bool {
|
||||
LOOP:
|
||||
for keyA, valueA := range mapA {
|
||||
for keyB, valueB := range mapB {
|
||||
if keyA == keyB &&
|
||||
valueA.Equal(valueB) {
|
||||
continue LOOP
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
return equalFunc(mapA, mapB) && equalFunc(mapB, mapA)
|
||||
}
|
||||
|
||||
// ExistsInMap returns true if object of type any exists under the passed name.
|
||||
func ExistsInMap[T any](m map[string]T, name string) bool {
|
||||
switch {
|
||||
case m == nil:
|
||||
return false
|
||||
default:
|
||||
_, present := m[name]
|
||||
return present
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user