import Bindings

public struct ConnectionIdProvider {
  public var get: () -> Int

  public func callAsFunction() -> Int {
    get()
  }
}

extension ConnectionIdProvider {
  public static func live(
    bindingsConnection: BindingsConnection
  ) -> ConnectionIdProvider {
    ConnectionIdProvider(get: bindingsConnection.getId)
  }

  public static func live(
    bindingsAuthenticatedConnection: BindingsAuthenticatedConnection
  ) -> ConnectionIdProvider {
    ConnectionIdProvider(get: bindingsAuthenticatedConnection.getId)
  }
}

#if DEBUG
extension ConnectionIdProvider {
  public static let failing = ConnectionIdProvider {
    fatalError("Not implemented")
  }
}
#endif