This PR contains the work done to fix the naming of the libraries and the package, along with tweaks to the folder structure. Reviewed-on: #22 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
62 lines
1.9 KiB
Swift
62 lines
1.9 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftLibs open source project
|
|
//
|
|
// Copyright (c) 2023 Röck+Cöde VoF. and the SwiftLibs project authors
|
|
// Licensed under the EUPL 1.2 or later.
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of SwiftLibs project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
import Foundation
|
|
|
|
#if canImport(FoundationNetworking)
|
|
import FoundationNetworking
|
|
#endif
|
|
|
|
/// This use case generate a url request out of a given endpoint.
|
|
public struct MakeURLRequestUseCase {
|
|
|
|
// MARK: Initialisers
|
|
|
|
public init() {}
|
|
|
|
// MARK: Functions
|
|
|
|
/// Generate a `URLRequest` instance out of a given endpoint that conforms to the `Endpoint` protocol.
|
|
/// - Parameter endpoint: An endpoint which is used to generate a `URLRequest` instance from.
|
|
/// - Returns: A `URLRequest` instance filled with data provided by the given endpoint.
|
|
public func callAsFunction(endpoint: some Endpoint) throws -> URLRequest {
|
|
var urlComponents = URLComponents()
|
|
|
|
urlComponents.scheme = endpoint.scheme
|
|
urlComponents.host = endpoint.host
|
|
urlComponents.path = endpoint.path
|
|
|
|
if let port = endpoint.port {
|
|
urlComponents.port = port
|
|
}
|
|
|
|
if !endpoint.parameters.isEmpty {
|
|
urlComponents.queryItems = endpoint.parameters
|
|
.map(URLQueryItem.init)
|
|
.sorted(by: { $0.name < $1.name })
|
|
}
|
|
|
|
guard let url = urlComponents.url else {
|
|
throw MakeURLRequestError.urlNotCreated
|
|
}
|
|
|
|
var urlRequest = URLRequest(url: url)
|
|
|
|
urlRequest.httpMethod = endpoint.method.rawValue
|
|
urlRequest.httpBody = endpoint.body
|
|
urlRequest.allHTTPHeaderFields = endpoint.headers
|
|
|
|
return urlRequest
|
|
}
|
|
|
|
}
|