Skip to content

Commit ce5d41b

Browse files
authored
Make readers and writers sending in closures (#27)
1 parent 8f1c17e commit ce5d41b

File tree

5 files changed

+24
-24
lines changed

5 files changed

+24
-24
lines changed

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version: 6.1
1+
// swift-tools-version: 6.2
22

33
import PackageDescription
44

Sources/HTTPServer/HTTPServerClosureRequestHandler.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public struct HTTPServerClosureRequestHandler<ConcludingRequestReader: ~Copyable
2929
private let _handler:
3030
nonisolated(nonsending) @Sendable (
3131
HTTPRequest,
32-
consuming HTTPRequestConcludingAsyncReader,
33-
consuming HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
32+
consuming sending HTTPRequestConcludingAsyncReader,
33+
consuming sending HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
3434
) async throws -> Void
3535

3636
/// Creates a new closure-based HTTP request handler.
@@ -40,8 +40,8 @@ public struct HTTPServerClosureRequestHandler<ConcludingRequestReader: ~Copyable
4040
public init(
4141
handler: nonisolated(nonsending) @Sendable @escaping (
4242
HTTPRequest,
43-
consuming HTTPRequestConcludingAsyncReader,
44-
consuming HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
43+
consuming sending HTTPRequestConcludingAsyncReader,
44+
consuming sending HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
4545
) async throws -> Void
4646
) {
4747
self._handler = handler
@@ -57,8 +57,8 @@ public struct HTTPServerClosureRequestHandler<ConcludingRequestReader: ~Copyable
5757
/// - responseSender: An ``HTTPResponseSender`` to send the HTTP response.
5858
public func handle(
5959
request: HTTPRequest,
60-
requestBodyAndTrailers: consuming HTTPRequestConcludingAsyncReader,
61-
responseSender: consuming HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
60+
requestBodyAndTrailers: consuming sending HTTPRequestConcludingAsyncReader,
61+
responseSender: consuming sending HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
6262
) async throws {
6363
try await self._handler(request, requestBodyAndTrailers, responseSender)
6464
}

Sources/HTTPServer/HTTPServerProtocol.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ extension HTTPServerProtocol where RequestHandler == HTTPServerClosureRequestHan
6868
/// }
6969
/// ```
7070
public func serve(
71-
handler: @Sendable @escaping (
71+
handler: nonisolated(nonsending) @Sendable @escaping (
7272
_ request: HTTPRequest,
73-
_ requestBodyAndTrailers: consuming HTTPRequestConcludingAsyncReader,
74-
_ responseSender: consuming HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
73+
_ requestBodyAndTrailers: consuming sending HTTPRequestConcludingAsyncReader,
74+
_ responseSender: consuming sending HTTPResponseSender<HTTPResponseConcludingAsyncWriter>
7575
) async throws -> Void
7676
) async throws {
7777
try await self.serve(handler: HTTPServerClosureRequestHandler(handler: handler))

Sources/HTTPServer/HTTPServerRequestHandler.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public protocol HTTPServerRequestHandler: Sendable {
9797
func handle(
9898
// TODO: add request context parameter
9999
request: HTTPRequest,
100-
requestBodyAndTrailers: consuming ConcludingRequestReader,
101-
responseSender: consuming HTTPResponseSender<ConcludingResponseWriter>
100+
requestBodyAndTrailers: consuming sending ConcludingRequestReader,
101+
responseSender: consuming sending HTTPResponseSender<ConcludingResponseWriter>
102102
) async throws
103103
}

Tests/HTTPServerTests/HTTPServerTests.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ struct HTTPServerTests {
1414
)
1515
try await server.serve { request, requestBodyAndTrailers, responseSender in
1616
_ = try await requestBodyAndTrailers.collect(upTo: 100) { _ in }
17-
// Uncommenting this would cause a "requestReader consumed more than once" error.
18-
//_ = try await requestReader.collect(upTo: 100) { _ in }
17+
// Uncommenting this would cause a "requestBodyAndTrailers consumed more than once" error.
18+
// _ = try await requestBodyAndTrailers.collect(upTo: 100) { _ in }
1919

2020
let responseConcludingWriter = try await responseSender.send(HTTPResponse(status: .ok))
2121
// Uncommenting this would cause a "responseSender consumed more than once" error.
22-
//let responseConcludingWriter2 = try await responseSender.send(HTTPResponse(status: .ok))
22+
// let responseConcludingWriter2 = try await responseSender.send(HTTPResponse(status: .ok))
2323

24-
// Uncommenting this would cause a "requestReader consumed more than once" error.
25-
//_ = try await requestReader.consumeAndConclude { reader in
26-
// var reader = reader
27-
// try await reader.read { elem in }
28-
//}
24+
// Uncommenting this would cause a "requestBodyAndTrailers consumed more than once" error.
25+
// _ = try await requestBodyAndTrailers.consumeAndConclude { reader in
26+
// var reader = reader
27+
// try await reader.read { elem in }
28+
// }
2929

3030
try await responseConcludingWriter.produceAndConclude { writer in
3131
var writer = writer
@@ -34,10 +34,10 @@ struct HTTPServerTests {
3434
}
3535

3636
// Uncommenting this would cause a "responseConcludingWriter consumed more than once" error.
37-
//try await responseConcludingWriter.writeAndConclude(
38-
// element: [1, 2].span,
39-
// finalElement: HTTPFields(dictionaryLiteral: (.acceptEncoding, "Encoding"))
40-
//)
37+
// try await responseConcludingWriter.writeAndConclude(
38+
// element: [1, 2].span,
39+
// finalElement: HTTPFields(dictionaryLiteral: (.acceptEncoding, "Encoding"))
40+
// )
4141
}
4242
}
4343
}

0 commit comments

Comments
 (0)