github.com/storacha/go-ucanto@v0.7.2/validator/util.go (about) 1 package validator 2 3 func combine[T any](dataset [][]T) [][]T { 4 first, rest := dataset[0], dataset[1:] 5 results := make([][]T, 0, len(first)) 6 for _, value := range first { 7 results = append(results, []T{value}) 8 } 9 for _, values := range rest { 10 tuples := results 11 results = make([][]T, 0, len(tuples)) 12 for _, value := range values { 13 for _, tuple := range tuples { 14 newTuple := make([]T, len(tuple), len(tuple)+1) 15 _ = copy(newTuple, tuple) 16 results = append(results, append(newTuple, value)) 17 } 18 } 19 } 20 return results 21 } 22 23 func intersection[T comparable](left []T, right []T) []T { 24 set := make([]T, 0) 25 hash := make(map[T]struct{}) 26 27 for _, v := range left { 28 hash[v] = struct{}{} 29 } 30 31 for _, v := range right { 32 if _, ok := hash[v]; ok { 33 set = append(set, v) 34 } 35 } 36 37 return set 38 }