go/internal/options/apply.go (16 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package options
import "iter"
// Apply all non-nil options of a given type.
func Apply[T, O any](opts []O, rest ...O) iter.Seq[T] {
return func(yield func(T) bool) {
for _, opt := range opts {
if op, ok := any(opt).(T); ok && any(op) != nil && !yield(op) {
return
}
}
for _, opt := range rest {
if op, ok := any(opt).(T); ok && any(op) != nil && !yield(op) {
return
}
}
}
}