Simplify receive implementation for transports (#78)

This commit is contained in:
Mattt 2025-04-18 02:37:31 -07:00 • committed by GitHub
commit 29aa74d137
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 7 additions and 32 deletions

View file

@ -148,14 +148,7 @@ public actor HTTPClientTransport: Actor, Transport {
/// Receives data in an async sequence
public func receive() -> AsyncThrowingStream<Data, Swift.Error> {
return AsyncThrowingStream { continuation in
Task {
for try await message in messageStream {
continuation.yield(message)
}
continuation.finish()
}
}
return messageStream
}
// MARK: - SSE

View file

@ -159,18 +159,7 @@ import struct Foundation.Data
}
public func receive() -> AsyncThrowingStream<Data, Swift.Error> {
return AsyncThrowingStream { continuation in
Task {
do {
for try await message in messageStream {
continuation.yield(message)
}
continuation.finish()
} catch {
continuation.finish(throwing: error)
}
}
}
return messageStream
}
private func receiveLoop() async {

View file

@ -29,8 +29,8 @@ import struct Foundation.Data
public nonisolated let logger: Logger
private var isConnected = false
private let messageStream: AsyncStream<Data>
private let messageContinuation: AsyncStream<Data>.Continuation
private let messageStream: AsyncThrowingStream<Data, Swift.Error>
private let messageContinuation: AsyncThrowingStream<Data, Swift.Error>.Continuation
public init(
input: FileDescriptor = FileDescriptor.standardInput,
@ -46,8 +46,8 @@ import struct Foundation.Data
factory: { _ in SwiftLogNoOpLogHandler() })
// Create message stream
var continuation: AsyncStream<Data>.Continuation!
self.messageStream = AsyncStream { continuation = $0 }
var continuation: AsyncThrowingStream<Data, Swift.Error>.Continuation!
self.messageStream = AsyncThrowingStream { continuation = $0 }
self.messageContinuation = continuation
}
@ -177,14 +177,7 @@ import struct Foundation.Data
/// or batches containing multiple requests/notifications encoded as JSON arrays.
/// Each message is guaranteed to be a complete JSON object or array.
public func receive() -> AsyncThrowingStream<Data, Swift.Error> {
return AsyncThrowingStream { continuation in
Task {
for await message in messageStream {
continuation.yield(message)
}
continuation.finish()
}
}
return messageStream
}
}
#endif