Skip to content

Commit ccf7094

Browse files
author
Fernando Fernandes
committed
Include request recreation on retrying
1 parent 8e78af5 commit ccf7094

File tree

3 files changed

+12
-15
lines changed

3 files changed

+12
-15
lines changed

Sources/SwiftTrader/Network/NetworkRequest/NetworkRequestProtocol+Execution.swift

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,19 @@ public extension NetworkRequest {
2222
/// Failed requests are to be retried `n` times, according to the `numberOfRetries` of `NetworkRequest.getter:settings`.
2323
///
2424
/// - Returns: `NetworkRequestResult`.
25-
func execute() async -> NetworkRequestResult {
25+
func execute(attemptNumber: Int = 1) async -> NetworkRequestResult {
2626
let urlRequest: URLRequest
2727
do {
2828
urlRequest = try request
2929
} catch {
3030
return .failure(.invalidRequest(error: error))
3131
}
32-
return await executeRetrying(request: urlRequest)
33-
}
34-
}
35-
36-
// MARK: - Private
37-
38-
private extension NetworkRequest {
39-
40-
func executeRetrying(request: URLRequest, attemptNumber: Int = 1) async -> NetworkRequestResult {
32+
4133
let result: NetworkRequestResult
4234
#if os(macOS) || os(iOS)
43-
result = await runOnApplePlatforms(request: request)
35+
result = await runOnApplePlatforms(request: urlRequest)
4436
#elseif canImport(FoundationNetworking)
45-
result = await runOnLinux(request: request)
37+
result = await runOnLinux(request: urlRequest)
4638
#endif
4739
switch result {
4840
case .success:
@@ -51,12 +43,17 @@ private extension NetworkRequest {
5143
if attemptNumber <= settings.numberOfRetries {
5244
log(message: "Retrying... \(attemptNumber) of \(settings.numberOfRetries)")
5345
try? await Task.sleep(nanoseconds: 1_000_000_000 * settings.delayBetweenRetries)
54-
return await executeRetrying(request: request, attemptNumber: attemptNumber + 1)
46+
return await execute(attemptNumber: attemptNumber + 1)
5547
} else {
5648
return result
5749
}
5850
}
5951
}
52+
}
53+
54+
// MARK: - Private
55+
56+
private extension NetworkRequest {
6057

6158
#if os(macOS) || os(iOS)
6259
/// `async/await` can be simply called on macOS and iOS platforms; no further action is needed.

Sources/SwiftTrader/Network/NetworkRequest/NetworkRequestProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public protocol NetworkRequest {
2020
var session: URLSession { get }
2121
var request: URLRequest { get throws }
2222
var settings: NetworkRequestSettings { get }
23-
func execute() async -> NetworkRequestResult
23+
func execute(attemptNumber: Int) async -> NetworkRequestResult
2424
func decode(_ data: Data) throws -> DecodableModel
2525
func log(message: Logger.Message)
2626
}

Sources/SwiftTrader/Network/NetworkRequest/NetworkRequestSettingsProtocol.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public struct DefaultNetworkRequestSettings: NetworkRequestSettings {
3232
public var logLevel: Logger.Level = .debug
3333
public var isLoggingEnable: Bool = true
3434
public var numberOfRetries: Int = 3
35-
public var delayBetweenRetries: UInt64 = 2
35+
public var delayBetweenRetries: UInt64 = 1
3636

3737
// MARK: - Lifecycle
3838

0 commit comments

Comments
 (0)