From 7809f80ae84cc168d55d99523b2acb3f6cdacc36 Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Mon, 15 Aug 2022 15:11:31 +0100
Subject: [PATCH] Add SendReport functor

---
 Sources/ReportingFeature/SendReport.swift | 41 +++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 Sources/ReportingFeature/SendReport.swift

diff --git a/Sources/ReportingFeature/SendReport.swift b/Sources/ReportingFeature/SendReport.swift
new file mode 100644
index 00000000..1ffcf99c
--- /dev/null
+++ b/Sources/ReportingFeature/SendReport.swift
@@ -0,0 +1,41 @@
+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)
+        let task = session.dataTask(with: request) { data, response, error in
+            if let error = error {
+                completion(.failure(error))
+                return
+            }
+            completion(.success(()))
+        }
+        task.resume()
+    }
+}
+
+extension SendReport {
+    public static let unimplemented = SendReport(
+        run: XCTUnimplemented("\(Self.self)")
+    )
+}
-- 
GitLab