import Foundation @propertyWrapper package struct AsyncStreamed { package var wrappedValue: AsyncStream { get { defer { continuation.yield(value) } return stream } @available(*, unavailable) set { _ = newValue } } package var value: T { didSet { guard value != oldValue else { return } continuation.yield(value) } } private let stream: AsyncStream private let continuation: AsyncStream.Continuation package init(_ value: T, bufferingPolicy limit: AsyncStream.Continuation.BufferingPolicy = .unbounded) { let (stream, continuation) = AsyncStream.makeStream(of: T.self, bufferingPolicy: limit) self.value = value self.stream = stream self.continuation = continuation } }