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 aroundInputStream
allowing for simple, type-safe access to stream data.AsyncOutputStream
: A convenient wrapper aroundOutputStream
allowing for simple, type-safe streaming of data.Publisher.allValues
: Creates anAsyncStream
from a Combine Publisher. It buffers all of the publisher’s output, ensuring theAsyncStream
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()
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.