/// Wrapper around `AsyncThrowingStream` which maintains references to the stream and continuation. /// /// This is primarily used with Swift 5.8 and lower. @available(*, deprecated) public final class PassthroughAsyncThrowingSequence<Element>: AsyncSequence { public private(set) var stream: AsyncThrowingStream<Element, Error>! private var continuation: AsyncThrowingStream<Element, Error>.Continuation! private lazy var iterator = stream.makeAsyncIterator() public init(onTermination: (@Sendable (AsyncThrowingStream<Element, Error>.Continuation.Termination) -> Void)? = nil) { stream = AsyncThrowingStream<Element, Error> { token in token.onTermination = onTermination continuation = token } } public func makeAsyncIterator() -> AsyncThrowingStream<Element, Error>.Iterator { iterator } public func yield(_ element: Element) { continuation.yield(element) } public func finish(throwing error: Error? = nil) { continuation.finish(throwing: error) } }