// // Created by Tobias on 14.07.20. // Copyright (c) 2020 Tobias. All rights reserved. // import Foundation public class RequestBuilder { private init() { } public static func create() -> RequestBuilder { RequestBuilder() } private var url: String = "" private var method: Request.RequestMethod = .get private var authentication: Authentication? private var parameters: [String: String] = [:] private var payload: Data? private var contentType: String? private var timeout: TimeInterval? public func url(_ url: String) -> RequestBuilder { self.url = url return self } public func method(_ method: Request.RequestMethod) -> RequestBuilder { self.method = method return self } public func authentication(_ authentication: Authentication) -> RequestBuilder { self.authentication = authentication return self } public func parameters(_ parameters: [String: String]) -> RequestBuilder { self.parameters = parameters return self } public func addParameter(key: String, value: String) -> RequestBuilder { self.parameters[key] = value return self } public func payload(_ payload: Data?) -> RequestBuilder { self.payload = payload self.contentType = "application/json" return self } public func formPayload(_ payload: [String: Any]) -> RequestBuilder { self.payload = payload.percentEncoded() self.contentType = "application/x-www-form-urlencoded" return self } public func timeout(timeout: TimeInterval) -> RequestBuilder { self.timeout = timeout return self } public func build() -> Request { Request(url: url, method: method, authentication: authentication, parameters: parameters, payload: payload, contentType: contentType, timeout: timeout) } }