From 8dfd7580400fd45c3d4d4b482104e1f1987bd71a Mon Sep 17 00:00:00 2001
From: Dariusz Rybicki <dariusz@elixxir.io>
Date: Thu, 2 Jun 2022 14:14:44 +0200
Subject: [PATCH] Add ConnectionAuthStatusProvider

---
 Sources/ElixxirDAppsSDK/Connection.swift      |  8 ++---
 .../ConnectionAuthStatusProvider.swift        | 33 +++++++++++++++++++
 2 files changed, 37 insertions(+), 4 deletions(-)
 create mode 100644 Sources/ElixxirDAppsSDK/ConnectionAuthStatusProvider.swift

diff --git a/Sources/ElixxirDAppsSDK/Connection.swift b/Sources/ElixxirDAppsSDK/Connection.swift
index cd6e0fa8..4ecac93a 100644
--- a/Sources/ElixxirDAppsSDK/Connection.swift
+++ b/Sources/ElixxirDAppsSDK/Connection.swift
@@ -1,7 +1,7 @@
 import Bindings
 
 public struct Connection {
-  public var isAuthenticated: () -> Bool
+  public var isAuthenticated: ConnectionAuthStatusProvider
   public var getPartner: ConnectionPartnerProvider
   public var send: MessageSender
   public var listen: MessageListener
@@ -13,7 +13,7 @@ extension Connection {
     bindingsConnection: BindingsConnection
   ) -> Connection {
     Connection(
-      isAuthenticated: { false },
+      isAuthenticated: .live(bindingsConnection: bindingsConnection),
       getPartner: .live(bindingsConnection: bindingsConnection),
       send: .live(bindingsConnection: bindingsConnection),
       listen: .live(bindingsConnection: bindingsConnection),
@@ -25,7 +25,7 @@ extension Connection {
     bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
   ) -> Connection {
     Connection(
-      isAuthenticated: bindingsAuthenticatedConnection.isAuthenticated,
+      isAuthenticated: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
       getPartner: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
       send: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
       listen: .live(bindingsAuthenticatedConnection: bindingsAuthenticatedConnection),
@@ -37,7 +37,7 @@ extension Connection {
 #if DEBUG
 extension Connection {
   public static let failing = Connection(
-    isAuthenticated: { fatalError("Not implemented") },
+    isAuthenticated: .failing,
     getPartner: .failing,
     send: .failing,
     listen: .failing,
diff --git a/Sources/ElixxirDAppsSDK/ConnectionAuthStatusProvider.swift b/Sources/ElixxirDAppsSDK/ConnectionAuthStatusProvider.swift
new file mode 100644
index 00000000..d42e78f3
--- /dev/null
+++ b/Sources/ElixxirDAppsSDK/ConnectionAuthStatusProvider.swift
@@ -0,0 +1,33 @@
+import Bindings
+
+public struct ConnectionAuthStatusProvider {
+  public var isAuthenticated: () -> Bool
+
+  public func callAsFunction() -> Bool {
+    isAuthenticated()
+  }
+}
+
+extension ConnectionAuthStatusProvider {
+  public static func live(
+    bindingsConnection: BindingsConnection
+  ) -> ConnectionAuthStatusProvider {
+    ConnectionAuthStatusProvider { false }
+  }
+
+  public static func live(
+    bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
+  ) -> ConnectionAuthStatusProvider {
+    ConnectionAuthStatusProvider(
+      isAuthenticated: bindingsAuthenticatedConnection.isAuthenticated
+    )
+  }
+}
+
+#if DEBUG
+extension ConnectionAuthStatusProvider {
+  public static let failing = ConnectionAuthStatusProvider {
+    fatalError("Not implemented")
+  }
+}
+#endif
-- 
GitLab