Skip to content

Instantly share code, notes, and snippets.

@SwiftyAlex
Last active September 22, 2019 16:02
Show Gist options
  • Save SwiftyAlex/a5efe7fe801f7a2d49e495620aeca944 to your computer and use it in GitHub Desktop.
Save SwiftyAlex/a5efe7fe801f7a2d49e495620aeca944 to your computer and use it in GitHub Desktop.
Route+toRequest
extension Route {
/// Default parameters so routes do not need to declare these
var queryParameters: [URLQueryItem] {
return []
}
var pathParameters: [String] {
return []
}
/// The basic implementation of `Route` `toRequest` adds parameters and builds the path.
public func toRequest() -> URLRequest {
// Add all the parameters
var urlComponents = URLComponents(string: APIConfig.baseURL.absoluteString)!
urlComponents.queryItems = queryParemeters
var url = urlComponents.url?.appendingPathComponent(Self.path)
pathParameters.forEach {
url!.appendPathComponent($0)
}
var request = URLRequest(url: url!)
if Self.requiresAuth {
request.addValue(token, forHTTPHeaderField: "Authorization")
}
// If we're using a route that has to send data, lets encode it here.
// In the case any special mapping needs to be done, this method should be overriden.
if let requestObject = requestObject, !(requestObject is Empty) {
request.httpBody = try? JSONEncoder().encode(requestObject)
}
return request
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment