From 3fd73c6a126690fb1ab03f4b5772832ca6fb63f6 Mon Sep 17 00:00:00 2001 From: Mattt Zmuda Date: Fri, 19 Jul 2024 10:54:04 -0700 Subject: [PATCH] Refactor client to separate methods for creating and sending a request --- Sources/Replicate/Client.swift | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Sources/Replicate/Client.swift b/Sources/Replicate/Client.swift index ef646d01..93f4df80 100644 --- a/Sources/Replicate/Client.swift +++ b/Sources/Replicate/Client.swift @@ -649,13 +649,19 @@ public class Client { params = ["cursor": "\(cursor)"] } - return try await fetch(method, path, params: params) + let request = try createRequest(method: method, path: path, params: params) + return try await sendRequest(request) } private func fetch(_ method: Method, _ path: String, params: [String: Value]? = nil) async throws -> T { + let request = try createRequest(method: method, path: path, params: params) + return try await sendRequest(request) + } + + private func createRequest(method: Method, path: String, params: [String: Value]? = nil) throws -> URLRequest { var urlComponents = URLComponents(string: self.baseURLString.appending(path)) var httpBody: Data? = nil @@ -673,6 +679,10 @@ public class Client { let encoder = JSONEncoder() httpBody = try encoder.encode(params) } + case .query: + if let params, let queryString = params["query"] { + httpBody = queryString.description.data(using: .utf8) + } } guard let url = urlComponents?.url else { @@ -696,6 +706,10 @@ public class Client { request.addValue(userAgent, forHTTPHeaderField: "User-Agent") } + return request + } + + private func sendRequest(_ request: URLRequest) async throws -> T { let (data, response) = try await session.data(for: request) let decoder = JSONDecoder()