let mut journey = start_journey(); while !journey.restricted_areas_visited() { journey.visit_next(); if journey.time() < time::earlier() { journey.kickstart_again(); } else if journey.encounters_obstacle() { journey.brush_aside(); } journey.propose_new_route_if_needed(); }