From 13de04062182fae55f177c234bb9d8a83b991082 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 21 Jan 2025 11:16:16 -0600 Subject: [PATCH] added request builder Signed-off-by: Matt Bruce --- .../Classes/RequestBuilder.swift | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 EmployeeDirectory/Classes/RequestBuilder.swift diff --git a/EmployeeDirectory/Classes/RequestBuilder.swift b/EmployeeDirectory/Classes/RequestBuilder.swift new file mode 100644 index 0000000..cfbf592 --- /dev/null +++ b/EmployeeDirectory/Classes/RequestBuilder.swift @@ -0,0 +1,55 @@ +// +// RequestBuilder.swift +// EmployeeDirectory +// +// Created by Matt Bruce on 1/21/25. +// + +import Foundation + +/// Enum representing HTTP methods +public enum HTTPMethod: String { + case get = "GET" + case post = "POST" + case put = "PUT" + case delete = "DELETE" + case patch = "PATCH" + case head = "HEAD" + case options = "OPTIONS" +} + +/// A utility for constructing HTTP requests +public struct RequestBuilder { + private var url: URL + private var method: HTTPMethod + private var headers: [String: String] = [:] + private var body: Data? + + public init(url: URL, method: HTTPMethod = .get) { + self.url = url + self.method = method + } + + /// Add a header to the request + @discardableResult + public mutating func addHeader(key: String, value: String) -> Self { + headers[key] = value + return self + } + + /// Set the body of the request + @discardableResult + public mutating func setBody(_ data: Data?) -> Self { + body = data + return self + } + + /// Build the `URLRequest` + public func build() -> URLRequest { + var request = URLRequest(url: url) + request.httpMethod = method.rawValue + request.allHTTPHeaderFields = headers + request.httpBody = body + return request + } +}