The AsyncExtensions target is a growing collection of useful functions and classes that take advantage of Swift’s new Concurrency features.
The AsyncExtensions package also inlcudes the AsyncTestExtensions target, which contains async-friendly wrappers around XCTest assertions.
AsyncExtensions includes
AsyncInputStream: A convenient wrapper around InputStream allowing for simple, type-safe access to stream data.
AsyncOutputStream: A convenient wrapper around OutputStream allowing for simple, type-safe streaming of data.
Publisher.allValues: Creates an AsyncStream from a Combine Publisher. It buffers all of the publisher’s output, ensuring the AsyncStream will produce everything the publisher publishes.
Future: A thread-safe implemention of a future that is useful when briding traditional Swift code with code employing Swift Concurrency.
Sequence.asyncMap() and Sequence.concurrentMap(): Extensions allowing for applying async transformations to Sequence.
TaskStore: A thread-safe store for Task, which can help when migrating from Combine publishers to Swift Concurrency.
TimeoutError: A simple error intending to represent a timeout. Modelled after CancellationError.
AsyncTestExtensions includes
AssertEqual()
AssertEqualEventually()
AssertTrue()
AssertTrueEventually()
AssertFalse()
AssertNil()
AssertNotNil()
AssertThrowsError()
AssertNoThrow()
Installation
To use AsyncExtensions, add a dependency to your Package.swift file:
AsyncExtensions
The AsyncExtensions target is a growing collection of useful functions and classes that take advantage of Swift’s new Concurrency features.
The AsyncExtensions package also inlcudes the AsyncTestExtensions target, which contains async-friendly wrappers around XCTest assertions.
AsyncExtensions includes
AsyncInputStream: A convenient wrapper aroundInputStreamallowing for simple, type-safe access to stream data.AsyncOutputStream: A convenient wrapper aroundOutputStreamallowing for simple, type-safe streaming of data.Publisher.allValues: Creates anAsyncStreamfrom a Combine Publisher. It buffers all of the publisher’s output, ensuring theAsyncStreamwill produce everything the publisher publishes.Future: A thread-safe implemention of a future that is useful when briding traditional Swift code with code employing Swift Concurrency.Sequence.asyncMap()andSequence.concurrentMap(): Extensions allowing for applying async transformations toSequence.TaskStore: A thread-safe store forTask, which can help when migrating from Combine publishers to Swift Concurrency.TimeoutError: A simple error intending to represent a timeout. Modelled afterCancellationError.AsyncTestExtensions includes
AssertEqual()AssertEqualEventually()AssertTrue()AssertTrueEventually()AssertFalse()AssertNil()AssertNotNil()AssertThrowsError()AssertNoThrow()Installation
To use AsyncExtensions, add a dependency to your Package.swift file:
To use AsyncTestExtensions in a test target, add it as a dependency:
License
The license for AsyncExtensions is the standard MIT licence. You can find it in the LICENSE file.
SequenceExtensions were heavily inspired by CollectionConcurrencyKit by John Sundell at https://github.com/JohnSundell/CollectionConcurrencyKit.