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 anyAsyncSequenceinto an AsyncSequence of elementswithLatest(_:): Combines elements from self with the last known element from an otherAsyncSequencewithLatest(_:_:): 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 - 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 selfmapToResult(): Maps elements and failure from self to aResulttypeprepend(_:): 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 aAsyncSequenceand republishes elements sent by the most recently receivedAsyncSequencewhen self is anAsyncSequenceofAsyncSequencemulticast(_:): 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 receivedAsyncSequencewhen self is anAsyncSequenceofAsyncSequence
More operators and extensions are to come. Pull requests are of course welcome.