Newer
Older
import Foundation
import XCTestDynamicOverlay
public struct SendReport {
public typealias Completion = (Result<Void, Error>) -> Void
public var run: (Report, @escaping Completion) -> Void
public func callAsFunction(_ report: Report, completion: @escaping Completion) {
run(report, completion)
}
}
extension SendReport {
public static let live = SendReport { report, completion in
let url = URL(string: "https://3.74.237.181:11420/report")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
do {
request.httpBody = try JSONEncoder().encode(report)
} catch {
completion(.failure(error))
return
}
let session = URLSession(
configuration: .default,
delegate: SessionDelegate(),
delegateQueue: nil
)
let task = session.dataTask(with: request) { _, _, error in
defer { session.invalidateAndCancel() }
if let error = error {
completion(.failure(error))
return
}
completion(.success(()))
}
task.resume()
}
}
extension SendReport {
public static let unimplemented = SendReport(
run: XCTUnimplemented("\(Self.self)")
)
}
private class SessionDelegate: NSObject, URLSessionDelegate {
// TODO: handle TLS
}