diff --git a/Sources/NIOHTTP2/HTTP2PipelineHelpers.swift b/Sources/NIOHTTP2/HTTP2PipelineHelpers.swift index 0f5abf9c..425756c4 100644 --- a/Sources/NIOHTTP2/HTTP2PipelineHelpers.swift +++ b/Sources/NIOHTTP2/HTTP2PipelineHelpers.swift @@ -698,10 +698,14 @@ extension Channel { http1ConnectionInitializer: @escaping NIOChannelInitializerWithOutput, http2ConnectionInitializer: @escaping NIOChannelInitializerWithOutput, http2StreamInitializer: @escaping NIOChannelInitializerWithOutput - ) -> EventLoopFuture) - >>> { + ) -> EventLoopFuture< + EventLoopFuture< + NIONegotiatedHTTPVersion< + HTTP1ConnectionOutput, + (HTTP2ConnectionOutput, NIOHTTP2Handler.AsyncStreamMultiplexer) + > + > + > { self.configureAsyncHTTPServerPipeline( streamDelegate: nil, http2Configuration: http2Configuration, @@ -733,28 +737,39 @@ extension Channel { /// be waited on to retrieve the result of the negotiation. @inlinable @available(macOS 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) - public func configureAsyncHTTPServerPipeline( + public func configureAsyncHTTPServerPipeline< + HTTP1ConnectionOutput: Sendable, + HTTP2ConnectionOutput: Sendable, + HTTP2StreamOutput: Sendable + >( streamDelegate: NIOHTTP2StreamDelegate?, http2Configuration: NIOHTTP2Handler.Configuration = .init(), http1ConnectionInitializer: @escaping NIOChannelInitializerWithOutput, http2ConnectionInitializer: @escaping NIOChannelInitializerWithOutput, http2StreamInitializer: @escaping NIOChannelInitializerWithOutput - ) -> EventLoopFuture) - >>> { - let http2ConnectionInitializer: NIOChannelInitializerWithOutput<(HTTP2ConnectionOutput, NIOHTTP2Handler.AsyncStreamMultiplexer)> = { channel in - channel.configureAsyncHTTP2Pipeline( - mode: .server, - streamDelegate: streamDelegate, - configuration: http2Configuration, - streamInitializer: http2StreamInitializer - ).flatMap { multiplexer in - return http2ConnectionInitializer(channel).map { connectionChannel in - (connectionChannel, multiplexer) + ) -> EventLoopFuture< + EventLoopFuture< + NIONegotiatedHTTPVersion< + HTTP1ConnectionOutput, + (HTTP2ConnectionOutput, NIOHTTP2Handler.AsyncStreamMultiplexer) + > + > + > { + let http2ConnectionInitializer: + NIOChannelInitializerWithOutput< + (HTTP2ConnectionOutput, NIOHTTP2Handler.AsyncStreamMultiplexer) + > = { channel in + channel.configureAsyncHTTP2Pipeline( + mode: .server, + streamDelegate: streamDelegate, + configuration: http2Configuration, + streamInitializer: http2StreamInitializer + ).flatMap { multiplexer in + return http2ConnectionInitializer(channel).map { connectionChannel in + (connectionChannel, multiplexer) + } } } - } let http1ConnectionInitializer: NIOChannelInitializerWithOutput = { channel in channel.pipeline.configureHTTPServerPipeline().flatMap { _ in http1ConnectionInitializer(channel)