import Foundation import XCTestDynamicOverlay import XXClient public struct BackupCallbacksRegistry { public var register: (UpdateBackupFunc) -> Cancellable public var registered: () -> UpdateBackupFunc } extension BackupCallbacksRegistry { public static func live() -> BackupCallbacksRegistry { class Registry { var callbacks: [UUID: UpdateBackupFunc] = [:] } let registry = Registry() return BackupCallbacksRegistry( register: { callback in let id = UUID() registry.callbacks[id] = callback return Cancellable { registry.callbacks[id] = nil } }, registered: { UpdateBackupFunc { data in registry.callbacks.values.forEach { $0.handle(data) } } } ) } } extension BackupCallbacksRegistry { public static let unimplemented = BackupCallbacksRegistry( register: XCTUnimplemented("\(Self.self).register", placeholder: Cancellable {}), registered: XCTUnimplemented("\(Self.self).registered", placeholder: UpdateBackupFunc { _ in }) ) }