-
Notifications
You must be signed in to change notification settings - Fork 625
/
AsyncChannelIO.swift
40 lines (34 loc) · 1.29 KB
/
AsyncChannelIO.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//===----------------------------------------------------------------------===//
//
// This source file is part of the SwiftNIO open source project
//
// Copyright (c) 2021 Apple Inc. and the SwiftNIO project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of SwiftNIO project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//
import NIOCore
import NIOHTTP1
@available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *)
struct AsyncChannelIO<Request, Response> {
let channel: Channel
init(_ channel: Channel) {
self.channel = channel
}
func start() async throws -> AsyncChannelIO<Request, Response> {
try await channel.pipeline.addHandler(RequestResponseHandler<HTTPRequestHead, NIOHTTPClientResponseFull>()).get()
return self
}
func sendRequest(_ request: Request) async throws -> Response {
let responsePromise: EventLoopPromise<Response> = channel.eventLoop.makePromise()
try await self.channel.writeAndFlush((request, responsePromise)).get()
return try await responsePromise.futureResult.get()
}
func close() async throws {
try await self.channel.close()
}
}