From fd9ae729d818079aadae5fd6f1a48a8b5dcc4daa Mon Sep 17 00:00:00 2001 From: Dariusz Rybicki <dariusz@elixxir.io> Date: Mon, 15 Aug 2022 18:54:21 +0100 Subject: [PATCH] Add FetchBannedList functor --- .../ReportingFeature/FetchBannedList.swift | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Sources/ReportingFeature/FetchBannedList.swift diff --git a/Sources/ReportingFeature/FetchBannedList.swift b/Sources/ReportingFeature/FetchBannedList.swift new file mode 100644 index 00000000..55617df4 --- /dev/null +++ b/Sources/ReportingFeature/FetchBannedList.swift @@ -0,0 +1,45 @@ +import Foundation +import XCTestDynamicOverlay + +public struct FetchBannedList { + public enum Error: Swift.Error, Equatable { + case network(URLError) + case invalidResponse + } + + public typealias Completion = (Result<Data, Error>) -> Void + + public var run: (@escaping Completion) -> Void + + public func callAsFunction(completion: @escaping Completion) { + run(completion) + } +} + +extension FetchBannedList { + public static let live = FetchBannedList { completion in + let url = URL(string: "https://elixxir-bins.s3.us-west-1.amazonaws.com/client/bannedUsers/bannedTesting.csv")! + let session = URLSession.shared + let task = session.dataTask(with: url) { data, response, error in + if let error = error { + completion(.failure(.network(error as! URLError))) + return + } + guard let response = response as? HTTPURLResponse, + (200..<300).contains(response.statusCode), + let data = data + else { + completion(.failure(.invalidResponse)) + return + } + completion(.success(data)) + } + task.resume() + } +} + +extension FetchBannedList { + public static let unimplemented = FetchBannedList( + run: XCTUnimplemented("\(Self.self)") + ) +} -- GitLab