Skip to content

Commit 7c45cd4

Browse files
authored
Merge pull request #135 from Aldo10012/cleanup_adaptors_p2
Cleanup adaptors p2
2 parents 4f528ce + 173d023 commit 7c45cd4

10 files changed

Lines changed: 2 additions & 744 deletions

File tree

Documentation/03_howToPerformARequest.md

Lines changed: 0 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -22,72 +22,6 @@ do {
2222
}
2323
```
2424

25-
## Completion Handlers
26-
27-
Traditional callback-based approach:
28-
29-
```swift
30-
// With response decoding
31-
RequestPerformer().performTask(request: request, decodeTo: UserData.self) { result in
32-
switch result {
33-
case .success(let userData):
34-
// Handle decoded response
35-
case .failure(let error):
36-
// Handle error
37-
}
38-
}
39-
40-
// Without decoding
41-
RequestPerformer().performTask(request: request, decodeTo: EmptyResponse.self) { result in
42-
switch result {
43-
case .success:
44-
// Handle success
45-
case .failure(let error):
46-
// Handle error
47-
}
48-
}
49-
```
50-
51-
## Task Control
52-
53-
Control over URLSessionTask:
54-
55-
```swift
56-
// Store task reference
57-
let task = RequestPerformer().performTask(request: request) { _ in
58-
// Handle completion
59-
}
60-
61-
// Cancel task if needed
62-
task.cancel()
63-
64-
// Resume suspended task
65-
task.resume()
66-
67-
// Suspend task
68-
task.suspend()
69-
70-
// Get task state
71-
print(task.state) // running, suspended, canceling, completed
72-
```
73-
74-
## Publishers
75-
76-
If you prefer using the Combine framework
77-
78-
```swift
79-
let cancellables = Set<AnyCancellable>()
80-
81-
RequestPerformer()
82-
.performPublisher(request: CustomRequest(), decodeTo: CustomeType.swift)
83-
.sink(receiveCompletion: { completion in
84-
// handle completion
85-
}, receiveValue: { customType in
86-
// handle response
87-
})
88-
.store(in: &cancellables)
89-
```
90-
9125
## Error Handling
9226

9327
EZNetworking provides comprehensive error handling:

Sources/EZNetworking/Core/Common/CancellableRequest.swift

Lines changed: 0 additions & 25 deletions
This file was deleted.

Sources/EZNetworking/Core/Common/TaskBox.swift

Lines changed: 0 additions & 22 deletions
This file was deleted.

Sources/EZNetworking/Services/Performers/Protocols/RequestPerformable.swift

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,4 @@ public protocol RequestPerformable {
66
request: Request,
77
decodeTo decodableObject: T.Type
88
) async throws -> T
9-
10-
func performTask<T: Decodable & Sendable>(
11-
request: Request,
12-
decodeTo decodableObject: T.Type,
13-
completion: @escaping ((Result<T, NetworkingError>) -> Void)
14-
) -> CancellableRequest
15-
16-
func performPublisher<T: Decodable & Sendable>(
17-
request: Request,
18-
decodeTo decodableObject: T.Type
19-
) -> AnyPublisher<T, NetworkingError>
209
}

Sources/EZNetworking/Services/Performers/RequestPerformer.swift

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ public struct RequestPerformer: RequestPerformable {
1616
self.decoder = decoder
1717
}
1818

19-
// MARK: - CORE - async/await
20-
2119
public func perform<T: Decodable & Sendable>(
2220
request: Request,
2321
decodeTo decodableObject: T.Type
@@ -36,63 +34,8 @@ public struct RequestPerformer: RequestPerformable {
3634
}
3735
}
3836

39-
// MARK: - Adapter - callbacks
40-
41-
@discardableResult
42-
public func performTask<T: Decodable & Sendable>(
43-
request: Request,
44-
decodeTo decodableObject: T.Type,
45-
completion: @escaping (Result<T, NetworkingError>) -> Void
46-
) -> CancellableRequest {
47-
let taskBox = TaskBox()
48-
let cancellableRequest = CancellableRequest {
49-
taskBox.task = createTaskAndPerform(request: request, decodeTo: decodableObject, completion: completion)
50-
} onCancel: {
51-
taskBox.task?.cancel()
52-
}
53-
cancellableRequest.resume()
54-
return cancellableRequest
55-
}
56-
57-
// MARK: - Adapter - Publisher
58-
59-
public func performPublisher<T: Decodable & Sendable>(
60-
request: Request,
61-
decodeTo decodableObject: T.Type
62-
) -> AnyPublisher<T, NetworkingError> {
63-
Deferred {
64-
let taskBox = TaskBox()
65-
return Future<T, NetworkingError> { promise in
66-
taskBox.task = createTaskAndPerform(request: request, decodeTo: decodableObject, completion: { promise($0) })
67-
}
68-
.handleEvents(receiveCancel: {
69-
taskBox.task?.cancel()
70-
})
71-
}
72-
.eraseToAnyPublisher()
73-
}
74-
7537
// MARK: - Helpers
7638

77-
private func createTaskAndPerform<T: Decodable & Sendable>(
78-
request: Request,
79-
decodeTo decodableObject: T.Type,
80-
completion: @escaping ((Result<T, NetworkingError>) -> Void)
81-
) -> Task<Void, Never> {
82-
Task {
83-
do {
84-
let result = try await perform(request: request, decodeTo: decodableObject)
85-
guard !Task.isCancelled else { return }
86-
completion(.success(result))
87-
} catch is CancellationError {
88-
// Task has been cancelled, do not return
89-
} catch {
90-
guard !Task.isCancelled else { return }
91-
completion(.failure(mapError(error)))
92-
}
93-
}
94-
}
95-
9639
private func mapError(_ error: Error) -> NetworkingError {
9740
if let networkError = error as? NetworkingError { return networkError }
9841
if let urlError = error as? URLError { return .requestFailed(reason: .urlError(underlying: urlError)) }

Tests/EZNetworkingTests/Core/Common/CancellableRequestTests.swift

Lines changed: 0 additions & 106 deletions
This file was deleted.

Tests/EZNetworkingTests/Core/Common/TaskBoxTests.swift

Lines changed: 0 additions & 19 deletions
This file was deleted.

Tests/EZNetworkingTests/Services/Performers/RequestPerformable_asyncAwait_Tests.swift renamed to Tests/EZNetworkingTests/Services/Performers/RequestPerformableTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
import Foundation
33
import Testing
44

5-
@Suite("Test RequestPerformable async/await methods")
6-
final class RequestPerformableAsyncAwaitTests {
5+
@Suite("Test RequestPerformable")
6+
final class RequestPerformableTests {
77
// MARK: - SUCCESS RESPONSE
88

99
@Test("test perform(request:_, decodeTo:_) with all valid inputs does not throw error")

0 commit comments

Comments
 (0)