import Foundation @propertyWrapper package struct AsyncStreamedFlow { package var wrappedValue: AsyncStream { mutating get { let (stream, continuation) = AsyncStream.makeStream(of: T.self, bufferingPolicy: bufferingPolicy) self.continuation = continuation return stream } @available(*, unavailable) set { _ = newValue } } private let bufferingPolicy: AsyncStream.Continuation.BufferingPolicy private var continuation: AsyncStream.Continuation? { didSet { oldValue?.finish() } } package init(_ bufferingPolicy: AsyncStream.Continuation.BufferingPolicy = .unbounded) { self.bufferingPolicy = bufferingPolicy } package func yield(_ value: T) { continuation?.yield(value) } package mutating func finish() { continuation = nil } }