Skip to content
Snippets Groups Projects
Commit d330881d authored by Dariusz Rybicki's avatar Dariusz Rybicki
Browse files

Add ProcessBannedList functor

parent fd9ae729
No related branches found
No related tags found
3 merge requests!71Releasing v1.1.5 (214),!69Implemented filtering for banned/blocked users and reporting,!67v1.1.5 b(203)
......@@ -749,6 +749,7 @@ let package = Package(
.target(
name: "ReportingFeature",
dependencies: [
.product(name: "SwiftCSV", package: "SwiftCSV"),
.product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"),
],
resources: [
......
import Foundation
import SwiftCSV
import XCTestDynamicOverlay
public struct ProcessBannedList {
public enum ElementError: Swift.Error {
case missingUserId
case invalidUserId(String)
}
public enum Error: Swift.Error {
case invalidData
case csv(Swift.Error)
}
public typealias ForEach = (Result<Data, ElementError>) -> Void
public typealias Completion = (Result<Void, Error>) -> Void
public var run: (Data, ForEach, Completion) -> Void
public func callAsFunction(
data: Data,
forEach: ForEach,
completion: Completion
) {
run(data, forEach, completion)
}
}
extension ProcessBannedList {
public static let live = ProcessBannedList { data, forEach, completion in
guard let csvString = String(data: data, encoding: .utf8) else {
completion(.failure(.invalidData))
return
}
let csv: EnumeratedCSV
do {
csv = try EnumeratedCSV(string: csvString)
}
catch {
completion(.failure(.csv(error)))
return
}
csv.rows.forEach { row in
guard let userIdString = row.first else {
forEach(.failure(.missingUserId))
return
}
guard let userId = Data(base64Encoded: userIdString) else {
forEach(.failure(.invalidUserId(userIdString)))
return
}
forEach(.success(userId))
}
completion(.success(()))
}
}
extension ProcessBannedList {
public static let unimplemented = ProcessBannedList { _, _, _ in
let run: () -> Void = XCTUnimplemented("\(Self.self)")
run()
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment