AsyncExtensions provides a collection of operators that intends to ease the creation and combination of AsyncSequences
.
AsyncExtensions can be seen as a companion to Apple swift-async-algorithms, which provides operators that the community needs and are not provided by Apple.
To use the AsyncExtensions
library in a SwiftPM project,
add the following line to the dependencies in your Package.swift
file:
.package(url: "https://github.com/sideeffect-io/AsyncExtensions"),
Include "AsyncExtensions"
as a dependency for your executable target:
.target(name: "<target>", dependencies: ["AsyncExtensions"]),
Finally, add import AsyncExtensions
to your source code.
- AsyncBufferedChannel: Buffered communication channel between tasks. The elements are not shared and will be spread across consumers (same as AsyncStream)
- AsyncThrowingBufferedChannel: Throwing buffered communication channel between tasks
- AsyncPassthroughSubject: Subject with a shared output
- AsyncThrowingPassthroughSubject: Throwing subject with a shared output
- AsyncCurrentValueSubject: Subject with a shared output. Maintain an replays its current value
- AsyncThrowingCurrentValueSubject: Throwing subject with a shared output. Maintain an replays its current value
- AsyncReplaySubject: Subject with a shared output. Maintain an replays a buffered amount of values
- AsyncThrowingReplaySubject: Throwing subject with a shared output. Maintain an replays a buffered amount of values
merge(_:)
: Merges anyAsyncSequence
into an AsyncSequence of elementswithLatest(_:)
: Combines elements from self with the last known element from an otherAsyncSequence
withLatest(_:_:)
: Combines elements from self with the last known elements from two other async sequences
- AsyncEmptySequence: Creates an
AsyncSequence
that immediately finishes - AsyncFailSequence: Creates an
AsyncSequence
that immediately fails - AsyncJustSequence: Creates an
AsyncSequence
that emits an element an finishes - AsyncThrowingJustSequence: Creates an
AsyncSequence
that emits an elements and finishes bases on a throwing closure - AsyncTimerSequence: Creates an
AsyncSequence
that emits a date value periodically - AsyncStream Pipe: Creates an AsyncStream and returns a tuple standing for its inputs and outputs
handleEvents()
: Executes closures during the lifecycle of the selfmapToResult()
: Maps elements and failure from self to aResult
typeprepend(_:)
: Prepends an element to selfscan(_:_:)
: Transforms elements from self by providing the current element to a closure along with the last value returned by the closureassign(_:)
: Assigns elements from self to a propertycollect(_:)
: Iterate over elements from self and execute a closureeraseToAnyAsyncSequence()
: Erases to AnyAsyncSequenceflatMapLatest(_:)
: Transforms elements from self into aAsyncSequence
and republishes elements sent by the most recently receivedAsyncSequence
when self is anAsyncSequence
ofAsyncSequence
multicast(_:)
: Shares values from self to several consumers thanks to a provided Subjectshare()
: Shares values from self to several consumersswitchToLatest()
: Republishes elements sent by the most recently receivedAsyncSequence
when self is anAsyncSequence
ofAsyncSequence
More operators and extensions are to come. Pull requests are of course welcome.