OfSeq and OfSeq2 introduced

This commit is contained in:
milarin 2024-09-06 13:49:16 +02:00
parent 87bc148570
commit d9d7a1586e
2 changed files with 31 additions and 1 deletions

2
go.mod
View File

@ -1,3 +1,3 @@
module git.milar.in/milarin/channel module git.milar.in/milarin/channel
go 1.18 go 1.23

30
of.go
View File

@ -2,6 +2,7 @@ package channel
import ( import (
"context" "context"
"iter"
"time" "time"
) )
@ -67,3 +68,32 @@ func OfMap[K comparable, V, T any](m map[K]V, unmapper func(K, V) T) <-chan T {
return out return out
} }
// OfSeq returns a channel containing all values provided by the iterator
func OfSeq[T any](seq iter.Seq[T]) <-chan T {
out := make(chan T, 10)
defer func() {
defer close(out)
for v := range seq {
out <- v
}
}()
return out
}
// OfSeq2 returns a channel containing the return values of the unmapper function
// when provided with the values of the iterator
func OfSeq2[K comparable, V, T any](seq iter.Seq2[K, V], unmapper func(K, V) T) <-chan T {
out := make(chan T, 10)
defer func() {
defer close(out)
for key, value := range seq {
out <- unmapper(key, value)
}
}()
return out
}