OfSeq and OfSeq2 introduced
This commit is contained in:
parent
87bc148570
commit
d9d7a1586e
2
go.mod
2
go.mod
@ -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
30
of.go
@ -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
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user