From 57162788f5dc388b5c3692611bcfa179ee8c2067 Mon Sep 17 00:00:00 2001 From: Keita Watanabe Date: Sun, 15 Sep 2024 06:48:37 +0900 Subject: [PATCH] Fix existential-any for Swift6 (#3881) ### Goals :soccer: Resolve `existential-any` build errors. ### Implementation Details :construction: Added `any` to each protocols. https://github.com/swiftlang/swift-evolution/blob/main/proposals/0335-existential-any.md Co-authored-by: Jon Shier --- Source/Core/AFError.swift | 58 +++---- Source/Core/DataRequest.swift | 20 +-- Source/Core/DataStreamRequest.swift | 24 +-- Source/Core/DownloadRequest.swift | 18 +- Source/Core/ParameterEncoder.swift | 4 +- Source/Core/ParameterEncoding.swift | 8 +- Source/Core/Request.swift | 24 +-- Source/Core/Response.swift | 16 +- Source/Core/Session.swift | 148 ++++++++--------- Source/Core/SessionDelegate.swift | 14 +- ...URLConvertible+URLRequestConvertible.swift | 2 +- Source/Core/UploadRequest.swift | 10 +- Source/Core/WebSocketRequest.swift | 30 ++-- Source/Extensions/Result+Alamofire.swift | 4 +- .../Features/AuthenticationInterceptor.swift | 12 +- Source/Features/Combine.swift | 28 ++-- Source/Features/Concurrency.swift | 24 +-- Source/Features/EventMonitor.swift | 26 +-- Source/Features/MultipartUpload.swift | 4 +- Source/Features/RequestCompression.swift | 2 +- Source/Features/RequestInterceptor.swift | 60 +++---- Source/Features/ResponseSerialization.swift | 52 +++--- Source/Features/RetryPolicy.swift | 4 +- Source/Features/ServerTrustEvaluation.swift | 16 +- Source/Features/URLEncodedFormEncoder.swift | 48 +++--- Source/Features/Validation.swift | 2 +- Tests/AuthenticationInterceptorTests.swift | 10 +- Tests/CachedResponseHandlerTests.swift | 4 +- Tests/DataStreamTests.swift | 4 +- Tests/DownloadTests.swift | 12 +- Tests/MultipartFormDataTests.swift | 34 ++-- Tests/NSLoggingEventMonitor.swift | 24 +-- Tests/ParameterEncoderTests.swift | 156 +++++++++--------- Tests/RedirectHandlerTests.swift | 2 +- Tests/RequestInterceptorTests.swift | 38 ++--- Tests/ResponseSerializationTests.swift | 4 +- Tests/ResponseTests.swift | 12 +- Tests/RetryPolicyTests.swift | 2 +- Tests/ServerTrustEvaluatorTests.swift | 2 +- Tests/SessionTests.swift | 32 ++-- Tests/TLSEvaluationTests.swift | 18 +- Tests/TestHelpers.swift | 48 +++--- Tests/URLProtocolTests.swift | 2 +- Tests/ValidationTests.swift | 4 +- Tests/WebSocketTests.swift | 4 +- 45 files changed, 535 insertions(+), 535 deletions(-) diff --git a/Source/Core/AFError.swift b/Source/Core/AFError.swift index cb7aa40b4..ff8a20f75 100644 --- a/Source/Core/AFError.swift +++ b/Source/Core/AFError.swift @@ -40,13 +40,13 @@ public enum AFError: Error { /// The file at the `fileURL` provided was not reachable. case bodyPartFileNotReachable(at: URL) /// Attempting to check the reachability of the `fileURL` provided threw an error. - case bodyPartFileNotReachableWithError(atURL: URL, error: Error) + case bodyPartFileNotReachableWithError(atURL: URL, error: any Error) /// The file at the `fileURL` provided is actually a directory. case bodyPartFileIsDirectory(at: URL) /// The size of the file at the `fileURL` provided was not returned by the system. case bodyPartFileSizeNotAvailable(at: URL) /// The attempt to find the size of the file at the `fileURL` provided threw an error. - case bodyPartFileSizeQueryFailedWithError(forURL: URL, error: Error) + case bodyPartFileSizeQueryFailedWithError(forURL: URL, error: any Error) /// An `InputStream` could not be created for the provided `fileURL`. case bodyPartInputStreamCreationFailed(for: URL) /// An `OutputStream` could not be created when attempting to write the encoded data to disk. @@ -56,9 +56,9 @@ public enum AFError: Error { /// The `fileURL` provided for writing the encoded body data to disk is not a file `URL`. case outputStreamURLInvalid(url: URL) /// The attempt to write the encoded body data to disk failed with an underlying error. - case outputStreamWriteFailed(error: Error) + case outputStreamWriteFailed(error: any Error) /// The attempt to read an encoded body part `InputStream` failed with underlying system error. - case inputStreamReadFailed(error: Error) + case inputStreamReadFailed(error: any Error) } /// Represents unexpected input stream length that occur when encoding the `MultipartFormData`. Instances will be @@ -75,9 +75,9 @@ public enum AFError: Error { /// The `URLRequest` did not have a `URL` to encode. case missingURL /// JSON serialization failed with an underlying system error during the encoding process. - case jsonEncodingFailed(error: Error) + case jsonEncodingFailed(error: any Error) /// Custom parameter encoding failed due to the associated `Error`. - case customEncodingFailed(error: Error) + case customEncodingFailed(error: any Error) } /// The underlying reason the `.parameterEncoderFailed` error occurred. @@ -93,7 +93,7 @@ public enum AFError: Error { /// A `RequiredComponent` was missing during encoding. case missingRequiredComponent(RequiredComponent) /// The underlying encoder failed with the associated error. - case encoderFailed(error: Error) + case encoderFailed(error: any Error) } /// The underlying reason the `.responseValidationFailed` error occurred. @@ -110,7 +110,7 @@ public enum AFError: Error { /// The response status code was not acceptable. case unacceptableStatusCode(code: Int) /// Custom response validation failed due to the associated `Error`. - case customValidationFailed(error: Error) + case customValidationFailed(error: any Error) } /// The underlying reason the response serialization error occurred. @@ -124,11 +124,11 @@ public enum AFError: Error { /// String serialization failed using the provided `String.Encoding`. case stringSerializationFailed(encoding: String.Encoding) /// JSON serialization failed with an underlying system error. - case jsonSerializationFailed(error: Error) + case jsonSerializationFailed(error: any Error) /// A `DataDecoder` failed to decode the response due to the associated `Error`. - case decodingFailed(error: Error) + case decodingFailed(error: any Error) /// A custom response serializer failed due to the associated `Error`. - case customSerializationFailed(error: Error) + case customSerializationFailed(error: any Error) /// Generic serialization failed for an empty response that wasn't type `Empty` but instead the associated type. case invalidEmptyResponse(type: String) } @@ -169,7 +169,7 @@ public enum AFError: Error { /// During evaluation, creation of the revocation policy failed. case revocationPolicyCreationFailed /// `SecTrust` evaluation failed with the associated `Error`, if one was produced. - case trustEvaluationFailed(error: Error?) + case trustEvaluationFailed(error: (any Error)?) /// Default evaluation failed with the associated `Output`. case defaultEvaluationFailed(output: Output) /// Host validation failed with the associated `Output`. @@ -181,7 +181,7 @@ public enum AFError: Error { /// Public key pinning failed. case publicKeyPinningFailed(host: String, trust: SecTrust, pinnedKeys: [SecKey], serverKeys: [SecKey]) /// Custom server trust evaluation failed due to the associated `Error`. - case customEvaluationFailed(error: Error) + case customEvaluationFailed(error: any Error) } #endif @@ -192,15 +192,15 @@ public enum AFError: Error { } /// `UploadableConvertible` threw an error in `createUploadable()`. - case createUploadableFailed(error: Error) + case createUploadableFailed(error: any Error) /// `URLRequestConvertible` threw an error in `asURLRequest()`. - case createURLRequestFailed(error: Error) + case createURLRequestFailed(error: any Error) /// `SessionDelegate` threw an error while attempting to move downloaded file to destination URL. - case downloadedFileMoveFailed(error: Error, source: URL, destination: URL) + case downloadedFileMoveFailed(error: any Error, source: URL, destination: URL) /// `Request` was explicitly cancelled. case explicitlyCancelled /// `URLConvertible` type failed to create a valid `URL`. - case invalidURL(url: URLConvertible) + case invalidURL(url: any URLConvertible) /// Multipart form encoding failed. case multipartEncodingFailed(reason: MultipartEncodingFailureReason) /// `ParameterEncoding` threw an error during the encoding process. @@ -208,9 +208,9 @@ public enum AFError: Error { /// `ParameterEncoder` threw an error while running the encoder. case parameterEncoderFailed(reason: ParameterEncoderFailureReason) /// `RequestAdapter` threw an error during adaptation. - case requestAdaptationFailed(error: Error) + case requestAdaptationFailed(error: any Error) /// `RequestRetrier` threw an error during the request retry process. - case requestRetryFailed(retryError: Error, originalError: Error) + case requestRetryFailed(retryError: any Error, originalError: any Error) /// Response validation failed. case responseValidationFailed(reason: ResponseValidationFailureReason) /// Response serialization failed. @@ -222,9 +222,9 @@ public enum AFError: Error { /// `Session` which issued the `Request` was deinitialized, most likely because its reference went out of scope. case sessionDeinitialized /// `Session` was explicitly invalidated, possibly with the `Error` produced by the underlying `URLSession`. - case sessionInvalidated(error: Error?) + case sessionInvalidated(error: (any Error)?) /// `URLSessionTask` completed with error. - case sessionTaskFailed(error: Error) + case sessionTaskFailed(error: any Error) /// `URLRequest` failed validation. case urlRequestValidationFailed(reason: URLRequestValidationFailureReason) } @@ -367,7 +367,7 @@ extension AFError { extension AFError { /// The `URLConvertible` associated with the error. - public var urlConvertible: URLConvertible? { + public var urlConvertible: (any URLConvertible)? { guard case let .invalidURL(url) = self else { return nil } return url } @@ -381,7 +381,7 @@ extension AFError { /// The underlying `Error` responsible for generating the failure associated with `.sessionInvalidated`, /// `.parameterEncodingFailed`, `.parameterEncoderFailed`, `.multipartEncodingFailed`, `.requestAdaptationFailed`, /// `.responseSerializationFailed`, `.requestRetryFailed` errors. - public var underlyingError: Error? { + public var underlyingError: (any Error)? { switch self { case let .multipartEncodingFailed(reason): return reason.underlyingError @@ -464,7 +464,7 @@ extension AFError { } extension AFError.ParameterEncodingFailureReason { - var underlyingError: Error? { + var underlyingError: (any Error)? { switch self { case let .jsonEncodingFailed(error), let .customEncodingFailed(error): @@ -476,7 +476,7 @@ extension AFError.ParameterEncodingFailureReason { } extension AFError.ParameterEncoderFailureReason { - var underlyingError: Error? { + var underlyingError: (any Error)? { switch self { case let .encoderFailed(error): return error @@ -507,7 +507,7 @@ extension AFError.MultipartEncodingFailureReason { } } - var underlyingError: Error? { + var underlyingError: (any Error)? { switch self { case let .bodyPartFileNotReachableWithError(_, error), let .bodyPartFileSizeQueryFailedWithError(_, error), @@ -568,7 +568,7 @@ extension AFError.ResponseValidationFailureReason { } } - var underlyingError: Error? { + var underlyingError: (any Error)? { switch self { case let .customValidationFailed(error): return error @@ -598,7 +598,7 @@ extension AFError.ResponseSerializationFailureReason { } } - var underlyingError: Error? { + var underlyingError: (any Error)? { switch self { case let .jsonSerializationFailed(error), let .decodingFailed(error), @@ -636,7 +636,7 @@ extension AFError.ServerTrustFailureReason { } } - var underlyingError: Error? { + var underlyingError: (any Error)? { switch self { case let .customEvaluationFailed(error): return error diff --git a/Source/Core/DataRequest.swift b/Source/Core/DataRequest.swift index e282ee532..8c79c0446 100644 --- a/Source/Core/DataRequest.swift +++ b/Source/Core/DataRequest.swift @@ -27,7 +27,7 @@ import Foundation /// `Request` subclass which handles in-memory `Data` download using `URLSessionDataTask`. public class DataRequest: Request { /// `URLRequestConvertible` value used to create `URLRequest`s for this instance. - public let convertible: URLRequestConvertible + public let convertible: any URLRequestConvertible /// `Data` read from the server so far. public var data: Data? { dataMutableState.data } @@ -52,12 +52,12 @@ public class DataRequest: Request { /// - interceptor: `RequestInterceptor` used throughout the request lifecycle. /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request`. init(id: UUID = UUID(), - convertible: URLRequestConvertible, + convertible: any URLRequestConvertible, underlyingQueue: DispatchQueue, serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { + eventMonitor: (any EventMonitor)?, + interceptor: (any RequestInterceptor)?, + delegate: any RequestDelegate) { self.convertible = convertible super.init(id: id, @@ -349,7 +349,7 @@ public class DataRequest: Request { /// - Returns: The request. @discardableResult public func responseData(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods, completionHandler: @escaping (AFDataResponse) -> Void) -> Self { @@ -375,7 +375,7 @@ public class DataRequest: Request { /// - Returns: The request. @discardableResult public func responseString(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods, @@ -404,7 +404,7 @@ public class DataRequest: Request { @available(*, deprecated, message: "responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.") @discardableResult public func responseJSON(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = JSONResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = JSONResponseSerializer.defaultEmptyRequestMethods, options: JSONSerialization.ReadingOptions = .allowFragments, @@ -433,8 +433,8 @@ public class DataRequest: Request { @discardableResult public func responseDecodable(of type: T.Type = T.self, queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + dataPreprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods, completionHandler: @escaping (AFDataResponse) -> Void) -> Self { diff --git a/Source/Core/DataStreamRequest.swift b/Source/Core/DataStreamRequest.swift index a3c29b0ed..92e3fb589 100644 --- a/Source/Core/DataStreamRequest.swift +++ b/Source/Core/DataStreamRequest.swift @@ -81,7 +81,7 @@ public final class DataStreamRequest: Request { } /// `URLRequestConvertible` value used to create `URLRequest`s for this instance. - public let convertible: URLRequestConvertible + public let convertible: any URLRequestConvertible /// Whether or not the instance will be cancelled if stream parsing encounters an error. public let automaticallyCancelOnStreamError: Bool @@ -122,13 +122,13 @@ public final class DataStreamRequest: Request { /// - delegate: `RequestDelegate` that provides an interface to actions not performed by /// the `Request`. init(id: UUID = UUID(), - convertible: URLRequestConvertible, + convertible: any URLRequestConvertible, automaticallyCancelOnStreamError: Bool, underlyingQueue: DispatchQueue, serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { + eventMonitor: (any EventMonitor)?, + interceptor: (any RequestInterceptor)?, + delegate: any RequestDelegate) { self.convertible = convertible self.automaticallyCancelOnStreamError = automaticallyCancelOnStreamError @@ -460,8 +460,8 @@ public final class DataStreamRequest: Request { @discardableResult public func responseStreamDecodable(of type: T.Type = T.self, on queue: DispatchQueue = .main, - using decoder: DataDecoder = JSONDecoder(), - preprocessor: DataPreprocessor = PassthroughPreprocessor(), + using decoder: any DataDecoder = JSONDecoder(), + preprocessor: any DataPreprocessor = PassthroughPreprocessor(), stream: @escaping Handler) -> Self { responseStream(using: DecodableStreamSerializer(decoder: decoder, dataPreprocessor: preprocessor), on: queue, @@ -517,16 +517,16 @@ public protocol DataStreamSerializer { /// `DataStreamSerializer` which uses the provided `DataPreprocessor` and `DataDecoder` to serialize the incoming `Data`. public struct DecodableStreamSerializer: DataStreamSerializer { /// `DataDecoder` used to decode incoming `Data`. - public let decoder: DataDecoder + public let decoder: any DataDecoder /// `DataPreprocessor` incoming `Data` is passed through before being passed to the `DataDecoder`. - public let dataPreprocessor: DataPreprocessor + public let dataPreprocessor: any DataPreprocessor /// Creates an instance with the provided `DataDecoder` and `DataPreprocessor`. /// - Parameters: /// - decoder: ` DataDecoder` used to decode incoming `Data`. `JSONDecoder()` by default. /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the /// `decoder`. `PassthroughPreprocessor()` by default. - public init(decoder: DataDecoder = JSONDecoder(), dataPreprocessor: DataPreprocessor = PassthroughPreprocessor()) { + public init(decoder: any DataDecoder = JSONDecoder(), dataPreprocessor: any DataPreprocessor = PassthroughPreprocessor()) { self.decoder = decoder self.dataPreprocessor = dataPreprocessor } @@ -568,8 +568,8 @@ extension DataStreamSerializer { /// - dataPreprocessor: `DataPreprocessor` used to process incoming `Data` before it's passed through the /// `decoder`. `PassthroughPreprocessor()` by default. public static func decodable(of type: T.Type, - decoder: DataDecoder = JSONDecoder(), - dataPreprocessor: DataPreprocessor = PassthroughPreprocessor()) -> Self where Self == DecodableStreamSerializer { + decoder: any DataDecoder = JSONDecoder(), + dataPreprocessor: any DataPreprocessor = PassthroughPreprocessor()) -> Self where Self == DecodableStreamSerializer { DecodableStreamSerializer(decoder: decoder, dataPreprocessor: dataPreprocessor) } } diff --git a/Source/Core/DownloadRequest.swift b/Source/Core/DownloadRequest.swift index 556c43eae..605741b07 100644 --- a/Source/Core/DownloadRequest.swift +++ b/Source/Core/DownloadRequest.swift @@ -95,7 +95,7 @@ public final class DownloadRequest: Request { /// Type describing the source used to create the underlying `URLSessionDownloadTask`. public enum Downloadable { /// Download should be started from the `URLRequest` produced by the associated `URLRequestConvertible` value. - case request(URLRequestConvertible) + case request(any URLRequestConvertible) /// Download should be started from the associated resume `Data` value. case resumeData(Data) } @@ -151,9 +151,9 @@ public final class DownloadRequest: Request { downloadable: Downloadable, underlyingQueue: DispatchQueue, serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate, + eventMonitor: (any EventMonitor)?, + interceptor: (any RequestInterceptor)?, + delegate: any RequestDelegate, destination: @escaping Destination) { self.downloadable = downloadable self.destination = destination @@ -489,7 +489,7 @@ public final class DownloadRequest: Request { /// - Returns: The request. @discardableResult public func responseData(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods, completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { @@ -515,7 +515,7 @@ public final class DownloadRequest: Request { /// - Returns: The request. @discardableResult public func responseString(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods, @@ -544,7 +544,7 @@ public final class DownloadRequest: Request { @available(*, deprecated, message: "responseJSON deprecated and will be removed in Alamofire 6. Use responseDecodable instead.") @discardableResult public func responseJSON(queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = JSONResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = JSONResponseSerializer.defaultEmptyRequestMethods, options: JSONSerialization.ReadingOptions = .allowFragments, @@ -573,8 +573,8 @@ public final class DownloadRequest: Request { @discardableResult public func responseDecodable(of type: T.Type = T.self, queue: DispatchQueue = .main, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + dataPreprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods, completionHandler: @escaping (AFDownloadResponse) -> Void) -> Self { diff --git a/Source/Core/ParameterEncoder.swift b/Source/Core/ParameterEncoder.swift index 3d30c3f3a..fd1792e14 100644 --- a/Source/Core/ParameterEncoder.swift +++ b/Source/Core/ParameterEncoder.swift @@ -173,7 +173,7 @@ open class URLEncodedFormParameterEncoder: ParameterEncoder { if destination.encodesParametersInURL(for: method), var components = URLComponents(url: url, resolvingAgainstBaseURL: false) { - let query: String = try Result { try encoder.encode(parameters) } + let query: String = try Result { try encoder.encode(parameters) } .mapError { AFError.parameterEncoderFailed(reason: .encoderFailed(error: $0)) }.get() let newQueryString = [components.percentEncodedQuery, query].compactMap { $0 }.joinedWithAmpersands() components.percentEncodedQuery = newQueryString.isEmpty ? nil : newQueryString @@ -188,7 +188,7 @@ open class URLEncodedFormParameterEncoder: ParameterEncoder { request.headers.update(.contentType("application/x-www-form-urlencoded; charset=utf-8")) } - request.httpBody = try Result { try encoder.encode(parameters) } + request.httpBody = try Result { try encoder.encode(parameters) } .mapError { AFError.parameterEncoderFailed(reason: .encoderFailed(error: $0)) }.get() } diff --git a/Source/Core/ParameterEncoding.swift b/Source/Core/ParameterEncoding.swift index 5b7d680c0..d3cd60202 100644 --- a/Source/Core/ParameterEncoding.swift +++ b/Source/Core/ParameterEncoding.swift @@ -37,7 +37,7 @@ public protocol ParameterEncoding { /// /// - Returns: The encoded `URLRequest`. /// - Throws: Any `Error` produced during parameter encoding. - func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest + func encode(_ urlRequest: any URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest } // MARK: - @@ -160,7 +160,7 @@ public struct URLEncoding: ParameterEncoding { // MARK: Encoding - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { + public func encode(_ urlRequest: any URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { var urlRequest = try urlRequest.asURLRequest() guard let parameters else { return urlRequest } @@ -272,7 +272,7 @@ public struct JSONEncoding: ParameterEncoding { // MARK: Encoding - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { + public func encode(_ urlRequest: any URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { var urlRequest = try urlRequest.asURLRequest() guard let parameters else { return urlRequest } @@ -304,7 +304,7 @@ public struct JSONEncoding: ParameterEncoding { /// /// - Returns: The encoded `URLRequest`. /// - Throws: Any `Error` produced during encoding. - public func encode(_ urlRequest: URLRequestConvertible, withJSONObject jsonObject: Any? = nil) throws -> URLRequest { + public func encode(_ urlRequest: any URLRequestConvertible, withJSONObject jsonObject: Any? = nil) throws -> URLRequest { var urlRequest = try urlRequest.asURLRequest() guard let jsonObject else { return urlRequest } diff --git a/Source/Core/Request.swift b/Source/Core/Request.swift index e1df52e1b..3087ddac4 100644 --- a/Source/Core/Request.swift +++ b/Source/Core/Request.swift @@ -72,11 +72,11 @@ public class Request { /// The queue used for all serialization actions. By default it's a serial queue that targets `underlyingQueue`. public let serializationQueue: DispatchQueue /// `EventMonitor` used for event callbacks. - public let eventMonitor: EventMonitor? + public let eventMonitor: (any EventMonitor)? /// The `Request`'s interceptor. - public let interceptor: RequestInterceptor? + public let interceptor: (any RequestInterceptor)? /// The `Request`'s delegate. - public private(set) weak var delegate: RequestDelegate? + public private(set) weak var delegate: (any RequestDelegate)? // MARK: - Mutable State @@ -89,9 +89,9 @@ public class Request { /// `ProgressHandler` and `DispatchQueue` provided for download progress callbacks. var downloadProgressHandler: (handler: ProgressHandler, queue: DispatchQueue)? /// `RedirectHandler` provided for to handle request redirection. - var redirectHandler: RedirectHandler? + var redirectHandler: (any RedirectHandler)? /// `CachedResponseHandler` provided to handle response caching. - var cachedResponseHandler: CachedResponseHandler? + var cachedResponseHandler: (any CachedResponseHandler)? /// Queue and closure called when the `Request` is able to create a cURL description of itself. var cURLHandler: (queue: DispatchQueue, handler: (String) -> Void)? /// Queue and closure called when the `Request` creates a `URLRequest`. @@ -164,7 +164,7 @@ public class Request { // MARK: Redirect Handling /// `RedirectHandler` set on the instance. - public internal(set) var redirectHandler: RedirectHandler? { + public internal(set) var redirectHandler: (any RedirectHandler)? { get { mutableState.redirectHandler } set { mutableState.redirectHandler = newValue } } @@ -172,7 +172,7 @@ public class Request { // MARK: Cached Response Handling /// `CachedResponseHandler` set on the instance. - public internal(set) var cachedResponseHandler: CachedResponseHandler? { + public internal(set) var cachedResponseHandler: (any CachedResponseHandler)? { get { mutableState.cachedResponseHandler } set { mutableState.cachedResponseHandler = newValue } } @@ -259,9 +259,9 @@ public class Request { init(id: UUID = UUID(), underlyingQueue: DispatchQueue, serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { + eventMonitor: (any EventMonitor)?, + interceptor: (any RequestInterceptor)?, + delegate: any RequestDelegate) { self.id = id self.underlyingQueue = underlyingQueue self.serializationQueue = serializationQueue @@ -802,7 +802,7 @@ public class Request { /// /// - Returns: The instance. @discardableResult - public func redirect(using handler: RedirectHandler) -> Self { + public func redirect(using handler: any RedirectHandler) -> Self { mutableState.write { mutableState in precondition(mutableState.redirectHandler == nil, "Redirect handler has already been set.") mutableState.redirectHandler = handler @@ -821,7 +821,7 @@ public class Request { /// /// - Returns: The instance. @discardableResult - public func cacheResponse(using handler: CachedResponseHandler) -> Self { + public func cacheResponse(using handler: any CachedResponseHandler) -> Self { mutableState.write { mutableState in precondition(mutableState.cachedResponseHandler == nil, "Cached response handler has already been set.") mutableState.cachedResponseHandler = handler diff --git a/Source/Core/Response.swift b/Source/Core/Response.swift index 8a9f089ae..c88c78b87 100644 --- a/Source/Core/Response.swift +++ b/Source/Core/Response.swift @@ -159,8 +159,8 @@ extension DataResponse { /// /// - returns: A success or failure `DataResponse` depending on the result of the given closure. If this instance's /// result is a failure, returns the same failure. - public func tryMap(_ transform: (Success) throws -> NewSuccess) -> DataResponse { - DataResponse(request: request, + public func tryMap(_ transform: (Success) throws -> NewSuccess) -> DataResponse { + DataResponse(request: request, response: response, data: data, metrics: metrics, @@ -199,8 +199,8 @@ extension DataResponse { /// - Parameter transform: A throwing closure that takes the error of the instance. /// /// - Returns: A `DataResponse` instance containing the result of the transform. - public func tryMapError(_ transform: (Failure) throws -> NewFailure) -> DataResponse { - DataResponse(request: request, + public func tryMapError(_ transform: (Failure) throws -> NewFailure) -> DataResponse { + DataResponse(request: request, response: response, data: data, metrics: metrics, @@ -341,8 +341,8 @@ extension DownloadResponse { /// /// - returns: A success or failure `DownloadResponse` depending on the result of the given closure. If this /// instance's result is a failure, returns the same failure. - public func tryMap(_ transform: (Success) throws -> NewSuccess) -> DownloadResponse { - DownloadResponse(request: request, + public func tryMap(_ transform: (Success) throws -> NewSuccess) -> DownloadResponse { + DownloadResponse(request: request, response: response, fileURL: fileURL, resumeData: resumeData, @@ -383,8 +383,8 @@ extension DownloadResponse { /// - Parameter transform: A throwing closure that takes the error of the instance. /// /// - Returns: A `DownloadResponse` instance containing the result of the transform. - public func tryMapError(_ transform: (Failure) throws -> NewFailure) -> DownloadResponse { - DownloadResponse(request: request, + public func tryMapError(_ transform: (Failure) throws -> NewFailure) -> DownloadResponse { + DownloadResponse(request: request, response: response, fileURL: fileURL, resumeData: resumeData, diff --git a/Source/Core/Session.swift b/Source/Core/Session.swift index 45c95ee1f..726df048b 100644 --- a/Source/Core/Session.swift +++ b/Source/Core/Session.swift @@ -54,18 +54,18 @@ open class Session { public let serializationQueue: DispatchQueue /// `RequestInterceptor` used for all `Request` created by the instance. `RequestInterceptor`s can also be set on a /// per-`Request` basis, in which case the `Request`'s interceptor takes precedence over this value. - public let interceptor: RequestInterceptor? + public let interceptor: (any RequestInterceptor)? /// `ServerTrustManager` instance used to evaluate all trust challenges and provide certificate and key pinning. public let serverTrustManager: ServerTrustManager? /// `RedirectHandler` instance used to provide customization for request redirection. - public let redirectHandler: RedirectHandler? + public let redirectHandler: (any RedirectHandler)? /// `CachedResponseHandler` instance used to provide customization of cached response handling. - public let cachedResponseHandler: CachedResponseHandler? + public let cachedResponseHandler: (any CachedResponseHandler)? /// `CompositeEventMonitor` used to compose any passed `EventMonitor`s. public let eventMonitor: CompositeEventMonitor /// `EventMonitor`s included in all instances unless overwritten. `[AlamofireNotifications()]` by default. @available(*, deprecated, message: "Use [AlamofireNotifications()] directly.") - public let defaultEventMonitors: [EventMonitor] = [AlamofireNotifications()] + public let defaultEventMonitors: [any EventMonitor] = [AlamofireNotifications()] /// Internal map between `Request`s and any `URLSessionTasks` that may be in flight for them. var requestTaskMap = RequestTaskMap() @@ -111,10 +111,10 @@ open class Session { startRequestsImmediately: Bool = true, requestQueue: DispatchQueue? = nil, serializationQueue: DispatchQueue? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, serverTrustManager: ServerTrustManager? = nil, - redirectHandler: RedirectHandler? = nil, - cachedResponseHandler: CachedResponseHandler? = nil, + redirectHandler: (any RedirectHandler)? = nil, + cachedResponseHandler: (any CachedResponseHandler)? = nil, eventMonitors: [EventMonitor] = [AlamofireNotifications()]) { precondition(session.configuration.identifier == nil, "Alamofire does not support background URLSessionConfigurations.") @@ -175,10 +175,10 @@ open class Session { startRequestsImmediately: Bool = true, requestQueue: DispatchQueue? = nil, serializationQueue: DispatchQueue? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, serverTrustManager: ServerTrustManager? = nil, - redirectHandler: RedirectHandler? = nil, - cachedResponseHandler: CachedResponseHandler? = nil, + redirectHandler: (any RedirectHandler)? = nil, + cachedResponseHandler: (any CachedResponseHandler)? = nil, eventMonitors: [EventMonitor] = [AlamofireNotifications()]) { precondition(configuration.identifier == nil, "Alamofire does not support background URLSessionConfigurations.") @@ -247,10 +247,10 @@ open class Session { public typealias RequestModifier = (inout URLRequest) throws -> Void struct RequestConvertible: URLRequestConvertible { - let url: URLConvertible + let url: any URLConvertible let method: HTTPMethod let parameters: Parameters? - let encoding: ParameterEncoding + let encoding: any ParameterEncoding let headers: HTTPHeaders? let requestModifier: RequestModifier? @@ -277,12 +277,12 @@ open class Session { /// parameters. `nil` by default. /// /// - Returns: The created `DataRequest`. - open func request(_ convertible: URLConvertible, + open func request(_ convertible: any URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, + encoding: any ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataRequest { let convertible = RequestConvertible(url: convertible, method: method, @@ -295,10 +295,10 @@ open class Session { } struct RequestEncodableConvertible: URLRequestConvertible { - let url: URLConvertible + let url: any URLConvertible let method: HTTPMethod let parameters: Parameters? - let encoder: ParameterEncoder + let encoder: any ParameterEncoder let headers: HTTPHeaders? let requestModifier: RequestModifier? @@ -325,12 +325,12 @@ open class Session { /// the provided parameters. `nil` by default. /// /// - Returns: The created `DataRequest`. - open func request(_ convertible: URLConvertible, + open func request(_ convertible: any URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, + encoder: any ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataRequest { let convertible = RequestEncodableConvertible(url: convertible, method: method, @@ -349,7 +349,7 @@ open class Session { /// - interceptor: `RequestInterceptor` value to be used by the returned `DataRequest`. `nil` by default. /// /// - Returns: The created `DataRequest`. - open func request(_ convertible: URLRequestConvertible, interceptor: RequestInterceptor? = nil) -> DataRequest { + open func request(_ convertible: any URLRequestConvertible, interceptor: (any RequestInterceptor)? = nil) -> DataRequest { let request = DataRequest(convertible: convertible, underlyingQueue: rootQueue, serializationQueue: serializationQueue, @@ -382,13 +382,13 @@ open class Session { /// the provided parameters. `nil` by default. /// /// - Returns: The created `DataStream` request. - open func streamRequest(_ convertible: URLConvertible, + open func streamRequest(_ convertible: any URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, + encoder: any ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataStreamRequest { let convertible = RequestEncodableConvertible(url: convertible, method: method, @@ -416,11 +416,11 @@ open class Session { /// the provided parameters. `nil` by default. /// /// - Returns: The created `DataStream` request. - open func streamRequest(_ convertible: URLConvertible, + open func streamRequest(_ convertible: any URLConvertible, method: HTTPMethod = .get, headers: HTTPHeaders? = nil, automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataStreamRequest { let convertible = RequestEncodableConvertible(url: convertible, method: method, @@ -444,9 +444,9 @@ open class Session { /// by default. /// /// - Returns: The created `DataStreamRequest`. - open func streamRequest(_ convertible: URLRequestConvertible, + open func streamRequest(_ convertible: any URLRequestConvertible, automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil) -> DataStreamRequest { + interceptor: (any RequestInterceptor)? = nil) -> DataStreamRequest { let request = DataStreamRequest(convertible: convertible, automaticallyCancelOnStreamError: automaticallyCancelOnStreamError, underlyingQueue: rootQueue, @@ -463,10 +463,10 @@ open class Session { #if canImport(Darwin) && !canImport(FoundationNetworking) // Only Apple platforms support URLSessionWebSocketTask. @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) @_spi(WebSocket) open func webSocketRequest( - to url: URLConvertible, + to url: any URLConvertible, configuration: WebSocketRequest.Configuration = .default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil ) -> WebSocketRequest { webSocketRequest( @@ -482,12 +482,12 @@ open class Session { @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) @_spi(WebSocket) open func webSocketRequest( - to url: URLConvertible, + to url: any URLConvertible, configuration: WebSocketRequest.Configuration = .default, parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, + encoder: any ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil ) -> WebSocketRequest where Parameters: Encodable { let convertible = RequestEncodableConvertible(url: url, @@ -510,9 +510,9 @@ open class Session { } @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) - @_spi(WebSocket) open func webSocketRequest(performing convertible: URLRequestConvertible, + @_spi(WebSocket) open func webSocketRequest(performing convertible: any URLRequestConvertible, configuration: WebSocketRequest.Configuration = .default, - interceptor: RequestInterceptor? = nil) -> WebSocketRequest { + interceptor: (any RequestInterceptor)? = nil) -> WebSocketRequest { let request = WebSocketRequest(convertible: convertible, configuration: configuration, underlyingQueue: rootQueue, @@ -547,12 +547,12 @@ open class Session { /// should be moved. `nil` by default. /// /// - Returns: The created `DownloadRequest`. - open func download(_ convertible: URLConvertible, + open func download(_ convertible: any URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, + encoding: any ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { let convertible = RequestConvertible(url: convertible, @@ -582,12 +582,12 @@ open class Session { /// should be moved. `nil` by default. /// /// - Returns: The created `DownloadRequest`. - open func download(_ convertible: URLConvertible, + open func download(_ convertible: any URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, + encoder: any ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { let convertible = RequestEncodableConvertible(url: convertible, @@ -609,8 +609,8 @@ open class Session { /// should be moved. `nil` by default. /// /// - Returns: The created `DownloadRequest`. - open func download(_ convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, + open func download(_ convertible: any URLRequestConvertible, + interceptor: (any RequestInterceptor)? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { let request = DownloadRequest(downloadable: .request(convertible), underlyingQueue: rootQueue, @@ -644,7 +644,7 @@ open class Session { /// /// - Returns: The created `DownloadRequest`. open func download(resumingWith data: Data, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { let request = DownloadRequest(downloadable: .resumeData(data), underlyingQueue: rootQueue, @@ -662,7 +662,7 @@ open class Session { // MARK: - UploadRequest struct ParameterlessRequestConvertible: URLRequestConvertible { - let url: URLConvertible + let url: any URLConvertible let method: HTTPMethod let headers: HTTPHeaders? let requestModifier: RequestModifier? @@ -676,8 +676,8 @@ open class Session { } struct Upload: UploadConvertible { - let request: URLRequestConvertible - let uploadable: UploadableConvertible + let request: any URLRequestConvertible + let uploadable: any UploadableConvertible func createUploadable() throws -> UploadRequest.Uploadable { try uploadable.createUploadable() @@ -705,10 +705,10 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(_ data: Data, - to convertible: URLConvertible, + to convertible: any URLConvertible, method: HTTPMethod = .post, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default, requestModifier: RequestModifier? = nil) -> UploadRequest { let convertible = ParameterlessRequestConvertible(url: convertible, @@ -730,8 +730,8 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(_ data: Data, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, + with convertible: any URLRequestConvertible, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default) -> UploadRequest { upload(.data(data), with: convertible, interceptor: interceptor, fileManager: fileManager) } @@ -754,10 +754,10 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(_ fileURL: URL, - to convertible: URLConvertible, + to convertible: any URLConvertible, method: HTTPMethod = .post, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default, requestModifier: RequestModifier? = nil) -> UploadRequest { let convertible = ParameterlessRequestConvertible(url: convertible, @@ -780,8 +780,8 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(_ fileURL: URL, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, + with convertible: any URLRequestConvertible, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default) -> UploadRequest { upload(.file(fileURL, shouldRemove: false), with: convertible, interceptor: interceptor, fileManager: fileManager) } @@ -804,10 +804,10 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(_ stream: InputStream, - to convertible: URLConvertible, + to convertible: any URLConvertible, method: HTTPMethod = .post, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default, requestModifier: RequestModifier? = nil) -> UploadRequest { let convertible = ParameterlessRequestConvertible(url: convertible, @@ -830,8 +830,8 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(_ stream: InputStream, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor? = nil, + with convertible: any URLRequestConvertible, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default) -> UploadRequest { upload(.stream(stream), with: convertible, interceptor: interceptor, fileManager: fileManager) } @@ -870,11 +870,11 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(multipartFormData: @escaping (MultipartFormData) -> Void, - to url: URLConvertible, + to url: any URLConvertible, usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, method: HTTPMethod = .post, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default, requestModifier: RequestModifier? = nil) -> UploadRequest { let convertible = ParameterlessRequestConvertible(url: url, @@ -920,9 +920,9 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(multipartFormData: @escaping (MultipartFormData) -> Void, - with request: URLRequestConvertible, + with request: any URLRequestConvertible, usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default) -> UploadRequest { let formData = MultipartFormData(fileManager: fileManager) multipartFormData(formData) @@ -966,11 +966,11 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(multipartFormData: MultipartFormData, - to url: URLConvertible, + to url: any URLConvertible, usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, method: HTTPMethod = .post, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default, requestModifier: RequestModifier? = nil) -> UploadRequest { let convertible = ParameterlessRequestConvertible(url: url, @@ -1013,9 +1013,9 @@ open class Session { /// /// - Returns: The created `UploadRequest`. open func upload(multipartFormData: MultipartFormData, - with request: URLRequestConvertible, + with request: any URLRequestConvertible, usingThreshold encodingMemoryThreshold: UInt64 = MultipartFormData.encodingMemoryThreshold, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default) -> UploadRequest { let multipartUpload = MultipartUpload(encodingMemoryThreshold: encodingMemoryThreshold, request: request, @@ -1029,15 +1029,15 @@ open class Session { // MARK: Uploadable func upload(_ uploadable: UploadRequest.Uploadable, - with convertible: URLRequestConvertible, - interceptor: RequestInterceptor?, + with convertible: any URLRequestConvertible, + interceptor: (any RequestInterceptor)?, fileManager: FileManager) -> UploadRequest { let uploadable = Upload(request: convertible, uploadable: uploadable) return upload(uploadable, interceptor: interceptor, fileManager: fileManager) } - func upload(_ upload: UploadConvertible, interceptor: RequestInterceptor?, fileManager: FileManager) -> UploadRequest { + func upload(_ upload: any UploadConvertible, interceptor: (any RequestInterceptor)?, fileManager: FileManager) -> UploadRequest { let request = UploadRequest(convertible: upload, underlyingQueue: rootQueue, serializationQueue: serializationQueue, @@ -1133,7 +1133,7 @@ open class Session { } func performSetupOperations(for request: Request, - convertible: URLRequestConvertible, + convertible: any URLRequestConvertible, shouldCreateTask: @escaping () -> Bool = { true }) { dispatchPrecondition(condition: .onQueue(requestQueue)) @@ -1228,7 +1228,7 @@ open class Session { // MARK: - Adapters and Retriers - func adapter(for request: Request) -> RequestAdapter? { + func adapter(for request: Request) -> (any RequestAdapter)? { if let requestInterceptor = request.interceptor, let sessionInterceptor = interceptor { return Interceptor(adapters: [requestInterceptor, sessionInterceptor]) } else { @@ -1236,7 +1236,7 @@ open class Session { } } - func retrier(for request: Request) -> RequestRetrier? { + func retrier(for request: Request) -> (any RequestRetrier)? { if let requestInterceptor = request.interceptor, let sessionInterceptor = interceptor { return Interceptor(retriers: [requestInterceptor, sessionInterceptor]) } else { @@ -1341,7 +1341,7 @@ extension Session: SessionStateProvider { session.configuration.urlCredentialStorage?.defaultCredential(for: protectionSpace) } - func cancelRequestsForSessionInvalidation(with error: Error?) { + func cancelRequestsForSessionInvalidation(with error: (any Error)?) { dispatchPrecondition(condition: .onQueue(rootQueue)) requestTaskMap.requests.forEach { $0.finish(error: AFError.sessionInvalidated(error: error)) } diff --git a/Source/Core/SessionDelegate.swift b/Source/Core/SessionDelegate.swift index de0fcbb79..89c9a89a0 100644 --- a/Source/Core/SessionDelegate.swift +++ b/Source/Core/SessionDelegate.swift @@ -28,8 +28,8 @@ import Foundation open class SessionDelegate: NSObject { private let fileManager: FileManager - weak var stateProvider: SessionStateProvider? - var eventMonitor: EventMonitor? + weak var stateProvider: (any SessionStateProvider)? + var eventMonitor: (any EventMonitor)? /// Creates an instance from the given `FileManager`. /// @@ -57,20 +57,20 @@ open class SessionDelegate: NSObject { /// Type which provides various `Session` state values. protocol SessionStateProvider: AnyObject { var serverTrustManager: ServerTrustManager? { get } - var redirectHandler: RedirectHandler? { get } - var cachedResponseHandler: CachedResponseHandler? { get } + var redirectHandler: (any RedirectHandler)? { get } + var cachedResponseHandler: (any CachedResponseHandler)? { get } func request(for task: URLSessionTask) -> Request? func didGatherMetricsForTask(_ task: URLSessionTask) func didCompleteTask(_ task: URLSessionTask, completion: @escaping () -> Void) func credential(for task: URLSessionTask, in protectionSpace: URLProtectionSpace) -> URLCredential? - func cancelRequestsForSessionInvalidation(with error: Error?) + func cancelRequestsForSessionInvalidation(with error: (any Error)?) } // MARK: URLSessionDelegate extension SessionDelegate: URLSessionDelegate { - open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { + open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: (any Error)?) { eventMonitor?.urlSession(session, didBecomeInvalidWithError: error) stateProvider?.cancelRequestsForSessionInvalidation(with: error) @@ -211,7 +211,7 @@ extension SessionDelegate: URLSessionTaskDelegate { stateProvider?.didGatherMetricsForTask(task) } - open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) { // NSLog("URLSession: \(session), task: \(task), didCompleteWithError: \(error)") eventMonitor?.urlSession(session, task: task, didCompleteWithError: error) diff --git a/Source/Core/URLConvertible+URLRequestConvertible.swift b/Source/Core/URLConvertible+URLRequestConvertible.swift index 4f3e6ec2d..528f9306b 100644 --- a/Source/Core/URLConvertible+URLRequestConvertible.swift +++ b/Source/Core/URLConvertible+URLRequestConvertible.swift @@ -94,7 +94,7 @@ extension URLRequest { /// - method: The `HTTPMethod`. /// - headers: The `HTTPHeaders`, `nil` by default. /// - Throws: Any error thrown while converting the `URLConvertible` to a `URL`. - public init(url: URLConvertible, method: HTTPMethod, headers: HTTPHeaders? = nil) throws { + public init(url: any URLConvertible, method: HTTPMethod, headers: HTTPHeaders? = nil) throws { let url = try url.asURL() self.init(url: url) diff --git a/Source/Core/UploadRequest.swift b/Source/Core/UploadRequest.swift index 854373b52..c8f023d5e 100644 --- a/Source/Core/UploadRequest.swift +++ b/Source/Core/UploadRequest.swift @@ -40,7 +40,7 @@ public final class UploadRequest: DataRequest { // MARK: Initial State /// The `UploadableConvertible` value used to produce the `Uploadable` value for this instance. - public let upload: UploadableConvertible + public let upload: any UploadableConvertible /// `FileManager` used to perform cleanup tasks, including the removal of multipart form encoded payloads written /// to disk. @@ -65,13 +65,13 @@ public final class UploadRequest: DataRequest { /// encoded payloads written to disk. /// - delegate: `RequestDelegate` that provides an interface to actions not performed by the `Request`. init(id: UUID = UUID(), - convertible: UploadConvertible, + convertible: any UploadConvertible, underlyingQueue: DispatchQueue, serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, + eventMonitor: (any EventMonitor)?, + interceptor: (any RequestInterceptor)?, fileManager: FileManager, - delegate: RequestDelegate) { + delegate: any RequestDelegate) { upload = convertible self.fileManager = fileManager diff --git a/Source/Core/WebSocketRequest.swift b/Source/Core/WebSocketRequest.swift index 12b6c7085..fa8d23d24 100644 --- a/Source/Core/WebSocketRequest.swift +++ b/Source/Core/WebSocketRequest.swift @@ -125,7 +125,7 @@ import Foundation /// Received a pong with the associated state. case pong(Pong) /// Received an error. - case error(Error) + case error(any Error) /// Did not send the ping, the request is cancelled or suspended. case unsent } @@ -133,7 +133,7 @@ import Foundation struct SocketMutableState { var enqueuedSends: [(message: URLSessionWebSocketTask.Message, queue: DispatchQueue, - completionHandler: (Result) -> Void)] = [] + completionHandler: (Result) -> Void)] = [] var handlers: [(queue: DispatchQueue, handler: (_ event: IncomingEvent) -> Void)] = [] var pingTimerItem: DispatchWorkItem? } @@ -144,17 +144,17 @@ import Foundation task as? URLSessionWebSocketTask } - public let convertible: URLRequestConvertible + public let convertible: any URLRequestConvertible public let configuration: Configuration init(id: UUID = UUID(), - convertible: URLRequestConvertible, + convertible: any URLRequestConvertible, configuration: Configuration, underlyingQueue: DispatchQueue, serializationQueue: DispatchQueue, - eventMonitor: EventMonitor?, - interceptor: RequestInterceptor?, - delegate: RequestDelegate) { + eventMonitor: (any EventMonitor)?, + interceptor: (any RequestInterceptor)?, + delegate: any RequestDelegate) { self.convertible = convertible self.configuration = configuration @@ -376,7 +376,7 @@ import Foundation _ serializer: Serializer, on queue: DispatchQueue = .main, handler: @escaping (_ event: Event) -> Void - ) -> Self where Serializer: WebSocketMessageSerializer, Serializer.Failure == Error { + ) -> Self where Serializer: WebSocketMessageSerializer, Serializer.Failure == any Error { forIncomingEvent(on: queue) { incomingEvent in let event: Event switch incomingEvent { @@ -403,8 +403,8 @@ import Foundation public func streamDecodableEvents( _ type: Value.Type = Value.self, on queue: DispatchQueue = .main, - using decoder: DataDecoder = JSONDecoder(), - handler: @escaping (_ event: Event) -> Void + using decoder: any DataDecoder = JSONDecoder(), + handler: @escaping (_ event: Event) -> Void ) -> Self where Value: Decodable { streamSerializer(DecodableWebSocketMessageDecoder(decoder: decoder), on: queue, handler: handler) } @@ -413,7 +413,7 @@ import Foundation public func streamDecodable( _ type: Value.Type = Value.self, on queue: DispatchQueue = .main, - using decoder: DataDecoder = JSONDecoder(), + using decoder: any DataDecoder = JSONDecoder(), handler: @escaping (_ value: Value) -> Void ) -> Self where Value: Decodable { streamDecodableEvents(Value.self, on: queue) { event in @@ -478,7 +478,7 @@ import Foundation public func send(_ message: URLSessionWebSocketTask.Message, queue: DispatchQueue = .main, - completionHandler: @escaping (Result) -> Void) { + completionHandler: @escaping (Result) -> Void) { guard !(isCancelled || isFinished) else { return } guard let socket else { @@ -532,13 +532,13 @@ struct PassthroughWebSocketMessageDecoder: WebSocketMessageSerializer { @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) public struct DecodableWebSocketMessageDecoder: WebSocketMessageSerializer { public enum Error: Swift.Error { - case decoding(Swift.Error) + case decoding(any Swift.Error) case unknownMessage(description: String) } - public let decoder: DataDecoder + public let decoder: any DataDecoder - public init(decoder: DataDecoder) { + public init(decoder: any DataDecoder) { self.decoder = decoder } diff --git a/Source/Extensions/Result+Alamofire.swift b/Source/Extensions/Result+Alamofire.swift index 0a28a69d6..4444db49d 100644 --- a/Source/Extensions/Result+Alamofire.swift +++ b/Source/Extensions/Result+Alamofire.swift @@ -79,7 +79,7 @@ extension Result { /// /// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the /// same failure. - func tryMap(_ transform: (Success) throws -> NewSuccess) -> Result { + func tryMap(_ transform: (Success) throws -> NewSuccess) -> Result { switch self { case let .success(value): do { @@ -105,7 +105,7 @@ extension Result { /// /// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns /// the same success. - func tryMapError(_ transform: (Failure) throws -> NewFailure) -> Result { + func tryMapError(_ transform: (Failure) throws -> NewFailure) -> Result { switch self { case let .failure(error): do { diff --git a/Source/Features/AuthenticationInterceptor.swift b/Source/Features/AuthenticationInterceptor.swift index 230f652c9..2f80d426a 100644 --- a/Source/Features/AuthenticationInterceptor.swift +++ b/Source/Features/AuthenticationInterceptor.swift @@ -81,7 +81,7 @@ public protocol Authenticator: AnyObject { /// - credential: The `Credential` to refresh. /// - session: The `Session` requiring the refresh. /// - completion: The closure to be executed once the refresh is complete. - func refresh(_ credential: Credential, for session: Session, completion: @escaping (Result) -> Void) + func refresh(_ credential: Credential, for session: Session, completion: @escaping (Result) -> Void) /// Determines whether the `URLRequest` failed due to an authentication error based on the `HTTPURLResponse`. /// @@ -106,7 +106,7 @@ public protocol Authenticator: AnyObject { /// - error: The `Error`. /// /// - Returns: `true` if the `URLRequest` failed due to an authentication error, `false` otherwise. - func didRequest(_ urlRequest: URLRequest, with response: HTTPURLResponse, failDueToAuthenticationError error: Error) -> Bool + func didRequest(_ urlRequest: URLRequest, with response: HTTPURLResponse, failDueToAuthenticationError error: any Error) -> Bool /// Determines whether the `URLRequest` is authenticated with the `Credential`. /// @@ -193,7 +193,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh private struct AdaptOperation { let urlRequest: URLRequest let session: Session - let completion: (Result) -> Void + let completion: (Result) -> Void } private enum AdaptResult { @@ -246,7 +246,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh // MARK: Adapt - public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { let adaptResult: AdaptResult = mutableState.write { mutableState in // Queue the adapt operation if a refresh is already in place. guard !mutableState.isRefreshing else { @@ -289,7 +289,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh // MARK: Retry - public func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + public func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { // Do not attempt retry if there was not an original request and response from the server. guard let urlRequest = request.request, let response = request.response else { completion(.doNotRetry) @@ -384,7 +384,7 @@ public class AuthenticationInterceptor: RequestInterceptor wh } } - private func handleRefreshFailure(_ error: Error, insideLock mutableState: inout MutableState) { + private func handleRefreshFailure(_ error: any Error, insideLock mutableState: inout MutableState) { let adaptOperations = mutableState.adaptOperations let requestsToRetry = mutableState.requestsToRetry diff --git a/Source/Features/Combine.swift b/Source/Features/Combine.swift index 79fce0de2..224f25f77 100644 --- a/Source/Features/Combine.swift +++ b/Source/Features/Combine.swift @@ -158,7 +158,7 @@ extension DataRequest { /// - Returns: The `DataResponsePublisher`. @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishData(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + preprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { publishResponse(using: DataResponseSerializer(dataPreprocessor: preprocessor, @@ -185,7 +185,7 @@ extension DataRequest { /// - Returns: The `DataResponsePublisher`. @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishString(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + preprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { @@ -201,8 +201,8 @@ extension DataRequest { @available(*, deprecated, message: "Renamed publishDecodable(type:queue:preprocessor:decoder:emptyResponseCodes:emptyRequestMethods).") public func publishDecodable(type: T.Type = T.self, queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + preprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, @@ -231,8 +231,8 @@ extension DataRequest { @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishDecodable(type: T.Type = T.self, queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + preprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataResponsePublisher { publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, @@ -390,8 +390,8 @@ extension DataStreamRequest { @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishDecodable(type: T.Type = T.self, queue: DispatchQueue = .main, - decoder: DataDecoder = JSONDecoder(), - preprocessor: DataPreprocessor = PassthroughPreprocessor()) -> DataStreamPublisher { + decoder: any DataDecoder = JSONDecoder(), + preprocessor: any DataPreprocessor = PassthroughPreprocessor()) -> DataStreamPublisher { publishStream(using: DecodableStreamSerializer(decoder: decoder, dataPreprocessor: preprocessor), on: queue) @@ -543,7 +543,7 @@ extension DownloadRequest { /// - Returns: The `DownloadResponsePublisher`. @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishData(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + preprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { publishResponse(using: DataResponseSerializer(dataPreprocessor: preprocessor, @@ -570,7 +570,7 @@ extension DownloadRequest { /// - Returns: The `DownloadResponsePublisher`. @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishString(queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + preprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { @@ -586,8 +586,8 @@ extension DownloadRequest { @available(*, deprecated, message: "Renamed publishDecodable(type:queue:preprocessor:decoder:emptyResponseCodes:emptyRequestMethods).") public func publishDecodable(type: T.Type = T.self, queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + preprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyResponseMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, @@ -615,8 +615,8 @@ extension DownloadRequest { @available(macOS 10.15, iOS 13, watchOS 6, tvOS 13, *) public func publishDecodable(type: T.Type = T.self, queue: DispatchQueue = .main, - preprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + preprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadResponsePublisher { publishResponse(using: DecodableResponseSerializer(dataPreprocessor: preprocessor, diff --git a/Source/Features/Concurrency.swift b/Source/Features/Concurrency.swift index 42eff7f23..4e33349bd 100644 --- a/Source/Features/Concurrency.swift +++ b/Source/Features/Concurrency.swift @@ -243,7 +243,7 @@ extension DataRequest { /// /// - Returns: The `DataTask`. public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataTask { serializingResponse(using: DataResponseSerializer(dataPreprocessor: dataPreprocessor, @@ -268,8 +268,8 @@ extension DataRequest { /// - Returns: The `DataTask`. public func serializingDecodable(_ type: Value.Type = Value.self, automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + dataPreprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DataTask { serializingResponse(using: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, @@ -295,7 +295,7 @@ extension DataRequest { /// /// - Returns: The `DataTask`. public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DataTask { @@ -436,7 +436,7 @@ extension DownloadRequest { /// /// - Returns: The `DownloadTask`. public func serializingData(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { serializingDownload(using: DataResponseSerializer(dataPreprocessor: dataPreprocessor, @@ -463,8 +463,8 @@ extension DownloadRequest { /// - Returns: The `DownloadTask`. public func serializingDecodable(_ type: Value.Type = Value.self, automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + dataPreprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { serializingDownload(using: DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, @@ -503,7 +503,7 @@ extension DownloadRequest { /// /// - Returns: The `DownloadTask`. public func serializingString(automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + dataPreprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> DownloadTask { @@ -795,9 +795,9 @@ extension DataStreamRequest { public func streamingDecodableEvents( _ type: Value.Type = Value.self, automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - using decoder: DataDecoder = JSONDecoder(), - bufferingPolicy: EventStreamOf.BufferingPolicy = .unbounded - ) -> EventStreamOf { + using decoder: any DataDecoder = JSONDecoder(), + bufferingPolicy: EventStreamOf.BufferingPolicy = .unbounded + ) -> EventStreamOf { createStream(automaticallyCancelling: shouldAutomaticallyCancel, bufferingPolicy: bufferingPolicy, transform: { $0 }) { onEvent in @@ -811,7 +811,7 @@ extension DataStreamRequest { public func streamingDecodable( _ type: Value.Type = Value.self, automaticallyCancelling shouldAutomaticallyCancel: Bool = true, - using decoder: DataDecoder = JSONDecoder(), + using decoder: any DataDecoder = JSONDecoder(), bufferingPolicy: StreamOf.BufferingPolicy = .unbounded ) -> StreamOf { createStream(automaticallyCancelling: shouldAutomaticallyCancel, diff --git a/Source/Features/EventMonitor.swift b/Source/Features/EventMonitor.swift index 43d1b9e80..dc7f31523 100644 --- a/Source/Features/EventMonitor.swift +++ b/Source/Features/EventMonitor.swift @@ -35,7 +35,7 @@ public protocol EventMonitor { // MARK: URLSessionDelegate Events /// Event called during `URLSessionDelegate`'s `urlSession(_:didBecomeInvalidWithError:)` method. - func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) + func urlSession(_ session: URLSession, didBecomeInvalidWithError error: (any Error)?) // MARK: URLSessionTaskDelegate Events @@ -62,7 +62,7 @@ public protocol EventMonitor { func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:task:didCompleteWithError:)` method. - func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) + func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) /// Event called during `URLSessionTaskDelegate`'s `urlSession(_:taskIsWaitingForConnectivity:)` method. func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) @@ -228,7 +228,7 @@ extension EventMonitor { // MARK: Default Implementations - public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) {} + public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: (any Error)?) {} public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge) {} @@ -245,7 +245,7 @@ extension EventMonitor { public func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) {} - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {} + public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) {} public func urlSession(_ session: URLSession, taskIsWaitingForConnectivity task: URLSessionTask) {} public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse) {} public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {} @@ -315,13 +315,13 @@ extension EventMonitor { public final class CompositeEventMonitor: EventMonitor { public let queue = DispatchQueue(label: "org.alamofire.compositeEventMonitor") - let monitors: Protected<[EventMonitor]> + let monitors: Protected<[any EventMonitor]> - init(monitors: [EventMonitor]) { + init(monitors: [any EventMonitor]) { self.monitors = Protected(monitors) } - func performEvent(_ event: @escaping (EventMonitor) -> Void) { + func performEvent(_ event: @escaping (any EventMonitor) -> Void) { queue.async { self.monitors.read { monitors in for monitor in monitors { @@ -331,7 +331,7 @@ public final class CompositeEventMonitor: EventMonitor { } } - public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { + public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: (any Error)?) { performEvent { $0.urlSession(session, didBecomeInvalidWithError: error) } } @@ -377,7 +377,7 @@ public final class CompositeEventMonitor: EventMonitor { performEvent { $0.urlSession(session, task: task, didFinishCollecting: metrics) } } - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) { performEvent { $0.urlSession(session, task: task, didCompleteWithError: error) } } @@ -580,7 +580,7 @@ public final class CompositeEventMonitor: EventMonitor { /// `EventMonitor` that allows optional closures to be set to receive events. open class ClosureEventMonitor: EventMonitor { /// Closure called on the `urlSession(_:didBecomeInvalidWithError:)` event. - open var sessionDidBecomeInvalidWithError: ((URLSession, Error?) -> Void)? + open var sessionDidBecomeInvalidWithError: ((URLSession, (any Error)?) -> Void)? /// Closure called on the `urlSession(_:task:didReceive:completionHandler:)`. open var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> Void)? @@ -598,7 +598,7 @@ open class ClosureEventMonitor: EventMonitor { open var taskDidFinishCollectingMetrics: ((URLSession, URLSessionTask, URLSessionTaskMetrics) -> Void)? /// Closure called on the `urlSession(_:task:didCompleteWithError:)` event. - open var taskDidComplete: ((URLSession, URLSessionTask, Error?) -> Void)? + open var taskDidComplete: ((URLSession, URLSessionTask, (any Error)?) -> Void)? /// Closure called on the `urlSession(_:taskIsWaitingForConnectivity:)` event. open var taskIsWaitingForConnectivity: ((URLSession, URLSessionTask) -> Void)? @@ -714,7 +714,7 @@ open class ClosureEventMonitor: EventMonitor { self.queue = queue } - open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { + open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: (any Error)?) { sessionDidBecomeInvalidWithError?(session, error) } @@ -745,7 +745,7 @@ open class ClosureEventMonitor: EventMonitor { taskDidFinishCollectingMetrics?(session, task, metrics) } - open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) { taskDidComplete?(session, task, error) } diff --git a/Source/Features/MultipartUpload.swift b/Source/Features/MultipartUpload.swift index ae905bda4..a84d89bca 100644 --- a/Source/Features/MultipartUpload.swift +++ b/Source/Features/MultipartUpload.swift @@ -31,11 +31,11 @@ final class MultipartUpload { private let multipartFormData: Protected let encodingMemoryThreshold: UInt64 - let request: URLRequestConvertible + let request: any URLRequestConvertible let fileManager: FileManager init(encodingMemoryThreshold: UInt64, - request: URLRequestConvertible, + request: any URLRequestConvertible, multipartFormData: MultipartFormData) { self.encodingMemoryThreshold = encodingMemoryThreshold self.request = request diff --git a/Source/Features/RequestCompression.swift b/Source/Features/RequestCompression.swift index 1f8489086..149dc7fab 100644 --- a/Source/Features/RequestCompression.swift +++ b/Source/Features/RequestCompression.swift @@ -67,7 +67,7 @@ public struct DeflateRequestCompressor: RequestInterceptor { self.shouldCompressBodyData = shouldCompressBodyData } - public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { // No need to compress unless we have body data. No support for compressing streams. guard let bodyData = urlRequest.httpBody else { completion(.success(urlRequest)) diff --git a/Source/Features/RequestInterceptor.swift b/Source/Features/RequestInterceptor.swift index 9acd98602..86f3e12a7 100644 --- a/Source/Features/RequestInterceptor.swift +++ b/Source/Features/RequestInterceptor.swift @@ -43,7 +43,7 @@ public protocol RequestAdapter { /// - urlRequest: The `URLRequest` to adapt. /// - session: The `Session` that will execute the `URLRequest`. /// - completion: The completion handler that must be called when adaptation is complete. - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) /// Inspects and adapts the specified `URLRequest` in some manner and calls the completion handler with the Result. /// @@ -51,11 +51,11 @@ public protocol RequestAdapter { /// - urlRequest: The `URLRequest` to adapt. /// - state: The `RequestAdapterState` associated with the `URLRequest`. /// - completion: The completion handler that must be called when adaptation is complete. - func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) + func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) } extension RequestAdapter { - public func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + public func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { adapt(urlRequest, for: state.session, completion: completion) } } @@ -71,7 +71,7 @@ public enum RetryResult { /// Do not retry. case doNotRetry /// Do not retry due to the associated `Error`. - case doNotRetryWithError(Error) + case doNotRetryWithError(any Error) } extension RetryResult { @@ -89,7 +89,7 @@ extension RetryResult { } } - var error: Error? { + var error: (any Error)? { guard case let .doNotRetryWithError(error) = self else { return nil } return error } @@ -109,7 +109,7 @@ public protocol RequestRetrier { /// - session: `Session` that produced the `Request`. /// - error: `Error` encountered while executing the `Request`. /// - completion: Completion closure to be executed when a retry decision has been determined. - func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) + func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) } // MARK: - @@ -118,22 +118,22 @@ public protocol RequestRetrier { public protocol RequestInterceptor: RequestAdapter, RequestRetrier {} extension RequestInterceptor { - public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + public func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { completion(.success(urlRequest)) } public func retry(_ request: Request, for session: Session, - dueTo error: Error, + dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { completion(.doNotRetry) } } /// `RequestAdapter` closure definition. -public typealias AdaptHandler = (URLRequest, Session, _ completion: @escaping (Result) -> Void) -> Void +public typealias AdaptHandler = (URLRequest, Session, _ completion: @escaping (Result) -> Void) -> Void /// `RequestRetrier` closure definition. -public typealias RetryHandler = (Request, Session, Error, _ completion: @escaping (RetryResult) -> Void) -> Void +public typealias RetryHandler = (Request, Session, any Error, _ completion: @escaping (RetryResult) -> Void) -> Void // MARK: - @@ -148,11 +148,11 @@ open class Adapter: RequestInterceptor { self.adaptHandler = adaptHandler } - open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { adaptHandler(urlRequest, session, completion) } - open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { adaptHandler(urlRequest, state.session, completion) } } @@ -182,7 +182,7 @@ open class Retrier: RequestInterceptor { open func retry(_ request: Request, for session: Session, - dueTo error: Error, + dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { retryHandler(request, session, error, completion) } @@ -203,9 +203,9 @@ extension RequestRetrier where Self == Retrier { /// `RequestInterceptor` which can use multiple `RequestAdapter` and `RequestRetrier` values. open class Interceptor: RequestInterceptor { /// All `RequestAdapter`s associated with the instance. These adapters will be run until one fails. - public let adapters: [RequestAdapter] + public let adapters: [any RequestAdapter] /// All `RequestRetrier`s associated with the instance. These retriers will be run one at a time until one triggers retry. - public let retriers: [RequestRetrier] + public let retriers: [any RequestRetrier] /// Creates an instance from `AdaptHandler` and `RetryHandler` closures. /// @@ -222,7 +222,7 @@ open class Interceptor: RequestInterceptor { /// - Parameters: /// - adapter: `RequestAdapter` value to be used. /// - retrier: `RequestRetrier` value to be used. - public init(adapter: RequestAdapter, retrier: RequestRetrier) { + public init(adapter: any RequestAdapter, retrier: any RequestRetrier) { adapters = [adapter] retriers = [retrier] } @@ -233,19 +233,19 @@ open class Interceptor: RequestInterceptor { /// - adapters: `RequestAdapter` values to be used. /// - retriers: `RequestRetrier` values to be used. /// - interceptors: `RequestInterceptor`s to be used. - public init(adapters: [RequestAdapter] = [], retriers: [RequestRetrier] = [], interceptors: [RequestInterceptor] = []) { + public init(adapters: [any RequestAdapter] = [], retriers: [any RequestRetrier] = [], interceptors: [any RequestInterceptor] = []) { self.adapters = adapters + interceptors self.retriers = retriers + interceptors } - open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + open func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { adapt(urlRequest, for: session, using: adapters, completion: completion) } private func adapt(_ urlRequest: URLRequest, for session: Session, - using adapters: [RequestAdapter], - completion: @escaping (Result) -> Void) { + using adapters: [any RequestAdapter], + completion: @escaping (Result) -> Void) { var pendingAdapters = adapters guard !pendingAdapters.isEmpty else { completion(.success(urlRequest)); return } @@ -262,14 +262,14 @@ open class Interceptor: RequestInterceptor { } } - open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + open func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { adapt(urlRequest, using: state, adapters: adapters, completion: completion) } private func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, - adapters: [RequestAdapter], - completion: @escaping (Result) -> Void) { + adapters: [any RequestAdapter], + completion: @escaping (Result) -> Void) { var pendingAdapters = adapters guard !pendingAdapters.isEmpty else { completion(.success(urlRequest)); return } @@ -288,15 +288,15 @@ open class Interceptor: RequestInterceptor { open func retry(_ request: Request, for session: Session, - dueTo error: Error, + dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { retry(request, for: session, dueTo: error, using: retriers, completion: completion) } private func retry(_ request: Request, for session: Session, - dueTo error: Error, - using retriers: [RequestRetrier], + dueTo error: any Error, + using retriers: [any RequestRetrier], completion: @escaping (RetryResult) -> Void) { var pendingRetriers = retriers @@ -332,7 +332,7 @@ extension RequestInterceptor where Self == Interceptor { /// - adapter: `RequestAdapter` to use to adapt the request /// - retrier: `RequestRetrier` to use to retry the request. /// - Returns: The `Interceptor`. - public static func interceptor(adapter: RequestAdapter, retrier: RequestRetrier) -> Interceptor { + public static func interceptor(adapter: any RequestAdapter, retrier: any RequestRetrier) -> Interceptor { Interceptor(adapter: adapter, retrier: retrier) } @@ -343,9 +343,9 @@ extension RequestInterceptor where Self == Interceptor { /// a retry is triggered. /// - interceptors: `RequestInterceptor`s to use to intercept the request. /// - Returns: The `Interceptor`. - public static func interceptor(adapters: [RequestAdapter] = [], - retriers: [RequestRetrier] = [], - interceptors: [RequestInterceptor] = []) -> Interceptor { + public static func interceptor(adapters: [any RequestAdapter] = [], + retriers: [any RequestRetrier] = [], + interceptors: [any RequestInterceptor] = []) -> Interceptor { Interceptor(adapters: adapters, retriers: retriers, interceptors: interceptors) } } diff --git a/Source/Features/ResponseSerialization.swift b/Source/Features/ResponseSerialization.swift index b765bdb62..a34592ff8 100644 --- a/Source/Features/ResponseSerialization.swift +++ b/Source/Features/ResponseSerialization.swift @@ -39,7 +39,7 @@ public protocol DataResponseSerializerProtocol { /// /// - Returns: The `SerializedObject`. /// - Throws: Any `Error` produced during serialization. - func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> SerializedObject + func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: (any Error)?) throws -> SerializedObject } /// The type to which all download response serializers must conform in order to serialize a response. @@ -57,13 +57,13 @@ public protocol DownloadResponseSerializerProtocol { /// /// - Returns: The `SerializedObject`. /// - Throws: Any `Error` produced during serialization. - func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, error: Error?) throws -> SerializedObject + func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, error: (any Error)?) throws -> SerializedObject } /// A serializer that can handle both data and download responses. public protocol ResponseSerializer: DataResponseSerializerProtocol & DownloadResponseSerializerProtocol { /// `DataPreprocessor` used to prepare incoming `Data` for serialization. - var dataPreprocessor: DataPreprocessor { get } + var dataPreprocessor: any DataPreprocessor { get } /// `HTTPMethod`s for which empty response bodies are considered appropriate. var emptyRequestMethods: Set { get } /// HTTP response codes for which empty response bodies are considered appropriate. @@ -107,13 +107,13 @@ extension DataPreprocessor where Self == GoogleXSSIPreprocessor { extension ResponseSerializer { /// Default `DataPreprocessor`. `PassthroughPreprocessor` by default. - public static var defaultDataPreprocessor: DataPreprocessor { PassthroughPreprocessor() } + public static var defaultDataPreprocessor: any DataPreprocessor { PassthroughPreprocessor() } /// Default `HTTPMethod`s for which empty response bodies are always considered appropriate. `[.head]` by default. public static var defaultEmptyRequestMethods: Set { [.head] } /// HTTP response codes for which empty response bodies are always considered appropriate. `[204, 205]` by default. public static var defaultEmptyResponseCodes: Set { [204, 205] } - public var dataPreprocessor: DataPreprocessor { Self.defaultDataPreprocessor } + public var dataPreprocessor: any DataPreprocessor { Self.defaultDataPreprocessor } public var emptyRequestMethods: Set { Self.defaultEmptyRequestMethods } public var emptyResponseCodes: Set { Self.defaultEmptyResponseCodes } @@ -153,7 +153,7 @@ extension ResponseSerializer { /// By default, any serializer declared to conform to both types will get file serialization for free, as it just feeds /// the data read from disk into the data response serializer. extension DownloadResponseSerializerProtocol where Self: DataResponseSerializerProtocol { - public func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, error: Error?) throws -> Self.SerializedObject { + public func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, error: (any Error)?) throws -> Self.SerializedObject { guard error == nil else { throw error! } guard let fileURL else { @@ -186,7 +186,7 @@ public struct URLResponseSerializer: DownloadResponseSerializerProtocol { public func serializeDownload(request: URLRequest?, response: HTTPURLResponse?, fileURL: URL?, - error: Error?) throws -> URL { + error: (any Error)?) throws -> URL { guard error == nil else { throw error! } guard let url = fileURL else { @@ -208,7 +208,7 @@ extension DownloadResponseSerializerProtocol where Self == URLResponseSerializer /// request returning `nil` or no data is considered an error. However, if the request has an `HTTPMethod` or the /// response has an HTTP status code valid for empty responses, then an empty `Data` value is returned. public final class DataResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor + public let dataPreprocessor: any DataPreprocessor public let emptyResponseCodes: Set public let emptyRequestMethods: Set @@ -218,7 +218,7 @@ public final class DataResponseSerializer: ResponseSerializer { /// - dataPreprocessor: `DataPreprocessor` used to prepare the received `Data` for serialization. /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - public init(dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + public init(dataPreprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) { self.dataPreprocessor = dataPreprocessor @@ -226,7 +226,7 @@ public final class DataResponseSerializer: ResponseSerializer { self.emptyRequestMethods = emptyRequestMethods } - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> Data { + public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: (any Error)?) throws -> Data { guard error == nil else { throw error! } guard var data, !data.isEmpty else { @@ -255,7 +255,7 @@ extension ResponseSerializer where Self == DataResponseSerializer { /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. /// /// - Returns: The `DataResponseSerializer`. - public static func data(dataPreprocessor: DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, + public static func data(dataPreprocessor: any DataPreprocessor = DataResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = DataResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DataResponseSerializer.defaultEmptyRequestMethods) -> DataResponseSerializer { DataResponseSerializer(dataPreprocessor: dataPreprocessor, @@ -270,7 +270,7 @@ extension ResponseSerializer where Self == DataResponseSerializer { /// data is considered an error. However, if the request has an `HTTPMethod` or the response has an HTTP status code /// valid for empty responses, then an empty `String` is returned. public final class StringResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor + public let dataPreprocessor: any DataPreprocessor /// Optional string encoding used to validate the response. public let encoding: String.Encoding? public let emptyResponseCodes: Set @@ -284,7 +284,7 @@ public final class StringResponseSerializer: ResponseSerializer { /// from the server response, falling back to the default HTTP character set, `ISO-8859-1`. /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - public init(dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + public init(dataPreprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) { @@ -294,7 +294,7 @@ public final class StringResponseSerializer: ResponseSerializer { self.emptyRequestMethods = emptyRequestMethods } - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> String { + public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: (any Error)?) throws -> String { guard error == nil else { throw error! } guard var data, !data.isEmpty else { @@ -337,7 +337,7 @@ extension ResponseSerializer where Self == StringResponseSerializer { /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. /// /// - Returns: The `StringResponseSerializer`. - public static func string(dataPreprocessor: DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, + public static func string(dataPreprocessor: any DataPreprocessor = StringResponseSerializer.defaultDataPreprocessor, encoding: String.Encoding? = nil, emptyResponseCodes: Set = StringResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = StringResponseSerializer.defaultEmptyRequestMethods) -> StringResponseSerializer { @@ -358,7 +358,7 @@ extension ResponseSerializer where Self == StringResponseSerializer { /// `Decodable` and use a `DecodableResponseSerializer`. @available(*, deprecated, message: "JSONResponseSerializer deprecated and will be removed in Alamofire 6. Use DecodableResponseSerializer instead.") public final class JSONResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor + public let dataPreprocessor: any DataPreprocessor public let emptyResponseCodes: Set public let emptyRequestMethods: Set /// `JSONSerialization.ReadingOptions` used when serializing a response. @@ -371,7 +371,7 @@ public final class JSONResponseSerializer: ResponseSerializer { /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. /// - options: The options to use. `.allowFragments` by default. - public init(dataPreprocessor: DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, + public init(dataPreprocessor: any DataPreprocessor = JSONResponseSerializer.defaultDataPreprocessor, emptyResponseCodes: Set = JSONResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = JSONResponseSerializer.defaultEmptyRequestMethods, options: JSONSerialization.ReadingOptions = .allowFragments) { @@ -381,7 +381,7 @@ public final class JSONResponseSerializer: ResponseSerializer { self.options = options } - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> Any { + public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: (any Error)?) throws -> Any { guard error == nil else { throw error! } guard var data, !data.isEmpty else { @@ -453,9 +453,9 @@ extension PropertyListDecoder: DataDecoder {} /// type's `emptyValue()` will be returned. If the decoded type is `Empty`, the `.value` instance is returned. If the /// decoded type *does not* conform to `EmptyResponse` and isn't `Empty`, an error will be produced. public final class DecodableResponseSerializer: ResponseSerializer { - public let dataPreprocessor: DataPreprocessor + public let dataPreprocessor: any DataPreprocessor /// The `DataDecoder` instance used to decode responses. - public let decoder: DataDecoder + public let decoder: any DataDecoder public let emptyResponseCodes: Set public let emptyRequestMethods: Set @@ -466,8 +466,8 @@ public final class DecodableResponseSerializer: ResponseSerializer /// - decoder: The `DataDecoder`. `JSONDecoder()` by default. /// - emptyResponseCodes: The HTTP response codes for which empty responses are allowed. `[204, 205]` by default. /// - emptyRequestMethods: The HTTP request methods for which empty responses are allowed. `[.head]` by default. - public init(dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + public init(dataPreprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) { self.dataPreprocessor = dataPreprocessor @@ -476,7 +476,7 @@ public final class DecodableResponseSerializer: ResponseSerializer self.emptyRequestMethods = emptyRequestMethods } - public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> T { + public func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: (any Error)?) throws -> T { guard error == nil else { throw error! } guard var data, !data.isEmpty else { @@ -484,7 +484,7 @@ public final class DecodableResponseSerializer: ResponseSerializer throw AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength) } - guard let emptyResponseType = T.self as? EmptyResponse.Type, let emptyValue = emptyResponseType.emptyValue() as? T else { + guard let emptyResponseType = T.self as? any EmptyResponse.Type, let emptyValue = emptyResponseType.emptyValue() as? T else { throw AFError.responseSerializationFailed(reason: .invalidEmptyResponse(type: "\(T.self)")) } @@ -513,8 +513,8 @@ extension ResponseSerializer { /// /// - Returns: The `DecodableResponseSerializer`. public static func decodable(of type: T.Type, - dataPreprocessor: DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, - decoder: DataDecoder = JSONDecoder(), + dataPreprocessor: any DataPreprocessor = DecodableResponseSerializer.defaultDataPreprocessor, + decoder: any DataDecoder = JSONDecoder(), emptyResponseCodes: Set = DecodableResponseSerializer.defaultEmptyResponseCodes, emptyRequestMethods: Set = DecodableResponseSerializer.defaultEmptyRequestMethods) -> DecodableResponseSerializer where Self == DecodableResponseSerializer { DecodableResponseSerializer(dataPreprocessor: dataPreprocessor, diff --git a/Source/Features/RetryPolicy.swift b/Source/Features/RetryPolicy.swift index bb52c6c0e..727006987 100644 --- a/Source/Features/RetryPolicy.swift +++ b/Source/Features/RetryPolicy.swift @@ -307,7 +307,7 @@ open class RetryPolicy: RequestInterceptor { open func retry(_ request: Request, for session: Session, - dueTo error: Error, + dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { if request.retryCount < retryLimit, shouldRetry(request: request, dueTo: error) { completion(.retryWithDelay(pow(Double(exponentialBackoffBase), Double(request.retryCount)) * exponentialBackoffScale)) @@ -323,7 +323,7 @@ open class RetryPolicy: RequestInterceptor { /// - error: `Error` encountered while executing the `Request`. /// /// - Returns: `Bool` determining whether or not to retry the `Request`. - open func shouldRetry(request: Request, dueTo error: Error) -> Bool { + open func shouldRetry(request: Request, dueTo error: any Error) -> Bool { guard let httpMethod = request.request?.method, retryableHTTPMethods.contains(httpMethod) else { return false } if let statusCode = request.response?.statusCode, retryableHTTPStatusCodes.contains(statusCode) { diff --git a/Source/Features/ServerTrustEvaluation.swift b/Source/Features/ServerTrustEvaluation.swift index 7e6cb104e..99fa6168f 100644 --- a/Source/Features/ServerTrustEvaluation.swift +++ b/Source/Features/ServerTrustEvaluation.swift @@ -30,7 +30,7 @@ open class ServerTrustManager { public let allHostsMustBeEvaluated: Bool /// The dictionary of policies mapped to a particular host. - public let evaluators: [String: ServerTrustEvaluating] + public let evaluators: [String: any ServerTrustEvaluating] /// Initializes the `ServerTrustManager` instance with the given evaluators. /// @@ -43,7 +43,7 @@ open class ServerTrustManager { /// - allHostsMustBeEvaluated: The value determining whether all hosts for this instance must be evaluated. `true` /// by default. /// - evaluators: A dictionary of evaluators mapped to hosts. - public init(allHostsMustBeEvaluated: Bool = true, evaluators: [String: ServerTrustEvaluating]) { + public init(allHostsMustBeEvaluated: Bool = true, evaluators: [String: any ServerTrustEvaluating]) { self.allHostsMustBeEvaluated = allHostsMustBeEvaluated self.evaluators = evaluators } @@ -59,7 +59,7 @@ open class ServerTrustManager { /// - Returns: The `ServerTrustEvaluating` value for the given host if found, `nil` otherwise. /// - Throws: `AFError.serverTrustEvaluationFailed` if `allHostsMustBeEvaluated` is `true` and no matching /// evaluators are found. - open func serverTrustEvaluator(forHost host: String) throws -> ServerTrustEvaluating? { + open func serverTrustEvaluator(forHost host: String) throws -> (any ServerTrustEvaluating)? { guard let evaluator = evaluators[host] else { if allHostsMustBeEvaluated { throw AFError.serverTrustEvaluationFailed(reason: .noRequiredEvaluator(host: host)) @@ -408,12 +408,12 @@ extension ServerTrustEvaluating where Self == PublicKeysTrustEvaluator { /// Uses the provided evaluators to validate the server trust. The trust is only considered valid if all of the /// evaluators consider it valid. public final class CompositeTrustEvaluator: ServerTrustEvaluating { - private let evaluators: [ServerTrustEvaluating] + private let evaluators: [any ServerTrustEvaluating] /// Creates a `CompositeTrustEvaluator` from the provided evaluators. /// /// - Parameter evaluators: The `ServerTrustEvaluating` values used to evaluate the server trust. - public init(evaluators: [ServerTrustEvaluating]) { + public init(evaluators: [any ServerTrustEvaluating]) { self.evaluators = evaluators } @@ -426,7 +426,7 @@ extension ServerTrustEvaluating where Self == CompositeTrustEvaluator { /// Creates a `CompositeTrustEvaluator` from the provided evaluators. /// /// - Parameter evaluators: The `ServerTrustEvaluating` values used to evaluate the server trust. - public static func composite(evaluators: [ServerTrustEvaluating]) -> CompositeTrustEvaluator { + public static func composite(evaluators: [any ServerTrustEvaluating]) -> CompositeTrustEvaluator { CompositeTrustEvaluator(evaluators: evaluators) } } @@ -525,7 +525,7 @@ extension AlamofireExtension where ExtendedType == SecTrust { @available(macOS, introduced: 10.12, deprecated: 10.14, renamed: "evaluate(afterApplying:)") @available(tvOS, introduced: 10, deprecated: 12, renamed: "evaluate(afterApplying:)") @available(watchOS, introduced: 3, deprecated: 5, renamed: "evaluate(afterApplying:)") - public func validate(policy: SecPolicy, errorProducer: (_ status: OSStatus, _ result: SecTrustResultType) -> Error) throws { + public func validate(policy: SecPolicy, errorProducer: (_ status: OSStatus, _ result: SecTrustResultType) -> any Error) throws { try apply(policy: policy).af.validate(errorProducer: errorProducer) } @@ -570,7 +570,7 @@ extension AlamofireExtension where ExtendedType == SecTrust { @available(macOS, introduced: 10.12, deprecated: 10.14, renamed: "evaluate()") @available(tvOS, introduced: 10, deprecated: 12, renamed: "evaluate()") @available(watchOS, introduced: 3, deprecated: 5, renamed: "evaluate()") - public func validate(errorProducer: (_ status: OSStatus, _ result: SecTrustResultType) -> Error) throws { + public func validate(errorProducer: (_ status: OSStatus, _ result: SecTrustResultType) -> any Error) throws { var result = SecTrustResultType.invalid let status = SecTrustEvaluate(type, &result) diff --git a/Source/Features/URLEncodedFormEncoder.swift b/Source/Features/URLEncodedFormEncoder.swift index a2156b1c7..2674c133f 100644 --- a/Source/Features/URLEncodedFormEncoder.swift +++ b/Source/Features/URLEncodedFormEncoder.swift @@ -431,7 +431,7 @@ public final class URLEncodedFormEncoder { self.allowedCharacters = allowedCharacters } - func encode(_ value: Encodable) throws -> URLEncodedFormComponent { + func encode(_ value: any Encodable) throws -> URLEncodedFormComponent { let context = URLEncodedFormContext(.object([])) let encoder = _URLEncodedFormEncoder(context: context, boolEncoding: boolEncoding, @@ -449,7 +449,7 @@ public final class URLEncodedFormEncoder { /// /// - Returns: The encoded `String`. /// - Throws: An `Error` or `EncodingError` instance if encoding fails. - public func encode(_ value: Encodable) throws -> String { + public func encode(_ value: any Encodable) throws -> String { let component: URLEncodedFormComponent = try encode(value) guard case let .object(object) = component else { @@ -475,7 +475,7 @@ public final class URLEncodedFormEncoder { /// - Returns: The encoded `Data`. /// /// - Throws: An `Error` or `EncodingError` instance if encoding fails. - public func encode(_ value: Encodable) throws -> Data { + public func encode(_ value: any Encodable) throws -> Data { let string: String = try encode(value) return Data(string.utf8) @@ -483,7 +483,7 @@ public final class URLEncodedFormEncoder { } final class _URLEncodedFormEncoder { - var codingPath: [CodingKey] + var codingPath: [any CodingKey] // Returns an empty dictionary, as this encoder doesn't support userInfo. var userInfo: [CodingUserInfoKey: Any] { [:] } @@ -495,7 +495,7 @@ final class _URLEncodedFormEncoder { private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, - codingPath: [CodingKey] = [], + codingPath: [any CodingKey] = [], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, dateEncoding: URLEncodedFormEncoder.DateEncoding, @@ -520,7 +520,7 @@ extension _URLEncodedFormEncoder: Encoder { return KeyedEncodingContainer(container) } - func unkeyedContainer() -> UnkeyedEncodingContainer { + func unkeyedContainer() -> any UnkeyedEncodingContainer { _URLEncodedFormEncoder.UnkeyedContainer(context: context, codingPath: codingPath, boolEncoding: boolEncoding, @@ -529,7 +529,7 @@ extension _URLEncodedFormEncoder: Encoder { nilEncoding: nilEncoding) } - func singleValueContainer() -> SingleValueEncodingContainer { + func singleValueContainer() -> any SingleValueEncodingContainer { _URLEncodedFormEncoder.SingleValueContainer(context: context, codingPath: codingPath, boolEncoding: boolEncoding, @@ -577,12 +577,12 @@ enum URLEncodedFormComponent { /// - parameters: /// - value: Value of `Self` to set at the supplied path. /// - path: `CodingKey` path to update with the supplied value. - public mutating func set(to value: URLEncodedFormComponent, at path: [CodingKey]) { + public mutating func set(to value: URLEncodedFormComponent, at path: [any CodingKey]) { set(&self, to: value, at: path) } /// Recursive backing method to `set(to:at:)`. - private func set(_ context: inout URLEncodedFormComponent, to value: URLEncodedFormComponent, at path: [CodingKey]) { + private func set(_ context: inout URLEncodedFormComponent, to value: URLEncodedFormComponent, at path: [any CodingKey]) { guard !path.isEmpty else { context = value return @@ -660,7 +660,7 @@ struct AnyCodingKey: CodingKey, Hashable { extension _URLEncodedFormEncoder { final class KeyedContainer where Key: CodingKey { - var codingPath: [CodingKey] + var codingPath: [any CodingKey] private let context: URLEncodedFormContext private let boolEncoding: URLEncodedFormEncoder.BoolEncoding @@ -669,7 +669,7 @@ extension _URLEncodedFormEncoder { private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, - codingPath: [CodingKey], + codingPath: [any CodingKey], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, dateEncoding: URLEncodedFormEncoder.DateEncoding, @@ -682,7 +682,7 @@ extension _URLEncodedFormEncoder { self.nilEncoding = nilEncoding } - private func nestedCodingPath(for key: CodingKey) -> [CodingKey] { + private func nestedCodingPath(for key: any CodingKey) -> [any CodingKey] { codingPath + [key] } } @@ -768,7 +768,7 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol try container.encode(value) } - func nestedSingleValueEncoder(for key: Key) -> SingleValueEncodingContainer { + func nestedSingleValueEncoder(for key: Key) -> any SingleValueEncodingContainer { let container = _URLEncodedFormEncoder.SingleValueContainer(context: context, codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, @@ -779,7 +779,7 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol return container } - func nestedUnkeyedContainer(forKey key: Key) -> UnkeyedEncodingContainer { + func nestedUnkeyedContainer(forKey key: Key) -> any UnkeyedEncodingContainer { let container = _URLEncodedFormEncoder.UnkeyedContainer(context: context, codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, @@ -801,7 +801,7 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol return KeyedEncodingContainer(container) } - func superEncoder() -> Encoder { + func superEncoder() -> any Encoder { _URLEncodedFormEncoder(context: context, codingPath: codingPath, boolEncoding: boolEncoding, @@ -810,7 +810,7 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol nilEncoding: nilEncoding) } - func superEncoder(forKey key: Key) -> Encoder { + func superEncoder(forKey key: Key) -> any Encoder { _URLEncodedFormEncoder(context: context, codingPath: nestedCodingPath(for: key), boolEncoding: boolEncoding, @@ -822,7 +822,7 @@ extension _URLEncodedFormEncoder.KeyedContainer: KeyedEncodingContainerProtocol extension _URLEncodedFormEncoder { final class SingleValueContainer { - var codingPath: [CodingKey] + var codingPath: [any CodingKey] private var canEncodeNewValue = true @@ -833,7 +833,7 @@ extension _URLEncodedFormEncoder { private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, - codingPath: [CodingKey], + codingPath: [any CodingKey], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, dateEncoding: URLEncodedFormEncoder.DateEncoding, @@ -966,10 +966,10 @@ extension _URLEncodedFormEncoder.SingleValueContainer: SingleValueEncodingContai extension _URLEncodedFormEncoder { final class UnkeyedContainer { - var codingPath: [CodingKey] + var codingPath: [any CodingKey] var count = 0 - var nestedCodingPath: [CodingKey] { + var nestedCodingPath: [any CodingKey] { codingPath + [AnyCodingKey(intValue: count)!] } @@ -980,7 +980,7 @@ extension _URLEncodedFormEncoder { private let nilEncoding: URLEncodedFormEncoder.NilEncoding init(context: URLEncodedFormContext, - codingPath: [CodingKey], + codingPath: [any CodingKey], boolEncoding: URLEncodedFormEncoder.BoolEncoding, dataEncoding: URLEncodedFormEncoder.DataEncoding, dateEncoding: URLEncodedFormEncoder.DateEncoding, @@ -1007,7 +1007,7 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { try container.encode(value) } - func nestedSingleValueContainer() -> SingleValueEncodingContainer { + func nestedSingleValueContainer() -> any SingleValueEncodingContainer { defer { count += 1 } return _URLEncodedFormEncoder.SingleValueContainer(context: context, @@ -1030,7 +1030,7 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { return KeyedEncodingContainer(container) } - func nestedUnkeyedContainer() -> UnkeyedEncodingContainer { + func nestedUnkeyedContainer() -> any UnkeyedEncodingContainer { defer { count += 1 } return _URLEncodedFormEncoder.UnkeyedContainer(context: context, @@ -1041,7 +1041,7 @@ extension _URLEncodedFormEncoder.UnkeyedContainer: UnkeyedEncodingContainer { nilEncoding: nilEncoding) } - func superEncoder() -> Encoder { + func superEncoder() -> any Encoder { defer { count += 1 } return _URLEncodedFormEncoder(context: context, diff --git a/Source/Features/Validation.swift b/Source/Features/Validation.swift index eab45766b..9f5d4b14d 100644 --- a/Source/Features/Validation.swift +++ b/Source/Features/Validation.swift @@ -30,7 +30,7 @@ extension Request { fileprivate typealias ErrorReason = AFError.ResponseValidationFailureReason /// Used to represent whether a validation succeeded or failed. - public typealias ValidationResult = Result + public typealias ValidationResult = Result fileprivate struct MIMEType { let type: String diff --git a/Tests/AuthenticationInterceptorTests.swift b/Tests/AuthenticationInterceptorTests.swift index 2f44b92f4..c9949e565 100644 --- a/Tests/AuthenticationInterceptorTests.swift +++ b/Tests/AuthenticationInterceptorTests.swift @@ -61,10 +61,10 @@ final class AuthenticationInterceptorTestCase: BaseTestCase { private(set) var isRequestAuthenticatedWithCredentialCount = 0 let shouldRefreshAsynchronously: Bool - let refreshResult: Result? + let refreshResult: Result? let lock = NSLock() - init(shouldRefreshAsynchronously: Bool = true, refreshResult: Result? = nil) { + init(shouldRefreshAsynchronously: Bool = true, refreshResult: Result? = nil) { self.shouldRefreshAsynchronously = shouldRefreshAsynchronously self.refreshResult = refreshResult } @@ -79,7 +79,7 @@ final class AuthenticationInterceptorTestCase: BaseTestCase { func refresh(_ credential: TestCredential, for session: Session, - completion: @escaping (Result) -> Void) { + completion: @escaping (Result) -> Void) { lock.lock() refreshCount += 1 @@ -103,7 +103,7 @@ final class AuthenticationInterceptorTestCase: BaseTestCase { func didRequest(_ urlRequest: URLRequest, with response: HTTPURLResponse, - failDueToAuthenticationError error: Error) + failDueToAuthenticationError error: any Error) -> Bool { lock.lock(); defer { lock.unlock() } @@ -128,7 +128,7 @@ final class AuthenticationInterceptorTestCase: BaseTestCase { self.paths = paths } - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { var request = urlRequest var urlComponents = URLComponents(url: request.url!, resolvingAgainstBaseURL: false)! diff --git a/Tests/CachedResponseHandlerTests.swift b/Tests/CachedResponseHandlerTests.swift index e86efb6bb..cfd0df8d7 100644 --- a/Tests/CachedResponseHandlerTests.swift +++ b/Tests/CachedResponseHandlerTests.swift @@ -191,7 +191,7 @@ final class CachedResponseHandlerTestCase: BaseTestCase { // MARK: Private - Test Helpers - private func session(using handler: CachedResponseHandler? = nil) -> Session { + private func session(using handler: (any CachedResponseHandler)? = nil) -> Session { let configuration = URLSessionConfiguration.af.default let capacity = 100_000_000 let cache: URLCache @@ -209,7 +209,7 @@ final class CachedResponseHandlerTestCase: BaseTestCase { } final class StaticCachedResponseHandlerTests: BaseTestCase { - func takeCachedResponseHandler(_ handler: CachedResponseHandler) { + func takeCachedResponseHandler(_ handler: any CachedResponseHandler) { _ = handler } diff --git a/Tests/DataStreamTests.swift b/Tests/DataStreamTests.swift index 5e1a2eae8..3ab304f9c 100644 --- a/Tests/DataStreamTests.swift +++ b/Tests/DataStreamTests.swift @@ -885,7 +885,7 @@ final class DataStreamIntegrationTests: BaseTestCase { final class GoodRetry: RequestInterceptor { var hasRetried = false - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { if hasRetried { completion(.success(Endpoint.bytes(1000).urlRequest)) } else { @@ -893,7 +893,7 @@ final class DataStreamIntegrationTests: BaseTestCase { } } - func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { hasRetried = true completion(.retry) } diff --git a/Tests/DownloadTests.swift b/Tests/DownloadTests.swift index a7de0ab95..d7c07ae0d 100644 --- a/Tests/DownloadTests.swift +++ b/Tests/DownloadTests.swift @@ -797,7 +797,7 @@ final class DownloadResponseTryMapTestCase: BaseTestCase { // Given let expectation = expectation(description: "request should succeed") - var response: DownloadResponse? + var response: DownloadResponse? // When AF.download(.get, parameters: ["foo": "bar"]).responseDecodable(of: TestResponse.self) { resp in @@ -826,7 +826,7 @@ final class DownloadResponseTryMapTestCase: BaseTestCase { let expectation = expectation(description: "request should succeed") - var response: DownloadResponse? + var response: DownloadResponse? // When AF.download(.get, parameters: ["foo": "bar"]).responseDecodable(of: TestResponse.self) { resp in @@ -858,7 +858,7 @@ final class DownloadResponseTryMapTestCase: BaseTestCase { let urlString = String.invalidURL let expectation = expectation(description: "request should fail with 404") - var response: DownloadResponse? + var response: DownloadResponse? // When AF.download(urlString, parameters: ["foo": "bar"]).responseDecodable(of: TestResponse.self) { resp in @@ -942,7 +942,7 @@ final class DownloadResponseTryMapErrorTestCase: BaseTestCase { // Given let expectation = expectation(description: "request should succeed") - var response: DownloadResponse? + var response: DownloadResponse? // When AF.download(.get).responseData { resp in @@ -967,7 +967,7 @@ final class DownloadResponseTryMapErrorTestCase: BaseTestCase { let urlString = String.invalidURL let expectation = expectation(description: "request should fail") - var response: DownloadResponse? + var response: DownloadResponse? // When AF.download(urlString).responseData { resp in @@ -999,7 +999,7 @@ final class DownloadResponseTryMapErrorTestCase: BaseTestCase { let urlString = String.invalidURL let expectation = expectation(description: "request should fail") - var response: DownloadResponse? + var response: DownloadResponse? // When AF.download(urlString).responseData { resp in diff --git a/Tests/MultipartFormDataTests.swift b/Tests/MultipartFormDataTests.swift index 83141dc77..e5e9b9084 100644 --- a/Tests/MultipartFormDataTests.swift +++ b/Tests/MultipartFormDataTests.swift @@ -433,7 +433,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { let data = Data("Lorem ipsum dolor sit amet.".utf8) multipartFormData.append(data, withName: "data") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -473,7 +473,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { multipartFormData.append(japaneseData, withName: "japanese") multipartFormData.append(emojiData, withName: "emoji") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -516,7 +516,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { let unicornImageURL = url(forResource: "unicorn", withExtension: "png") multipartFormData.append(unicornImageURL, withName: "unicorn") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -558,7 +558,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { multipartFormData.append(unicornImageURL, withName: "unicorn") multipartFormData.append(rainbowImageURL, withName: "rainbow") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -613,7 +613,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { fileName: "unicorn.png", mimeType: "image/png") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -658,7 +658,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { fileName: "unicorn.png", mimeType: "image/png") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -713,7 +713,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { fileName: "rainbow.jpg", mimeType: "image/jpeg") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -772,7 +772,7 @@ final class MultipartFormDataWriteEncodedDataToDiskTestCase: BaseTestCase { fileName: "rainbow.jpg", mimeType: "image/jpeg") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -826,7 +826,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let multipartFormData = MultipartFormData() multipartFormData.append(fileURL, withName: "empty_data") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -848,7 +848,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let multipartFormData = MultipartFormData() multipartFormData.append(fileURL, withName: "empty_data") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -870,7 +870,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let multipartFormData = MultipartFormData() multipartFormData.append(fileURL, withName: "empty_data") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -892,7 +892,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let multipartFormData = MultipartFormData() multipartFormData.append(directoryURL, withName: "empty_data", fileName: "empty", mimeType: "application/octet") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -911,7 +911,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { // Given let fileURL = temporaryFileURL - var writerError: Error? + var writerError: (any Error)? do { try "dummy data".write(to: fileURL, atomically: true, encoding: .utf8) @@ -923,7 +923,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let data = Data("Lorem ipsum dolor sit amet.".utf8) multipartFormData.append(data, withName: "data") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -946,7 +946,7 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let data = Data("Lorem ipsum dolor sit amet.".utf8) multipartFormData.append(data, withName: "data") - var encodingError: Error? + var encodingError: (any Error)? // When do { @@ -965,8 +965,8 @@ class MultipartFormDataFailureTestCase: BaseTestCase { let multipartFormData = MultipartFormData() let data = Data("Lorem ipsum dolor sit amet.".utf8) multipartFormData.append(data, withName: "data") - var firstError: Error? - var secondError: Error? + var firstError: (any Error)? + var secondError: (any Error)? // When do { diff --git a/Tests/NSLoggingEventMonitor.swift b/Tests/NSLoggingEventMonitor.swift index 680a48939..3e9d74c9c 100644 --- a/Tests/NSLoggingEventMonitor.swift +++ b/Tests/NSLoggingEventMonitor.swift @@ -30,7 +30,7 @@ public final class NSLoggingEventMonitor: EventMonitor { public init() {} - public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { + public func urlSession(_ session: URLSession, didBecomeInvalidWithError error: (any Error)?) { NSLog("%@", "URLSession: \(session), didBecomeInvalidWithError: \(error?.localizedDescription ?? "None")") } @@ -61,7 +61,7 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "URLSession: \(session), task: \(task), didFinishCollecting: \(metrics)") } - public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + public func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) { NSLog("%@", "URLSession: \(session), task: \(task), didCompleteWithError: \(error?.localizedDescription ?? "None")") } @@ -104,7 +104,7 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "Request: \(request) didCreateInitialURLRequest: \(urlRequest)") } - public func request(_ request: Request, didFailToCreateURLRequestWithError error: Error) { + public func request(_ request: Request, didFailToCreateURLRequestWithError error: any Error) { NSLog("%@", "Request: \(request) didFailToCreateURLRequestWithError: \(error)") } @@ -112,7 +112,7 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "Request: \(request) didAdaptInitialRequest \(initialRequest) to \(adaptedRequest)") } - public func request(_ request: Request, didFailToAdaptURLRequest initialRequest: URLRequest, withError error: Error) { + public func request(_ request: Request, didFailToAdaptURLRequest initialRequest: URLRequest, withError error: any Error) { NSLog("%@", "Request: \(request) didFailToAdaptURLRequest \(initialRequest) withError \(error)") } @@ -128,11 +128,11 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "Request: \(request) didGatherMetrics \(metrics)") } - public func request(_ request: Request, didFailTask task: URLSessionTask, earlyWithError error: Error) { + public func request(_ request: Request, didFailTask task: URLSessionTask, earlyWithError error: any Error) { NSLog("%@", "Request: \(request) didFailTask \(task) earlyWithError \(error)") } - public func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: Error?) { + public func request(_ request: Request, didCompleteTask task: URLSessionTask, with error: (any Error)?) { NSLog("%@", "Request: \(request) didCompleteTask \(task) withError: \(error?.localizedDescription ?? "None")") } @@ -164,19 +164,19 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "Request: \(request) didCancelTask: \(task)") } - public func request(_ request: DataRequest, didParseResponse response: DataResponse) { + public func request(_ request: DataRequest, didParseResponse response: DataResponse) { NSLog("%@", "Request: \(request), didParseResponse: \(response)") } - public func request(_ request: DataRequest, didParseResponse response: DataResponse) { + public func request(_ request: DataRequest, didParseResponse response: DataResponse) { NSLog("%@", "Request: \(request), didParseResponse: \(response)") } - public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { + public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { NSLog("%@", "Request: \(request), didParseResponse: \(response)") } - public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { + public func request(_ request: DownloadRequest, didParseResponse response: DownloadResponse) { NSLog("%@", "Request: \(request), didParseResponse: \(response)") } @@ -200,7 +200,7 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "Request: \(request), didCreateUploadable: \(uploadable)") } - public func request(_ request: UploadRequest, didFailToCreateUploadableWithError error: Error) { + public func request(_ request: UploadRequest, didFailToCreateUploadableWithError error: any Error) { NSLog("%@", "Request: \(request), didFailToCreateUploadableWithError: \(error)") } @@ -208,7 +208,7 @@ public final class NSLoggingEventMonitor: EventMonitor { NSLog("%@", "Request: \(request), didProvideInputStream: \(stream)") } - public func request(_ request: DownloadRequest, didFinishDownloadingUsing task: URLSessionTask, with result: Result) { + public func request(_ request: DownloadRequest, didFinishDownloadingUsing task: URLSessionTask, with result: Result) { NSLog("%@", "Request: \(request), didFinishDownloadingUsing: \(task), withResult: \(result)") } diff --git a/Tests/ParameterEncoderTests.swift b/Tests/ParameterEncoderTests.swift index 9cd44e35e..81e2a1791 100644 --- a/Tests/ParameterEncoderTests.swift +++ b/Tests/ParameterEncoderTests.swift @@ -199,7 +199,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": "a"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=a") @@ -212,7 +212,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": decimal] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -225,7 +225,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": decimal] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1.123456") @@ -237,7 +237,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": 1.0] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1.0") @@ -249,7 +249,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: Float] = ["a": 1.0] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1.0") @@ -261,7 +261,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: Int8] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -273,7 +273,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: Int16] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -285,7 +285,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: Int32] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -297,7 +297,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: Int64] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -309,7 +309,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: UInt] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -321,7 +321,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: UInt8] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -333,7 +333,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: UInt16] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -345,7 +345,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: UInt32] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -357,7 +357,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: UInt64] = ["a": 1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=1") @@ -369,7 +369,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": ["b": "b"]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a%5Bb%5D=b") @@ -381,7 +381,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": ["b": "b"]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a%5Bb%5D=b") @@ -393,7 +393,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": ["b": "b"]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a.b=b") @@ -405,7 +405,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["a": ["b": "b"]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a-b=b") @@ -417,7 +417,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = EncodableStruct() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "five%5Ba%5D=a&four%5B%5D=1&four%5B%5D=2&four%5B%5D=3&one=one&seven%5Ba%5D=a&six%5Ba%5D%5Bb%5D=b&three=1&two=2" @@ -430,7 +430,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ManuallyEncodableStruct() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "root%5B%5D%5B%5D%5B%5D=1&root%5B%5D%5B%5D%5B%5D=2&root%5B%5D%5B%5D%5B%5D=3&root%5B%5D%5B%5D=1&root%5B%5D%5B%5D=2&root%5B%5D%5B%5D=3&root%5B%5D%5Ba%5D%5Bstring%5D=string" @@ -443,7 +443,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = EncodableSuperclass() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "one=one&three=1&two=2") @@ -455,7 +455,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = EncodableSubclass() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "five%5Ba%5D=a&five%5Bb%5D=b&four%5B%5D=1&four%5B%5D=2&four%5B%5D=3&one=one&three=1&two=2" @@ -468,7 +468,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = EncodableStruct() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "one=one&two=2&three=1&four%5B%5D=1&four%5B%5D=2&four%5B%5D=3&five%5Ba%5D=a&six%5Ba%5D%5Bb%5D=b&seven%5Ba%5D=a" @@ -481,7 +481,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ManuallyEncodableSubclass() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "five%5Ba%5D=a&five%5Bb%5D=b&four%5Bfive%5D=2&four%5Bfour%5D=one" @@ -494,7 +494,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = [1] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertFalse(result.isSuccess) @@ -506,7 +506,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = "string" // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertFalse(result.isSuccess) @@ -518,7 +518,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["foo": [EncodableSuperclass()]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "foo%5B0%5D%5Bone%5D=one&foo%5B0%5D%5Bthree%5D=1&foo%5B0%5D%5Btwo%5D=2") @@ -530,7 +530,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = EncodableSubclass() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "five%5Ba%5D=a&five%5Bb%5D=b&four%5B0%5D=1&four%5B1%5D=2&four%5B2%5D=3&one=one&three=1&two=2" @@ -543,7 +543,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ManuallyEncodableSubclass() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "five%5Ba%5D=a&five%5Bb%5D=b&four%5Bfive%5D=2&four%5Bfour%5D=one" @@ -556,7 +556,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = EncodableStruct() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "five%5Ba%5D=a&four%5B0%5D=1&four%5B1%5D=2&four%5B2%5D=3&one=one&seven%5Ba%5D=a&six%5Ba%5D%5Bb%5D=b&three=1&two=2" @@ -569,7 +569,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ManuallyEncodableStruct() // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // then let expected = "root%5B0%5D%5B0%5D=1&root%5B0%5D%5B1%5D=2&root%5B0%5D%5B2%5D=3&root%5B1%5D%5Ba%5D%5Bstring%5D=string&root%5B2%5D%5B0%5D%5B0%5D=1&root%5B2%5D%5B0%5D%5B1%5D=2&root%5B2%5D%5B0%5D%5B2%5D=3" @@ -582,7 +582,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["foo": [["bar": 2], ["qux": 3], ["quy": 4]]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "foo%5B0%5D%5Bbar%5D=2&foo%5B1%5D%5Bqux%5D=3&foo%5B2%5D%5Bquy%5D=4") @@ -594,7 +594,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["foo": [["bar": "2"], ["qux": "3"], ["quy": "4"]]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "foo%5B0%5D%5Bbar%5D=2&foo%5B1%5D%5Bqux%5D=3&foo%5B2%5D%5Bquy%5D=4") @@ -606,7 +606,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["foo": [["bar": true], ["qux": false], ["quy": true]]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "foo%5B0%5D%5Bbar%5D=1&foo%5B1%5D%5Bqux%5D=0&foo%5B2%5D%5Bquy%5D=1") @@ -618,7 +618,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["array": [1, 2]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "array=1&array=2") @@ -632,7 +632,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["array": [1, 2]] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "array.1=1&array.2=2") @@ -644,7 +644,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["bool": true] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "bool=true") @@ -656,7 +656,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["data": Data("data".utf8)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "data=ZGF0YQ%3D%3D") @@ -670,7 +670,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["data": Data("data".utf8)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertTrue(result.isFailure) @@ -683,7 +683,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "date=123.456") @@ -695,7 +695,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "date=978307323.456") @@ -707,7 +707,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "date=978307323456.0") @@ -719,7 +719,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "date=2001-01-01T00%3A02%3A03Z") @@ -736,7 +736,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "date=2001-01-01%2000%3A02%3A03.4560") @@ -748,7 +748,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "date=123.456") @@ -762,7 +762,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["date": Date(timeIntervalSinceReferenceDate: 123.456)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertTrue(result.isFailure) @@ -775,7 +775,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["oneTwoThree": "oneTwoThree"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "one_two_three=oneTwoThree") @@ -787,7 +787,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["oneTwoThree": "oneTwoThree"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "one-two-three=oneTwoThree") @@ -799,7 +799,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["oneTwoThree": "oneTwoThree"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "OneTwoThree=oneTwoThree") @@ -811,7 +811,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["oneTwoThree": "oneTwoThree"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "onetwothree=oneTwoThree") @@ -823,7 +823,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["oneTwoThree": "oneTwoThree"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "ONETWOTHREE=oneTwoThree") @@ -835,7 +835,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["oneTwoThree": "oneTwoThree"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "A=oneTwoThree") @@ -847,7 +847,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: String?] = ["a": nil] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "") @@ -858,7 +858,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let encoder = URLEncodedFormEncoder() // When - let result = Result { try encoder.encode(OptionalEncodableStruct()) } + let result = Result { try encoder.encode(OptionalEncodableStruct()) } // Then XCTAssertEqual(result.success, "one=one") @@ -870,7 +870,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: String?] = ["a": nil] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=null") @@ -881,7 +881,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let encoder = URLEncodedFormEncoder(nilEncoding: .null) // When - let result = Result { try encoder.encode(OptionalEncodableStruct()) } + let result = Result { try encoder.encode(OptionalEncodableStruct()) } // Then XCTAssertEqual(result.success, "one=one&two=null") @@ -893,7 +893,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: String?] = ["a": nil] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "") @@ -904,7 +904,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let encoder = URLEncodedFormEncoder(nilEncoding: .dropKey) // When - let result = Result { try encoder.encode(OptionalEncodableStruct()) } + let result = Result { try encoder.encode(OptionalEncodableStruct()) } // Then XCTAssertEqual(result.success, "one=one") @@ -916,7 +916,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters: [String: String?] = ["a": nil] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "a=") @@ -927,7 +927,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let encoder = URLEncodedFormEncoder(nilEncoding: .dropValue) // When - let result = Result { try encoder.encode(OptionalEncodableStruct()) } + let result = Result { try encoder.encode(OptionalEncodableStruct()) } // Then XCTAssertEqual(result.success, "one=one&two=") @@ -939,7 +939,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["spaces": "replace with spaces"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "spaces=replace+with+spaces") @@ -953,7 +953,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["allowed": "?/"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "allowed=%3F%2F") @@ -967,7 +967,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { "uppercase": "ABCDEFGHIJKLMNOPQRSTUVWXYZ"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expected = "lowercase=abcdefghijklmnopqrstuvwxyz&numbers=0123456789&uppercase=ABCDEFGHIJKLMNOPQRSTUVWXYZ" @@ -982,7 +982,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["reserved": "\(generalDelimiters)\(subDelimiters)"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "reserved=%3A%23%5B%5D%40%21%24%26%27%28%29%2A%2B%2C%3B%3D") @@ -994,7 +994,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["illegal": " \"#%<>[]\\^`{}|"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "illegal=%20%22%23%25%3C%3E%5B%5D%5C%5E%60%7B%7D%7C") @@ -1006,7 +1006,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["foo&bar": "baz&qux", "foobar": "bazqux"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "foo%26bar=baz%26qux&foobar=bazqux") @@ -1018,7 +1018,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["?foo?": "?bar?"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "?foo?=?bar?") @@ -1030,7 +1030,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["foo": "/bar/baz/qux"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "foo=/bar/baz/qux") @@ -1042,7 +1042,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = [" foo ": " bar "] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "%20foo%20=%20bar%20") @@ -1054,7 +1054,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["+foo+": "+bar+"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "%2Bfoo%2B=%2Bbar%2B") @@ -1066,7 +1066,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["percent%": "%25"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then XCTAssertEqual(result.success, "percent%25=%2525") @@ -1081,7 +1081,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { "emoji": "😃"] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let expectedParameterValues = ["arabic=%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9", @@ -1098,7 +1098,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { let parameters = ["chinese": String(repeating: "一二三四五六七八九十", count: repeatedCount)] // When - let result = Result { try encoder.encode(parameters) } + let result = Result { try encoder.encode(parameters) } // Then let escaped = String(repeating: "%E4%B8%80%E4%BA%8C%E4%B8%89%E5%9B%9B%E4%BA%94%E5%85%AD%E4%B8%83%E5%85%AB%E4%B9%9D%E5%8D%81", @@ -1109,7 +1109,7 @@ final class URLEncodedFormEncoderTests: BaseTestCase { } final class StaticParameterEncoderInstanceTests: BaseTestCase { - func takeParameterEncoder(_ parameterEncoder: ParameterEncoder) { + func takeParameterEncoder(_ parameterEncoder: any ParameterEncoder) { _ = parameterEncoder } @@ -1157,7 +1157,7 @@ private final class EncodableSubclass: EncodableSuperclass { case four, five } - override func encode(to encoder: Encoder) throws { + override func encode(to encoder: any Encoder) throws { try super.encode(to: encoder) var container = encoder.container(keyedBy: CodingKeys.self) @@ -1174,7 +1174,7 @@ private final class ManuallyEncodableSubclass: EncodableSuperclass { case four, five } - override func encode(to encoder: Encoder) throws { + override func encode(to encoder: any Encoder) throws { var keyedContainer = encoder.container(keyedBy: CodingKeys.self) try keyedContainer.encode(four, forKey: .four) @@ -1207,7 +1207,7 @@ private struct ManuallyEncodableStruct: Encodable { case a, b } - func encode(to encoder: Encoder) throws { + func encode(to encoder: any Encoder) throws { var container = encoder.container(keyedBy: RootKey.self) var nestedKeyedContainer = container.nestedContainer(keyedBy: TypeKeys.self, forKey: .root) @@ -1233,7 +1233,7 @@ private struct FailingOptionalStruct: Encodable { let testedContainer: TestedContainer - func encode(to encoder: Encoder) throws { + func encode(to encoder: any Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) switch testedContainer { diff --git a/Tests/RedirectHandlerTests.swift b/Tests/RedirectHandlerTests.swift index ffdb8f6b7..221d9390e 100644 --- a/Tests/RedirectHandlerTests.swift +++ b/Tests/RedirectHandlerTests.swift @@ -221,7 +221,7 @@ final class RedirectHandlerTestCase: BaseTestCase { } final class StaticRedirectHandlerTests: BaseTestCase { - func takeRedirectHandler(_ handler: RedirectHandler) { + func takeRedirectHandler(_ handler: any RedirectHandler) { _ = handler } diff --git a/Tests/RequestInterceptorTests.swift b/Tests/RequestInterceptorTests.swift index 0598d0f95..b0bd7563c 100644 --- a/Tests/RequestInterceptorTests.swift +++ b/Tests/RequestInterceptorTests.swift @@ -89,7 +89,7 @@ final class AdapterTestCase: BaseTestCase { completion(.success(request)) } - var result: Result! + var result: Result! // When adapter.adapt(urlRequest, for: session) { result = $0 } @@ -107,7 +107,7 @@ final class AdapterTestCase: BaseTestCase { override func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, - completion: @escaping (Result) -> Void) { + completion: @escaping (Result) -> Void) { self.urlRequest = urlRequest self.state = state @@ -128,7 +128,7 @@ final class AdapterTestCase: BaseTestCase { let state = RequestAdapterState(requestID: requestID, session: session) - var result: Result! + var result: Result! // When adapter.adapt(urlRequest, using: state) { result = $0 } @@ -172,7 +172,7 @@ final class AdapterTestCase: BaseTestCase { } } - var result: Result! + var result: Result! let completesExpectation = expectation(description: "adapter completes") @@ -223,7 +223,7 @@ final class RetrierTestCase: BaseTestCase { completion(.retry) } - var result: Result! + var result: Result! // When retrier.adapt(urlRequest, for: session) { result = $0 } @@ -325,7 +325,7 @@ final class InterceptorTests: BaseTestCase { let session = Session() let interceptor = Interceptor() - var result: Result! + var result: Result! // When interceptor.adapt(urlRequest, for: session) { result = $0 } @@ -343,7 +343,7 @@ final class InterceptorTests: BaseTestCase { let adapter = Adapter { _, _, completion in completion(.failure(MockError())) } let interceptor = Interceptor(adapters: [adapter]) - var result: Result! + var result: Result! // When interceptor.adapt(urlRequest, for: session) { result = $0 } @@ -362,7 +362,7 @@ final class InterceptorTests: BaseTestCase { let adapter2 = Adapter { _, _, completion in completion(.failure(MockError())) } let interceptor = Interceptor(adapters: [adapter1, adapter2]) - var result: Result! + var result: Result! // When interceptor.adapt(urlRequest, for: session) { result = $0 } @@ -382,7 +382,7 @@ final class InterceptorTests: BaseTestCase { let interceptor = Interceptor(adapters: [adapter1, adapter2]) let state = RequestAdapterState(requestID: UUID(), session: session) - var result: Result! + var result: Result! // When interceptor.adapt(urlRequest, using: state) { result = $0 } @@ -404,7 +404,7 @@ final class InterceptorTests: BaseTestCase { } let interceptor = Interceptor(adapters: [adapter]) - var result: Result! + var result: Result! let completesExpectation = expectation(description: "interceptor completes") @@ -592,15 +592,15 @@ final class InterceptorRequestTests: BaseTestCase { // MARK: - Static Accessors final class StaticAccessorTests: BaseTestCase { - func consumeRequestAdapter(_ requestAdapter: RequestAdapter) { + func consumeRequestAdapter(_ requestAdapter: any RequestAdapter) { _ = requestAdapter } - func consumeRequestRetrier(_ requestRetrier: RequestRetrier) { + func consumeRequestRetrier(_ requestRetrier: any RequestRetrier) { _ = requestRetrier } - func consumeRequestInterceptor(_ requestInterceptor: RequestInterceptor) { + func consumeRequestInterceptor(_ requestInterceptor: any RequestInterceptor) { _ = requestInterceptor } @@ -634,10 +634,10 @@ final class StaticAccessorTests: BaseTestCase { /// Class which captures the output of any underlying `RequestInterceptor`. final class InspectorInterceptor: RequestInterceptor { - var onAdaptation: ((Result) -> Void)? + var onAdaptation: ((Result) -> Void)? var onRetry: ((RetryResult) -> Void)? - private(set) var adaptations: [Result] = [] + private(set) var adaptations: [Result] = [] private(set) var retries: [RetryResult] = [] /// Number of times `retry` was called. @@ -649,7 +649,7 @@ final class InspectorInterceptor: RequestInterc self.interceptor = interceptor } - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { interceptor.adapt(urlRequest, for: session) { result in self.adaptations.append(result) completion(result) @@ -657,7 +657,7 @@ final class InspectorInterceptor: RequestInterc } } - func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { interceptor.retry(request, for: session, dueTo: error) { result in self.retries.append(result) completion(result) @@ -670,7 +670,7 @@ final class InspectorInterceptor: RequestInterc final class SingleRetrier: RequestInterceptor { private var hasRetried = false - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { if hasRetried { let method = urlRequest.method ?? .get let endpoint = Endpoint(path: .method(method), @@ -682,7 +682,7 @@ final class SingleRetrier: RequestInterceptor { } } - func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { completion(hasRetried ? .doNotRetry : .retry) hasRetried = true } diff --git a/Tests/ResponseSerializationTests.swift b/Tests/ResponseSerializationTests.swift index ab90b98e6..9741c11ef 100644 --- a/Tests/ResponseSerializationTests.swift +++ b/Tests/ResponseSerializationTests.swift @@ -1184,7 +1184,7 @@ final class CustomResponseSerializerTests: BaseTestCase { func testThatCustomResponseSerializersCanBeWrittenWithoutCompilerIssues() { // Given final class UselessResponseSerializer: ResponseSerializer { - func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: Error?) throws -> Data? { + func serialize(request: URLRequest?, response: HTTPURLResponse?, data: Data?, error: (any Error)?) throws -> Data? { data } } @@ -1382,7 +1382,7 @@ final class DataPreprocessorTests: BaseTestCase { } final class StaticDataPreprocessorTests: BaseTestCase { - func consumeDataPreprocessor(_ dataPreprocessor: DataPreprocessor) { + func consumeDataPreprocessor(_ dataPreprocessor: any DataPreprocessor) { _ = dataPreprocessor } diff --git a/Tests/ResponseTests.swift b/Tests/ResponseTests.swift index b04311bad..80b7c195c 100644 --- a/Tests/ResponseTests.swift +++ b/Tests/ResponseTests.swift @@ -425,7 +425,7 @@ final class ResponseTryMapTestCase: BaseTestCase { // Given let expectation = expectation(description: "request should succeed") - var response: DataResponse? + var response: DataResponse? // When AF.request(.default, parameters: ["foo": "bar"]).responseDecodable(of: TestResponse.self) { resp in @@ -453,7 +453,7 @@ final class ResponseTryMapTestCase: BaseTestCase { let expectation = expectation(description: "request should succeed") - var response: DataResponse? + var response: DataResponse? // When AF.request(.default, parameters: ["foo": "bar"]).responseData { resp in @@ -486,7 +486,7 @@ final class ResponseTryMapTestCase: BaseTestCase { let urlString = String.invalidURL let expectation = expectation(description: "request should fail with invalid URL error") - var response: DataResponse? + var response: DataResponse? // When AF.request(urlString, parameters: ["foo": "bar"]).responseData { resp in @@ -579,7 +579,7 @@ final class ResponseTryMapErrorTestCase: BaseTestCase { // Given let expectation = expectation(description: "request should succeed") - var response: DataResponse? + var response: DataResponse? // When AF.request(.default).responseData { resp in @@ -602,7 +602,7 @@ final class ResponseTryMapErrorTestCase: BaseTestCase { let urlString = String.invalidURL let expectation = expectation(description: "request should fail") - var response: DataResponse? + var response: DataResponse? // When AF.request(urlString).responseData { resp in @@ -632,7 +632,7 @@ final class ResponseTryMapErrorTestCase: BaseTestCase { let urlString = String.invalidURL let expectation = expectation(description: "request should fail") - var response: DataResponse? + var response: DataResponse? // When AF.request(urlString).responseData { resp in diff --git a/Tests/RetryPolicyTests.swift b/Tests/RetryPolicyTests.swift index 777abe672..27be5c088 100644 --- a/Tests/RetryPolicyTests.swift +++ b/Tests/RetryPolicyTests.swift @@ -335,7 +335,7 @@ final class RetryPolicyTestCase: BaseRetryPolicyTestCase { let retryPolicy = RetryPolicy() let request = request(method: .get) - let errors: [Error] = [resourceUnavailable, + let errors: [any Error] = [resourceUnavailable, unknown, resourceUnavailableError, unknownError] diff --git a/Tests/ServerTrustEvaluatorTests.swift b/Tests/ServerTrustEvaluatorTests.swift index 2e9857986..53578cbe0 100644 --- a/Tests/ServerTrustEvaluatorTests.swift +++ b/Tests/ServerTrustEvaluatorTests.swift @@ -1425,7 +1425,7 @@ final class ServerTrustPolicyCertificatesInBundleTestCase: ServerTrustPolicyTest } final class StaticServerTrustAccessorTests: ServerTrustPolicyTestCase { - func consumeServerTrustEvaluator(_ evaluator: ServerTrustEvaluating) { + func consumeServerTrustEvaluator(_ evaluator: any ServerTrustEvaluating) { _ = evaluator } diff --git a/Tests/SessionTests.swift b/Tests/SessionTests.swift index 60ba40e23..97a9de37c 100644 --- a/Tests/SessionTests.swift +++ b/Tests/SessionTests.swift @@ -40,10 +40,10 @@ final class SessionTestCase: BaseTestCase { self.throwsError = throwsError } - func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { adaptedCount += 1 - let result: Result = Result { + let result: Result = Result { guard !throwsError else { throw AFError.invalidURL(url: "") } var urlRequest = urlRequest @@ -67,10 +67,10 @@ final class SessionTestCase: BaseTestCase { self.throwsError = throwsError } - func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, completion: @escaping (Result) -> Void) { adaptedCount += 1 - let result: Result = Result { + let result: Result = Result { guard !throwsError else { throw AFError.invalidURL(url: "") } var urlRequest = urlRequest @@ -92,7 +92,7 @@ final class SessionTestCase: BaseTestCase { var adaptedCount = 0 var retryCount = 0 var retryCalledCount = 0 - var retryErrors: [Error] = [] + var retryErrors: [any Error] = [] var shouldApplyAuthorizationHeader = false var throwsErrorOnFirstAdapt = false @@ -103,10 +103,10 @@ final class SessionTestCase: BaseTestCase { func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, - completion: @escaping (Result) -> Void) { + completion: @escaping (Result) -> Void) { adaptCalledCount += 1 - let result: Result = Result { + let result: Result = Result { if throwsErrorOnFirstAdapt { throwsErrorOnFirstAdapt = false throw AFError.invalidURL(url: "/adapt/error/1") @@ -133,7 +133,7 @@ final class SessionTestCase: BaseTestCase { func retry(_ request: Request, for session: Session, - dueTo error: Error, + dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { retryCalledCount += 1 @@ -166,7 +166,7 @@ final class SessionTestCase: BaseTestCase { var adaptedCount = 0 var retryCalledCount = 0 var retryCount = 0 - var retryErrors: [Error] = [] + var retryErrors: [any Error] = [] } private let mutableState = Protected(MutableState()) @@ -175,12 +175,12 @@ final class SessionTestCase: BaseTestCase { var adaptedCount: Int { mutableState.adaptedCount } var retryCalledCount: Int { mutableState.retryCalledCount } var retryCount: Int { mutableState.retryCount } - var retryErrors: [Error] { mutableState.retryErrors } + var retryErrors: [any Error] { mutableState.retryErrors } func adapt(_ urlRequest: URLRequest, using state: RequestAdapterState, - completion: @escaping (Result) -> Void) { - let result: Result = mutableState.write { mutableState in + completion: @escaping (Result) -> Void) { + let result: Result = mutableState.write { mutableState in mutableState.adaptCalledCount += 1 return Result { @@ -197,7 +197,7 @@ final class SessionTestCase: BaseTestCase { func retry(_ request: Request, for session: Session, - dueTo error: Error, + dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { mutableState.write { mutableState in mutableState.retryCalledCount += 1 @@ -1555,7 +1555,7 @@ final class SessionTestCase: BaseTestCase { struct InvalidAdapter: RequestInterceptor { func adapt(_ urlRequest: URLRequest, for session: Session, - completion: @escaping (Result) -> Void) { + completion: @escaping (Result) -> Void) { var request = urlRequest request.httpBody = Data("invalid".utf8) @@ -1699,7 +1699,7 @@ final class SessionMassActionTestCase: BaseTestCase { final class OnceRetrier: RequestInterceptor { private var hasRetried = false - func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, for session: Session, completion: @escaping (Result) -> Void) { if hasRetried { var request = urlRequest request.url = Endpoint.delay(1).url @@ -1709,7 +1709,7 @@ final class SessionMassActionTestCase: BaseTestCase { } } - func retry(_ request: Request, for session: Session, dueTo error: Error, completion: @escaping (RetryResult) -> Void) { + func retry(_ request: Request, for session: Session, dueTo error: any Error, completion: @escaping (RetryResult) -> Void) { completion(hasRetried ? .doNotRetry : .retry) hasRetried = true } diff --git a/Tests/TLSEvaluationTests.swift b/Tests/TLSEvaluationTests.swift index 375331212..24e316a14 100644 --- a/Tests/TLSEvaluationTests.swift +++ b/Tests/TLSEvaluationTests.swift @@ -99,7 +99,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { let expectation = expectation(description: "\(revokedURLString)") let manager = Session(configuration: configuration) - var error: Error? + var error: (any Error)? // When manager.request(revokedURLString) @@ -166,7 +166,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(revokedURLString)") - var error: Error? + var error: (any Error)? // When manager.request(revokedURLString) @@ -350,7 +350,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) @@ -374,7 +374,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) @@ -398,7 +398,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) @@ -463,7 +463,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) @@ -487,7 +487,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) @@ -511,7 +511,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) @@ -539,7 +539,7 @@ final class TLSEvaluationExpiredLeafCertificateTestCase: BaseTestCase { serverTrustManager: ServerTrustManager(evaluators: evaluators)) let expectation = expectation(description: "\(expiredURLString)") - var error: Error? + var error: (any Error)? // When manager.request(expiredURLString) diff --git a/Tests/TestHelpers.swift b/Tests/TestHelpers.swift index 7898e39e7..18dfa36ab 100644 --- a/Tests/TestHelpers.swift +++ b/Tests/TestHelpers.swift @@ -348,11 +348,11 @@ extension URLRequestConvertible where Self == EndpointSequence { extension Session { func request(_ endpoint: Endpoint, parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, + encoding: any ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataRequest { - request(endpoint as URLConvertible, + request(endpoint as (any URLConvertible), method: endpoint.method, parameters: parameters, encoding: encoding, @@ -363,11 +363,11 @@ extension Session { func request(_ endpoint: Endpoint, parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, + encoder: any ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataRequest { - request(endpoint as URLConvertible, + request(endpoint as (any URLConvertible), method: endpoint.method, parameters: parameters, encoder: encoder, @@ -376,16 +376,16 @@ extension Session { requestModifier: requestModifier) } - func request(_ endpoint: Endpoint, interceptor: RequestInterceptor? = nil) -> DataRequest { - request(endpoint as URLRequestConvertible, interceptor: interceptor) + func request(_ endpoint: Endpoint, interceptor: (any RequestInterceptor)? = nil) -> DataRequest { + request(endpoint as (any URLRequestConvertible), interceptor: interceptor) } func streamRequest(_ endpoint: Endpoint, headers: HTTPHeaders? = nil, automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil) -> DataStreamRequest { - streamRequest(endpoint as URLConvertible, + streamRequest(endpoint as (any URLConvertible), method: endpoint.method, headers: headers, automaticallyCancelOnStreamError: automaticallyCancelOnStreamError, @@ -395,20 +395,20 @@ extension Session { func streamRequest(_ endpoint: Endpoint, automaticallyCancelOnStreamError: Bool = false, - interceptor: RequestInterceptor? = nil) -> DataStreamRequest { - streamRequest(endpoint as URLRequestConvertible, + interceptor: (any RequestInterceptor)? = nil) -> DataStreamRequest { + streamRequest(endpoint as (any URLRequestConvertible), automaticallyCancelOnStreamError: automaticallyCancelOnStreamError, interceptor: interceptor) } func download(_ endpoint: Endpoint, parameters: Parameters? = nil, - encoder: ParameterEncoder = URLEncodedFormParameterEncoder.default, + encoder: any ParameterEncoder = URLEncodedFormParameterEncoder.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - download(endpoint as URLConvertible, + download(endpoint as (any URLConvertible), method: endpoint.method, parameters: parameters, encoder: encoder, @@ -420,12 +420,12 @@ extension Session { func download(_ endpoint: Endpoint, parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, + encoding: any ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, requestModifier: RequestModifier? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - download(endpoint as URLConvertible, + download(endpoint as (any URLConvertible), method: endpoint.method, parameters: parameters, encoding: encoding, @@ -436,18 +436,18 @@ extension Session { } func download(_ endpoint: Endpoint, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, to destination: DownloadRequest.Destination? = nil) -> DownloadRequest { - download(endpoint as URLRequestConvertible, interceptor: interceptor, to: destination) + download(endpoint as (any URLRequestConvertible), interceptor: interceptor, to: destination) } func upload(_ data: Data, to endpoint: Endpoint, headers: HTTPHeaders? = nil, - interceptor: RequestInterceptor? = nil, + interceptor: (any RequestInterceptor)? = nil, fileManager: FileManager = .default, requestModifier: RequestModifier? = nil) -> UploadRequest { - upload(data, to: endpoint as URLConvertible, + upload(data, to: endpoint as (any URLConvertible), method: endpoint.method, headers: headers, interceptor: interceptor, @@ -476,7 +476,7 @@ struct TestResponse: Decodable { } extension Alamofire.HTTPHeaders: Swift.Decodable { - public init(from decoder: Decoder) throws { + public init(from decoder: any Decoder) throws { let container = try decoder.singleValueContainer() let headers = try container.decode([HTTPHeader].self) @@ -490,7 +490,7 @@ extension Alamofire.HTTPHeader: Swift.Decodable { case name, value } - public init(from decoder: Decoder) throws { + public init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) let name = try container.decode(String.self, forKey: .name) diff --git a/Tests/URLProtocolTests.swift b/Tests/URLProtocolTests.swift index e75e5e85c..be03faae6 100644 --- a/Tests/URLProtocolTests.swift +++ b/Tests/URLProtocolTests.swift @@ -98,7 +98,7 @@ extension ProxyURLProtocol: URLSessionDataDelegate { client?.urlProtocol(self, didLoad: data) } - func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: (any Error)?) { if let response = task.response { client?.urlProtocol(self, didReceive: response, cacheStoragePolicy: .notAllowed) } diff --git a/Tests/ValidationTests.swift b/Tests/ValidationTests.swift index f86a377a6..b979b17af 100644 --- a/Tests/ValidationTests.swift +++ b/Tests/ValidationTests.swift @@ -683,7 +683,7 @@ extension DataRequest { } } - func validate(with error: Error) -> Self { + func validate(with error: any Error) -> Self { validate { _, _, _ in .failure(error) } } } @@ -702,7 +702,7 @@ extension DownloadRequest { } } - func validate(with error: Error) -> Self { + func validate(with error: any Error) -> Self { validate { _, _, _ in .failure(error) } } } diff --git a/Tests/WebSocketTests.swift b/Tests/WebSocketTests.swift index 3e0039b66..68034bfa6 100644 --- a/Tests/WebSocketTests.swift +++ b/Tests/WebSocketTests.swift @@ -730,8 +730,8 @@ extension Session { @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) func webSocketRequest(_ endpoint: Endpoint, configuration: WebSocketRequest.Configuration = .default, - interceptor: RequestInterceptor? = nil) -> WebSocketRequest { - webSocketRequest(performing: endpoint as URLRequestConvertible, + interceptor: (any RequestInterceptor)? = nil) -> WebSocketRequest { + webSocketRequest(performing: endpoint as (any URLRequestConvertible), configuration: configuration, interceptor: interceptor) }