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. For now there is an overlap between both libraries, but when swift-async-algorithms becomes stable the overlapping operators while be deprecated in AsyncExtensions. Nevertheless AsyncExtensions will continue to provide the 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. Maintains and replays its current value
- AsyncThrowingCurrentValueSubject: Throwing subject with a shared output. Maintains and replays its current value
- AsyncReplaySubject: Subject with a shared output. Maintains and replays a buffered amount of values
- AsyncThrowingReplaySubject: Throwing subject with a shared output. Maintains and replays a buffered amount of values
- zip(_:_:): Zips two- AsyncSequenceinto an AsyncSequence of tuple of elements
- zip(_:_:_:): Zips three- AsyncSequenceinto an AsyncSequence of tuple of elements
- zip(_:): Zips any async sequences into an array of elements
- merge(_:_:): Merges two- AsyncSequenceinto an AsyncSequence of elements
- merge(_:_:_:): Merges three- AsyncSequenceinto an AsyncSequence of elements
- merge(_:): Merges any- AsyncSequenceinto an AsyncSequence of elements
- withLatest(_:): Combines elements from self with the last known element from an other- AsyncSequence
- withLatest(_:_:): Combines elements from self with the last known elements from two other async sequences
- AsyncEmptySequence: Creates an AsyncSequencethat immediately finishes
- AsyncFailSequence: Creates an AsyncSequencethat immediately fails
- AsyncJustSequence: Creates an AsyncSequencethat emits an element an finishes
- AsyncThrowingJustSequence: Creates an AsyncSequencethat emits an elements and finishes bases on a throwing closure
- AsyncLazySequence: Creates an AsyncSequenceof the elements from the base sequence
- AsyncTimerSequence: Creates an AsyncSequencethat 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 self
- mapToResult(): Maps elements and failure from self to a- Resulttype
- prepend(_:): Prepends an element to self
- scan(_:_:): Transforms elements from self by providing the current element to a closure along with the last value returned by the closure
- assign(_:): Assigns elements from self to a property
- collect(_:): Iterate over elements from self and execute a closure
- eraseToAnyAsyncSequence(): Erases to AnyAsyncSequence
- flatMapLatest(_:): Transforms elements from self into a- AsyncSequenceand republishes elements sent by the most recently received- AsyncSequencewhen self is an- AsyncSequenceof- AsyncSequence
- multicast(_:): Shares values from self to several consumers thanks to a provided Subject
- share(): Shares values from self to several consumers
- switchToLatest(): Republishes elements sent by the most recently received- AsyncSequencewhen self is an- AsyncSequenceof- AsyncSequence
More operators and extensions are to come. Pull requests are of course welcome.