From 6b1356bc68b376c3ef310b90d18f7e1e10c41aae Mon Sep 17 00:00:00 2001 From: Gus Cairo Date: Thu, 20 Nov 2025 16:24:37 +0000 Subject: [PATCH] Make readers and writers sending --- Package.swift | 2 +- .../HTTPServerClosureRequestHandler.swift | 12 +++++----- Sources/HTTPServer/HTTPServerProtocol.swift | 6 ++--- .../HTTPServer/HTTPServerRequestHandler.swift | 4 ++-- Tests/HTTPServerTests/HTTPServerTests.swift | 24 +++++++++---------- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Package.swift b/Package.swift index d98b5fc..a78325e 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.1 +// swift-tools-version: 6.2 import PackageDescription diff --git a/Sources/HTTPServer/HTTPServerClosureRequestHandler.swift b/Sources/HTTPServer/HTTPServerClosureRequestHandler.swift index 07b09bf..461096f 100644 --- a/Sources/HTTPServer/HTTPServerClosureRequestHandler.swift +++ b/Sources/HTTPServer/HTTPServerClosureRequestHandler.swift @@ -29,8 +29,8 @@ public struct HTTPServerClosureRequestHandler + consuming sending HTTPRequestConcludingAsyncReader, + consuming sending HTTPResponseSender ) async throws -> Void /// Creates a new closure-based HTTP request handler. @@ -40,8 +40,8 @@ public struct HTTPServerClosureRequestHandler + consuming sending HTTPRequestConcludingAsyncReader, + consuming sending HTTPResponseSender ) async throws -> Void ) { self._handler = handler @@ -57,8 +57,8 @@ public struct HTTPServerClosureRequestHandler + requestBodyAndTrailers: consuming sending HTTPRequestConcludingAsyncReader, + responseSender: consuming sending HTTPResponseSender ) async throws { try await self._handler(request, requestBodyAndTrailers, responseSender) } diff --git a/Sources/HTTPServer/HTTPServerProtocol.swift b/Sources/HTTPServer/HTTPServerProtocol.swift index 6e46edd..d93f1d5 100644 --- a/Sources/HTTPServer/HTTPServerProtocol.swift +++ b/Sources/HTTPServer/HTTPServerProtocol.swift @@ -68,10 +68,10 @@ extension HTTPServerProtocol where RequestHandler == HTTPServerClosureRequestHan /// } /// ``` public func serve( - handler: @Sendable @escaping ( + handler: nonisolated(nonsending) @Sendable @escaping ( _ request: HTTPRequest, - _ requestBodyAndTrailers: consuming HTTPRequestConcludingAsyncReader, - _ responseSender: consuming HTTPResponseSender + _ requestBodyAndTrailers: consuming sending HTTPRequestConcludingAsyncReader, + _ responseSender: consuming sending HTTPResponseSender ) async throws -> Void ) async throws { try await self.serve(handler: HTTPServerClosureRequestHandler(handler: handler)) diff --git a/Sources/HTTPServer/HTTPServerRequestHandler.swift b/Sources/HTTPServer/HTTPServerRequestHandler.swift index ab9b842..b209cbf 100644 --- a/Sources/HTTPServer/HTTPServerRequestHandler.swift +++ b/Sources/HTTPServer/HTTPServerRequestHandler.swift @@ -97,7 +97,7 @@ public protocol HTTPServerRequestHandler: Sendable { func handle( // TODO: add request context parameter request: HTTPRequest, - requestBodyAndTrailers: consuming ConcludingRequestReader, - responseSender: consuming HTTPResponseSender + requestBodyAndTrailers: consuming sending ConcludingRequestReader, + responseSender: consuming sending HTTPResponseSender ) async throws } diff --git a/Tests/HTTPServerTests/HTTPServerTests.swift b/Tests/HTTPServerTests/HTTPServerTests.swift index 94ad3f5..a1dde72 100644 --- a/Tests/HTTPServerTests/HTTPServerTests.swift +++ b/Tests/HTTPServerTests/HTTPServerTests.swift @@ -14,18 +14,18 @@ struct HTTPServerTests { ) try await server.serve { request, requestBodyAndTrailers, responseSender in _ = try await requestBodyAndTrailers.collect(upTo: 100) { _ in } - // Uncommenting this would cause a "requestReader consumed more than once" error. - //_ = try await requestReader.collect(upTo: 100) { _ in } + // Uncommenting this would cause a "requestBodyAndTrailers consumed more than once" error. +// _ = try await requestBodyAndTrailers.collect(upTo: 100) { _ in } let responseConcludingWriter = try await responseSender.send(HTTPResponse(status: .ok)) // Uncommenting this would cause a "responseSender consumed more than once" error. - //let responseConcludingWriter2 = try await responseSender.send(HTTPResponse(status: .ok)) +// let responseConcludingWriter2 = try await responseSender.send(HTTPResponse(status: .ok)) - // Uncommenting this would cause a "requestReader consumed more than once" error. - //_ = try await requestReader.consumeAndConclude { reader in - // var reader = reader - // try await reader.read { elem in } - //} + // Uncommenting this would cause a "requestBodyAndTrailers consumed more than once" error. +// _ = try await requestBodyAndTrailers.consumeAndConclude { reader in +// var reader = reader +// try await reader.read { elem in } +// } try await responseConcludingWriter.produceAndConclude { writer in var writer = writer @@ -34,10 +34,10 @@ struct HTTPServerTests { } // Uncommenting this would cause a "responseConcludingWriter consumed more than once" error. - //try await responseConcludingWriter.writeAndConclude( - // element: [1, 2].span, - // finalElement: HTTPFields(dictionaryLiteral: (.acceptEncoding, "Encoding")) - //) +// try await responseConcludingWriter.writeAndConclude( +// element: [1, 2].span, +// finalElement: HTTPFields(dictionaryLiteral: (.acceptEncoding, "Encoding")) +// ) } } }