github.com/cilium/statedb@v0.3.2/index/seq.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package index
     5  
     6  import "iter"
     7  
     8  // Seq creates a KeySet from an iter.Seq[T] with the given indexing function.
     9  // Example usage:
    10  //
    11  //	var strings iter.Seq[string]
    12  //	keys := Seq[string](index.String, strings)
    13  func Seq[T any](
    14  	toKey func(T) Key,
    15  	seq iter.Seq[T],
    16  ) KeySet {
    17  	keys := []Key{}
    18  	for v := range seq {
    19  		keys = append(keys, toKey(v))
    20  	}
    21  	return NewKeySet(keys...)
    22  }
    23  
    24  // Seq2 creates a KeySet from an iter.Seq2[A,B] with the given indexing function.
    25  // Example usage:
    26  //
    27  //	 var seq iter.Seq2[string, int]
    28  //		keys := Seq2(index.String, seq)
    29  func Seq2[A, B any](
    30  	toKey func(A) Key,
    31  	seq iter.Seq2[A, B],
    32  ) KeySet {
    33  	keys := []Key{}
    34  	for a := range seq {
    35  		keys = append(keys, toKey(a))
    36  	}
    37  	return NewKeySet(keys...)
    38  }