     weak var destinationNavigationController: UINavigationController? { get }
 }
 
+public enum PresentationStyle {
+    case push
+    case modal
+}
+
 public protocol PushModalCoordinator: DefaultCoordinator {
     var configuration: ((ViewController) -> Void)? { get }
     var navigationController: UINavigationController? { get }
+    var presentationStyle: PresentationStyle { get }
     weak var destinationNavigationController: UINavigationController? { get }
 }
 

}

public extension PushModalCoordinator where ViewController: UIViewController, ViewController: Coordinated {
    func start() {
        guard let viewController = viewController else {
            return

        configuration?(viewController)
        viewController.setCoordinator(self)

        switch presentationStyle {
        case .modal where destinationNavigationController != nil:
            navigationController?.present(destinationNavigationController!, animated: animated, completion: nil)
        case .push:
            navigationController?.pushViewController(viewController, animated: animated)
        default:
            break
        }
    }

    func stop() {
        delegate?.willStop(in: self)

        switch presentationStyle {
        case .modal:
            viewController?.dismiss(animated: true) {
                self.delegate?.didStop(in: self)
            }
        case .push:
            let _ = navigationController?.popViewController(animated: animated)
            delegate?.didStop(in: self)
        }
