Skip to content
Snippets Groups Projects
ReceiveFileCallbacksRegistry.swift 1.06 KiB
Newer Older
import Foundation
import XCTestDynamicOverlay
import XXClient

public struct ReceiveFileCallbacksRegistry {
  public var register: (ReceiveFileCallback) -> Cancellable
  public var registered: () -> ReceiveFileCallback
}

extension ReceiveFileCallbacksRegistry {
  public static func live() -> ReceiveFileCallbacksRegistry {
    class Registry {
      var callbacks: [UUID: ReceiveFileCallback] = [:]
    }
    let registry = Registry()
    return ReceiveFileCallbacksRegistry(
      register: { callback in
        let id = UUID()
        registry.callbacks[id] = callback
        return Cancellable { registry.callbacks[id] = nil }
      },
      registered: {
        ReceiveFileCallback { result in
          registry.callbacks.values.forEach { $0.handle(result) }
        }
      }
    )
  }
}

extension ReceiveFileCallbacksRegistry {
  public static let unimplemented = ReceiveFileCallbacksRegistry(
    register: XCTUnimplemented("\(Self.self).register", placeholder: Cancellable {}),
    registered: XCTUnimplemented("\(Self.self).registered", placeholder: .unimplemented)
  )
}