[Improvement] Naming of libraries and package (#22)
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>
This commit was merged in pull request #22.
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// 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
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user