Skip to content

Commit 6a48d92

Browse files
committed
Adopt Get API client
1 parent bdaf7b3 commit 6a48d92

File tree

3 files changed

+40
-16
lines changed

3 files changed

+40
-16
lines changed

Package.resolved

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ let package = Package(
1515
.library(name: "Functions", targets: ["Functions"]),
1616
],
1717
dependencies: [
18+
.package(url: "https://github.com/kean/Get", from: "2.1.5"),
1819
],
1920
targets: [
2021
.target(
2122
name: "Functions",
22-
dependencies: []
23+
dependencies: ["Get"]
2324
),
2425
.testTarget(
2526
name: "FunctionsTests",

Sources/Functions/FunctionsClient.swift

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
import Foundation
2+
import Get
23

34
public final class FunctionsClient {
45
let url: URL
56
var headers: [String: String]
6-
let http: FunctionsHTTPClient
7+
8+
let client: APIClient
79

810
public init(
911
url: URL,
1012
headers: [String: String] = [:],
11-
http: FunctionsHTTPClient? = nil
13+
apiClientDelegate: APIClientDelegate? = nil
1214
) {
1315
self.url = url
1416
self.headers = headers
15-
self.http = http ?? DefaultFunctionsHTTPClient()
16-
1717
self.headers["X-Client-Info"] = "functions-swift/\(version)"
18+
client = APIClient(baseURL: url) {
19+
$0.delegate = apiClientDelegate
20+
}
1821
}
1922

2023
/// Updates the authorization header.
@@ -71,24 +74,28 @@ public final class FunctionsClient {
7174
functionName: String,
7275
invokeOptions: FunctionInvokeOptions
7376
) async throws -> (Data, HTTPURLResponse) {
74-
let body = invokeOptions.body
75-
let invokeHeaders = invokeOptions.headers
77+
let request = Request(
78+
path: functionName,
79+
method: .post,
80+
body: invokeOptions.body,
81+
headers: invokeOptions.headers.merging(headers) { first, _ in first }
82+
)
83+
84+
let response = try await client.data(for: request)
7685

77-
var request = URLRequest(url: url.appendingPathComponent(functionName))
78-
request.httpMethod = "POST"
79-
request.httpBody = body
80-
request.allHTTPHeaderFields = invokeHeaders.merging(headers) { invokeHeader, _ in invokeHeader }
86+
guard let httpResponse = response.response as? HTTPURLResponse else {
87+
throw URLError(.badServerResponse)
88+
}
8189

82-
let (data, response) = try await http.execute(request, client: self)
83-
guard 200 ..< 300 ~= response.statusCode else {
84-
throw FunctionsError.httpError(code: response.statusCode, data: data)
90+
guard 200 ..< 300 ~= httpResponse.statusCode else {
91+
throw FunctionsError.httpError(code: httpResponse.statusCode, data: response.data)
8592
}
8693

87-
let isRelayError = response.value(forHTTPHeaderField: "x-relay-error") == "true"
94+
let isRelayError = httpResponse.value(forHTTPHeaderField: "x-relay-error") == "true"
8895
if isRelayError {
8996
throw FunctionsError.relayError
9097
}
9198

92-
return (data, response)
99+
return (response.data, httpResponse)
93100
}
94101
}

0 commit comments

Comments
 (0)