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  }