// // RouterBlockDelegate.swift // RoutingTests // // Created by Jon Petersson on 2023-08-22. // Copyright © 2023 Mullvad VPN AB. All rights reserved. // import Foundation import Routing final class RouterBlockDelegate: ApplicationRouterDelegate, @unchecked Sendable { var handleRoute: ((RoutePresentationContext, Bool, (Coordinator) -> Void) -> Void)? var handleDismiss: ((RouteDismissalContext, () -> Void) -> Void)? var shouldPresent: ((RouteType) -> Bool)? var shouldDismiss: ((RouteDismissalContext) -> Bool)? var handleSubnavigation: (@Sendable @MainActor (RouteSubnavigationContext, () -> Void) -> Void)? nonisolated func applicationRouter( _ router: ApplicationRouter, presentWithContext context: RoutePresentationContext, animated: Bool, completion: @escaping @Sendable (Coordinator) -> Void ) { MainActor.assumeIsolated { handleRoute?(context, animated, completion) ?? completion(Coordinator()) } } func applicationRouter( _ router: ApplicationRouter, dismissWithContext context: RouteDismissalContext, completion: @escaping @Sendable () -> Void ) { handleDismiss?(context, completion) ?? completion() } func applicationRouter(_ router: ApplicationRouter, shouldPresent route: RouteType) -> Bool { return shouldPresent?(route) ?? true } func applicationRouter( _ router: ApplicationRouter, shouldDismissWithContext context: RouteDismissalContext ) -> Bool { return shouldDismiss?(context) ?? true } func applicationRouter( _ router: ApplicationRouter, handleSubNavigationWithContext context: RouteSubnavigationContext, completion: @escaping @Sendable @MainActor () -> Void ) { MainActor.assumeIsolated { handleSubnavigation?(context, completion) ?? completion() } } }